السلام عليكم,
أعتذر بشدة عن التأخير, ما زال وقتى ضيق جدا ولكن كثيرا من الأخوة أرسل لى لاستكمال باقى الموضوع, سأضع الدائرة والفكرة الأساسية مع الكود , وإن شاء الله نشرح الكود مع كيفية تعديله لعمل أى ريموت كونترول أو ارسال بيانات بالأشعة تحت الحمراء.
كما ذكرت فى الموضوع السابق , مستقبل الأشعة تحت الحمراء متوافر بالسوق ويمكن استخدامه مباشرة
الدائرة توضح كيفية استخدام أكواد الأشعة تحت الحمراء واخراجها على PORTB بمعنى استقبال Byte واخراجه على PORTB
المرسل , هو الكود الذى وضحته فى الجزء الثانى وهو كود ريموت السونى وهذا طبعا كمثال, يمكنك تعديل المرسل والمستقبل بسهولة لعمل الأكواد الخاصة بك.
أيضا يمكن تجريب الريموت السونى مباشرة مع هذه الدائرة , فكل زر سيخرج رقم على البورت ومع IF Then بسيطة يمكنك تشغيل ريلاى أو عمل أى وظيفة.
الكود كما ذكرت كتب باستخدام PICBasic Pro وذلك لسهولة قياس عرض النبضة باستخدام أمر واحد, ولكن طبعا يمكن استخدام MikroC ولكن ستضطر لاستخدام Timers and Interrupts لقياس النبضة.
كود:
* DEVICE MCLR_OFF, INTRC_OSC, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
DEFINE PULSIN_MAX 3000 '// MAX wait time for pulsin
DEFINE NO_CLRWDT '// Saves 17 words code space
'// For PIC16F62x & A versions
CMCON = 7 '// Comparators Off
VRCON = 0 '// Vref Off
TRISA.7 = 1 ' RA7 input
TRISB = 0 ' PORTB output
pulses VAR byte[13]
i VAR byte 'loop index
pulse_width VAR byte
LeadIn VAR word 'start pulse
Dbyte VAR byte
PORTB=0
i = 0
' Read Start Pulse
loop: PulsIn PORTA.7, 0, LeadIn
If LeadIn < 200 or LeadIn = 0 Then loop ' if less than 2ms keep looking
PORTB = 0
' start pulse received
' process 7 bit data
data_loop:
Pulsin PORTA.7,0,pulse_width
' here we have a valid pulse
pulses[i] = pulse_width
i = i+1
if (i<7) then data_loop
Dbyte = $FF ' fill all with one's then fill zeros
For i = 0 To 6
If pulses[i] < 100 Then Dbyte.0[i]=0 ' less than 1ms = 0
next i
PORTB = Dbyte
i=0
Dbyte = 0
Goto loop
إن شاء الله فى مشاركة قادمة, أضع مشروعا كاملا للريموت والمستقبل مع عدد من الريلاى كالدائرة التى تباع بمحلات الإلكترونيات التى تعمل على ريموت السونى.
أرحب بأى استفسارات