آی پی امداد
abtahi
آریا الکترونیک mehrinfo تکشو

درخواست: آشکار ساز کد کلیدهای کنترل تلویزیون

mehdi289

کاربر
2014-03-25
12
55
سلام خدمت همه دوستان
چند وقته که مشغول ساخت پروژه ای شدم که تو قسمتی از پروژه گیر کردم.
بطور خیلی ساده پروژه از این قراره که می خوام با یه کنترل تلویزیون به یک میکرو AVR فرمان بدم و میکرو هم با توجه به کلید فشرده شده رله ای خواص رو راه اندازی کنه...
کار های که تا حالا انجام شده به این قراره که:
کد ارسالی از سمت کنترل شامل دو قسمت مهمه بنام address و command . آدرس مشخص کننده نوع دستگاه رو مشخص میکنه مثلا تلویزیونه یا ضبطه یا پلیر و قسمت دوم دستوره که کد هر کلید رو مشخص میکنه وقتی این دوتا مشخص بشه با چندا دستور IF یا case به راحتی قسمت دوم کار انجام میشه ... مشکل تو آشکار کردن همین دوتاست
تو راحت ترین روش از پروتکل RC5 استفاده می شه که خیلی شیک با دستور( getrc5(address,command میشه این دوتا رو مشخص کرد. ولی متاسفانه فقط چندتا از کنترل ها از این پروتکل استفاده می کنند( فقط فیلیپس رو می دونم) پس زیاد بکار نمیاد.وقتی بدرد میخوره که فرستنده هم بخوام بسازم .اون موقع بهترین گزینه همینه.
تو روش سخت تر اینه که از تایمر و وقفه استفاده کنی. برای این مورد هم یه برنامه بدست اومده که تا حدودی کار میکنه ولی با مشکل کدش این طوره که :
کد:
$regfile = "M32def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Db4 = Pinb.1 , Db5 = Pinb.2 , Db6 = Pinb.3 , _
 Db7 = Pinb.4 , Rs = Pinb.5 , E = Pinb.6
Config Lcd = 16 * 2
Cursor Off

Config Timer0 = Timer , Prescale = 256
Stop Timer0

Config Pind.3 = Input
Set Portd.3
Pin_ir Alias Pind.3

'Config Int1 = Falling
On Int1 Isr_int1

Dim Data_ir As Word
Dim Cnt_ir As Byte
Dim Flag_ir_start As Bit
Dim Flag_ir_ok As Bit
Dim Hex_data_ir As String * 10

Cls
Lcd "SONY REM DECODER"

Enable Interrupts
Enable Int1

'********************************************************
Do
  If Flag_ir_ok = 1 Then
    Reset Flag_ir_ok
    Disable Int1

    Locate 2 , 1
    Hex_data_ir = Hex(data_ir)
    Lcd "DATA : " ; Hex_data_ir ; " Hex "
    Reset Flag_ir_ok

    Enable Int1
  End If
  'Wait 1
Loop

End
'******************************************************

'isr for infrared sensor
Isr_int1:
 Timer0 = 0
 Start Timer0
 Bitwait Pin_ir , Set
 Stop Timer0

 If Cnt_ir = 0 Then
   If Timer0 > 70 And Timer0 < 85 Then
     Set Flag_ir_start
     Incr Cnt_ir
   End If
 End If

 If Flag_ir_start = 1 And Cnt_ir > 0 Then
   Decr Cnt_ir
   If Timer0 < 35 Then
     Data_ir.cnt_ir = 0
   Else
     Data_ir.cnt_ir = 1
   End If

   Cnt_ir = Cnt_ir + 2

   If Cnt_ir > 11 Then
     Shift Data_ir , Right , 1
     Reset Flag_ir_start
     Set Flag_ir_ok
     Cnt_ir = 0
   End If
 End If

Return
که هیچ عکس العملی نشون نمیده . نکته اینه که وقتی پایه تغذیه گیرنده رو قطع و وصل می کنم عددهای تو همی نشون میده.
متشکر میشم اگر اساتید راهنمایی کنند و اگر پروژه ای شبیه این دیدن یا دارن به ما هم بگن.
ترجیحا کدها تو بسکام باشه و از atmega32 استفاده بشه.
 

mehdi289

کاربر
2014-03-25
12
55
یعنی هیچ کس چیزی در این مورد نمیدونه؟
 
  • Like
واکنش‌ها[ی پسندها]: abady
بالا