ايران ويج

نسخه‌ی کامل: كدهاي ريموت كنترل سيستمهاي صوتي و تصويري براي AVR
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6
سلام..منظورم از 20 میلی ثانه مدت نمونه برداریه...مثلا وقتی دکمه vol روی ریموت فشرده میشه ریموت هر 20 میلی ثانیه کدهای مربوط به vol رو میفرسته...خوب اگه ما با میکرو به مدت 60 میلی ثانیه از این کد نمونه برداری کنیم و در جایی ذخیره کنیم نمیشه؟بعدش مثلا دکمه ch رو فشار دهیم و باز هم میکرو 60 میلی ثانیه از ارسالی ریموت نمونه برداره و در جایی ذخیره کنه!هر دکمه از ریموت هم یه دیتای خاصی رو ارسال میکنه که با هم فرق دارن!پس میکرو با نمونه برداری 60 میلی ثانیه ای دیتای هر دکمه رو یه جایی ذخیره کنه بدون در نظر گرفتن فرکانس کریر.چون خروجی سنسور بدون کریر هست.حالا میتونیم با فراخوانی کدهای نمونه گرفته شده و ذخیره شده اونهارو بفرستیم تو خروجی میکرو یا ....!
من برنامه خاصی فعلا براش نتونستم بنویسم و این یه ایده بود که گفتم بگم تا همگی بهش فکر کنیم.
موفق باشید! :)
آقای غفاری هم درست می فرمایند.

من همین کاری رو که توضیح دادید کاملاً برنامش رو نوشتم و تو پست های قبلی گذاشتم.
اما روش من اینطوری بود که : به زمان نمونه برداری کاری نداشت و به تعداد پالسهای دریافتی متکی بود
چون من چندین ریموت رو آزمایش کردم و دیدم که با فشردن یک لحضه ی کوتاه از هر کلید و ریموتی حداقل کد اون کلید 2 مرتبه تکرار میشه و تعداد پالس های 0و1 اون هم بیشتر از 200 تا نمیشه ، خوب منم برای میکرو تعریف کردم که بیشتر از 900 تا پالس رو در حافظه ذخیره نکند .

موفق باشید .
خوب من همون برنامه ای که کد های ریموت سونی رو می خوند و در پستهای قبلی لینک کامل فایل اونو گذاشتم حالا روی برد بستم تا کار عملیش رو کاملاً بررسی کنم و 2 تا نکته (مشکل) عجیب ازش دیدم :
1- کدی ارسالی از ریموت های سونی رو می خونه اما چه خوندنی ! این کدی که میکروی من بدست میاره با کد اصلی کلید فشرده شده کاملاً فرق داره ! (روشم در بدست آوردن کد درسته و با کمی تغییر می تونم از ریموت های دیگه هم کد دریافت کنم). من با فرکانس 8 مگاهرتز و Prescal=256 و با Timer0 کار می کنم . برنامه اونو در زیر قرار دادم .
2- با تعویض چشم گیرنده 3 پایه بازم کدها ثابت هستند (من با چشمهایی به شماره 1238 و 1560 کار میکنم مگه نه فرکانس این دو 38KHz , 60KHz است ! از طرفی سیگنال کریر هم 40KHz است، پس چرا هر دو چشم به راحتی کد ثابتی رو دریافت می کنند ؟)


$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
سلام استاد etrmodern
آقا این برنامه بالایی کاملا ok هست.من با ریموت تلویزیون سونی تست کردم همه چیز درسته.شما میگید کد کاملا فرق میکنه...خوب همه دکمه ها رو جدا گانه میفهمه و یه کد هگز میده...تو تبدیلشه که کد ریموت رو میگیره با چه روشی به هگز تبدیل میکنه...اگه این قسمت اصلاح بشه همون کد واقعی دکمه رو میده که فکر کنم باید روش سعی و خطا رو امتحان کنی!
حال کردم با این برنامت.حرف نداشت!فقط یه سوال : چرا از mega32 استفاده کردید؟
با mega8 نمیشه؟آیا mega8 محدودیتی داره که نمیشه ازش استفاده کرد؟
مرسی!
آقای غفاری من هنوز به درجه استادی نرسیدم ، ضمناً دوست دارم همیشه شاگرد باشم ! (هر شاگردی روزی از استادش جلو میزنه) 8)

درسته ، این برنامه کاملاً کد هگزها رو از هم تفکیک میکنه برای کنترل دستگاهها میشه ازش استفاده کرد .

من برای تبدیل کد آن به هگز از دستور varST=hex(var) استفاده کردم ، مطمئناً مشکل از این دستور نیست ، فکر نمیکنم مشکل از تبدیل باشه و در همون لحظه ی تولید کد مشکل وجود دارد ، فعلاً که دارم باهاش دست و پنجه نرم میکنم. :evil:
مثلاً وقتی کد 1D1 رو ارسال می کنم ، میکرو کد B8 رو بازخونی می کنه (همچنین AD1=>B5) ، حتی نتونستم یه رابطه ای بین کد ارسال و دریافت پیدا کنم .! :?: :!: :idea: :cry:

