سلام خدمت همه دوستان
چند وقته که مشغول ساخت پروژه ای شدم که تو قسمتی از پروژه گیر کردم.
بطور خیلی ساده پروژه از این قراره که می خوام با یه کنترل تلویزیون به یک میکرو AVR فرمان بدم و میکرو هم با توجه به کلید فشرده شده رله ای خواص رو راه اندازی کنه...
کار های که تا حالا انجام شده به این قراره که:
کد ارسالی از سمت کنترل شامل دو قسمت مهمه بنام address و command . آدرس مشخص کننده نوع دستگاه رو مشخص میکنه مثلا تلویزیونه یا ضبطه یا پلیر و قسمت دوم دستوره که کد هر کلید رو مشخص میکنه وقتی این دوتا مشخص بشه با چندا دستور IF یا case به راحتی قسمت دوم کار انجام میشه ... مشکل تو آشکار کردن همین دوتاست
تو راحت ترین روش از پروتکل RC5 استفاده می شه که خیلی شیک با دستور( getrc5(address,command میشه این دوتا رو مشخص کرد. ولی متاسفانه فقط چندتا از کنترل ها از این پروتکل استفاده می کنند( فقط فیلیپس رو می دونم) پس زیاد بکار نمیاد.وقتی بدرد میخوره که فرستنده هم بخوام بسازم .اون موقع بهترین گزینه همینه.
تو روش سخت تر اینه که از تایمر و وقفه استفاده کنی. برای این مورد هم یه برنامه بدست اومده که تا حدودی کار میکنه ولی با مشکل کدش این طوره که :
که هیچ عکس العملی نشون نمیده . نکته اینه که وقتی پایه تغذیه گیرنده رو قطع و وصل می کنم عددهای تو همی نشون میده.
متشکر میشم اگر اساتید راهنمایی کنند و اگر پروژه ای شبیه این دیدن یا دارن به ما هم بگن.
ترجیحا کدها تو بسکام باشه و از atmega32 استفاده بشه.
چند وقته که مشغول ساخت پروژه ای شدم که تو قسمتی از پروژه گیر کردم.
بطور خیلی ساده پروژه از این قراره که می خوام با یه کنترل تلویزیون به یک میکرو 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 استفاده بشه.