سلام!آقا من که ناراحت نشدم.اصلا ما کوچیک همتونیم!
شما تو پستهایی که اوایل فرستادید روشتون خیلی خوب بود..همونی که با خود ریموت کدهارو تو حافظه میکرو ذخیره کردی..اونو ادامه بدی بهتره که...من مشکلم اینه که تو AVR ضعیفم!به پالسهای سونی که نگاه میکردم حتما شما هم متوجه شدید که خروجی هر عملکرد پالسهاش فرق میکنه..یعنی زمان یک شدنشون...واقعا آدم میمونه تو کار این ریموت...آیا فقط با زمان یک و صفر شدن کلید هارو تعریف کردن؟ یا با یه فرکانس حامل کد میفرستن؟آیا پالسهای همزمانی (بین فرستنده و گیرنده) هم به همراه کد ارسال میشه؟
اگه لطف کنید بحث رو با دو موضوع ادامه بدیم...البته این دو موضوع عین همه و فقط کاربردش متفاوته!
1)" درست و ارسال کردن پالسهای مادون قرمز مشابه همون پالسهای دریافتی "
2)" دریافت کدهای ریموت توسط میکرو و انجام کاری که ازش میخواهیم "یعنی با ریموت بتونیم چندتا دستگاه رو روشن وخاموش کنیم!
موافقید؟
من یه بحث دیگه پیدا کردم...که فکر کنم شبیه کار etrmodern هست!میذارم اینجا:
فقط وجدانیش هر وقت به نتیجه رسیدید ما رو تنها نذاریدها!!! 8)
rc5 پروتكلي براي فرستنده گيرندههاي شركت فيليپس هست.من با اين دستور كار كردم و به خوبي هم كار ميكند. اما من از پروتكل شركت سوني و از كنترلهاي اين شركت استفاده كردم و از دستورات RC5 استفاده نكردم.چون اين دستورات كمي كند كار ميكند. براي اين كار شما به يك گيرنده مادون قرمز سه پايه احتياج داريد كه من يك نمونه از آن را 750 تومان خريدم. شما ميتوانيد از گيرنده هاي CD يا تلويزونهاي اوراقي نيز استفاده كنيد.اين گيرنده ها دوپايه براي تغذيه و يك پايه نيز براي ديتا دارند.در مرحله بعد بايد يك عدد ريموت از بازار تهيه كنيد . من نوعي از ريموت راكه حدود 20 مدل تلويزون را ساپورت ميكرد به قيمت سه هزار تومان خريداري كردم كه هم گيرندههاي فيليپس را راه اندازي ميكرد و هم گيرندههاي سوني وهم تلويزون خونمون رو! به قيمت سه هزار تومان!
در مرحله بعد شما بايد يا از دستورات RC5 استفاده كنيد كه كاملا در HELP نرم افزار BASCOM توضيح داده يا بايد با استفاده ازشكل موج ريموت برنامه آن را بنويسيد. براي اين كار شما بايد از يك LOGIC ANALYZER ويا اوسيلوسكوپ استفاده كنيد. اين هم شكل موج ريموتهاي سوني حاضر و آماده :
http://www.ustr.net/infrared/sony.shtml
اين نوع شكل موج همان طور كه توضيح داده شده براي ريموتهاي سوني از قبيل RM-Y123 و RMT-V124B وغيره كار ميكند. دراين نوع ريموتهابيت اول START BIT
هست كه طول آن 2.4MS است . بيتهاي 1 طول آن 1.8MS است وبيتهاي صفر طول آن 1.2MS است.7 بيت اول مربوط به دستورات (كد هر دكمه )و پنج بيت دوم مربوط به آدرس (كد ريموت ) است. در زير يك نمونه برنامه كه براي ريموتهاي سوني نوشته شده آورده شده:
http://mcselec.com/index.php?option=com_...&Itemid=57
من اين برنامه را براي فركانس 8MHZ بهينه سازي كرده ام . براي فركانسهاي ديگر بايد اعداد قرمز تغيير كند
$regfile = "m16def.dat" 'the chip type, subtitutes with the one you like
$crystal = 8000000 'the crystal speed i used
Config Timer0 = Timer , Prescale = 256 'config timer0 for data trap timer
Stop Timer0 'stop timer0 first for other process
Config Pind.3 = Input 'configure the int pin , i used int1 pin
Set Portd.3 'set the pull up resistor
Pin_ir Alias Pind.3 'alias for easy naming
Config Int1 = Falling 'configure int1 on falling edge
On Int1 Isr_int1 'the isr label
Dim Data_ir As Word 'the variabel need for the purpose
Dim Cnt_ir As Byte
Dim Flag_ir_start As Bit
Dim Flag_ir_ok As Bit
Print "SONY REMOTE DECODER" 'print some output to rx
Enable Interrupts 'enable global interrupt
Enable Int1 'enable int1 interrupt
Do 'main program start here
If Flag_ir_ok = 1 Then 'wait flag_ir_ok=1
Reset Flag_ir_ok 'reset the flag
Disable Int1 'disable the int1, so ignore all ir data from here
Print Data_ir 'print the data
Reset Flag_ir_ok 'reset the flag
Enable Int1 'enable the int1 interrupt to receive ir sony again
End If
Wait 1 'wait for sometime
Loop
'isr for infrared sensor
Isr_int1:
Timer0 = 0 'start timer0 to count
Start Timer0
Bitwait Pin_ir , Set 'wait the pin_ir to high again
Stop Timer0 'stop timer0
If Cnt_ir = 0 Then 'if this is the 1st data
If Timer0 > 36 And Timer0 < 40 Then 'check for a start bit, with prescale=256 and
Set Flag_ir_start 'crystal 11,0592MHz, got timer0 value between 111 and 114
Incr Cnt_ir 'as the correct ir start bit. Measure all the neccessary bit first
End If ' if you want to change it
End If
If Flag_ir_start = 1 And Cnt_ir > 0 Then 'a start bit found -> start sampling for next 12 bit
Decr Cnt_ir
If Timer0 < 18 Then 'timer0<18 then it is a zero(0), else it is a one (1)
Data_ir.cnt_ir = 0 'assign it to a word value for easy recording
Else
Data_ir.cnt_ir = 1
End If
Cnt_ir = Cnt_ir + 2
If Cnt_ir > 11 Then 'got all 12 bit
Shift Data_ir , Right , 1 'get rid of the start bit
Reset Flag_ir_start 'reset the start bit flag
Set Flag_ir_ok 'the data is ready to be read
Cnt_ir = 0 'reset the counter
End If
End If
Return
براي ريموتي كه در بالا معرفي كردم در 8MHZ بايد 36 به 80 و 40 به 90 و 18 به 30 تغيير كند.
در ضمن برد آن هم بسيار بالا و من تا 30 متر را امتحان كردم بسيار عالي جواب داد.
......................................................................................................
فقط چند نكته ديگه اگه خواستيد كنترلهاي تلويزيونهاي ديگه رو خودتون كشف رمز كنيد:
1-در طرف گيرنده شكل موج كاملا معكوس طرف فرستنده است و در حالتي كه كليدي فشرده نشده خروجي سنسور 1 هست.
2- در ريموتهاي مختلف تعداد بيتها و طول آنها فرق ميكند :
protocol name kHZ start bit data bits stop bit
1-NEC 39,2 1 32 1
2-SIRCS 40 1 12 -
3-RC5 36 1 12 -
4-JAPAN 32 1 48 -
5-SAMSUNG 39,2 1 32 1
اينهم شكل موجهاي آنها:
http://www.techdesign.be/projects/011/011_waves.htm