دلیل خاصی برای استفاده از Mega32 نیست و میشه از Mega8 هم استفاده کرد .
سلام
من کد بالا رو چک کردم درست کار می کرد .
مثلا کد پاور - ولوم - کانال و قطع صدا طیق جدول سونی باز گردونده شد
از آقای ETR و تمام دوستان بابت این پست نهایت تشکر را داریم من مدار آماده به تست این مدار رو بستم اگه مشکلی داشتید بپرسید
کدهایی رو که روی lcd برام چاپ میکرد توی یک حرف هگز تفاوت داشت مثلاً من با ریموت آمپلی فایر سونی (RM-SS300) از کلید Vol+ مقدار 0012 هگز رو نمایش می داد این در حالی بود که جدولی که من از کدهای سونی داشتم Vol+=0812 است. اینم لینک جدول کدها : :o
http://etrmodern.persiangig.ir/document/Sony.HTML

من از کدهای ساده شروع کردم به فرستادن و با جمع و تفریق بلاخره فهمیدم که اگه 2048 تا به کد بدست آمده اضافه کنم کد اصلی حاصل می شود.
آنگاه مثلاً کد vol+ در ریموت آمپلی فایر سونی برابر با 812 هگز می شود .

:arrow: حالا بعد از کلی تحقیق متوجه شدم که من فقط کد دستور رو lcd میدیدم اون 8 قبل از 12 در واقع کد آدرس دستگاه بوده : :oops: Amaze
http://www.sbprojects.com/knowledge/ir/sirc.htm

اینم قسمتی از برنامه که تغییر دادم :
Do
If Flag_ir_ok = 1 Then
Reset Flag_ir_ok
Disable Int1

Data_ir = Data_ir + 2048
Hex_data_ir = Hex(data_ir)
Locate 2 , 1
Lcd "DATA : " ; Hex_data_ir ; " Hex "
Data_ir = 0

Enable Int1
End If
Loop


و در مرحله بعدی می خوام یک مدار دیگه درست کنم و با اون یه کد به روش سونی ارسال کنم به این مدار ، ببینم آیا همون کد ، صحیح به مقصد میرسه یا نه ؟! :idea:
اینم 3 تا از بهترین بهترین لینک های مادون قرمز که تا الان یافتم :

یه لینک توپ و با حال که به هرجا و هر چیز در رابطه با مادون قرمز بخوای لینکت می کنه :
http://www.educypedia.be/electronics/televisionrc5.htm


دو لینک آخرهم که از مبتدی تا پیشرفته راجع به مادون قرمز گفته :
http://www.sbprojects.com/knowledge/ir/ir.htm
http://www.ustr.net/infrared/index.shtml
http://www.ustr.net
سلام آقای ETR
توجه داشته باشید که دو دستور sonysend و rc5 را میکرو داره و دوباره نویسی نشه
آره آقای Newdesign صحیح می فرمایند بیسکام دستور آماده برای سونی و RC5 داره اما من هدفم اینه که خودمان روش ساخت رو یاد بگیریم که در آینده بتونیم برای اهداف دیگری هم از آن بهره ببریم . :wink:
خوب اینم برنامه ی ساخت و ارسال کد سونی که بلاخره ازش جواب گرفتم . و با کمی تغییر می تونیم اونو برای دیگر ریموت ها پیکربندی کنیم.
برنامه رو از این لینک دانلود کنید : :arrow:
http://etrmodern.persiangig.ir/document/...IR%202.bas

اما یه مشکل کوچیک داره که اونم اگه کمکم کنید، سریع رفعش میکنیم ، مشکل اینجاست که کد هایی مثل 5D1 رو صحیح ارسال نمیکنه اما 812 و 815 و ... رو بطور کاملاً صحیح ارسال میکنه، اینطور به نظر میرسه که با کدهای بزرگ یکم مشکل داره ، شما هم تست کنید ببیند همین مشکل رو داره ؟!

جالب اینکه من دستور sonysend v رو دیده بودم اما یک مرتبه هم ننوشتمش که حداقل کارش رو ببینم ! لازم شد برم برنامش رو بنویسم ... :roll:
DeviceAddress : Command Description

01:15 Power
سلام
شما کد بالا رو چند می خونی؟
اگه 95 هگز می خونی درسته
طریقه محاسبه
Command Description:15 در مبنای هگز است در مبنای 10 می شود 21
DeviceAddress:1 محل آن واقع در بیت 6 (هفتمین بیت است)پس ازش آن 2 یه توان 7 یعنی 128 می باشد
128+21=149 که در مبنای هگز برابر 95 است
صفحه‌ها: 1 2 3 4 5 6