ATtiny13, 實驗五個按鍵的特製紅外線遙控器


https://wp.me/ph3BR-2aJ

 

沒有最好, 只有更好

第一次做好PLC紅外線遙控器, 八個按鍵的, 可用了, 發現它比較耗電, 使用上要先打開遙控器的電源, 然後再用遙控按鍵, 優點, 抄來改一下就可用, 缺點, ARDUINO UNO 體積大也雖然會自動延時一陣子斷電, 但總體還是耗電, 那是IR REMOTE CONTROL 初版.

後來學習了 AVR MCU 的睡眠模式設定, 實驗過後, 確認 MCU 睡死以後待機電流 0.6uA. 打個比方, 若一個 AAA 電池大約有 150 mAh 的電量, 如果按照 0.6uA = 0.0006mA 耗電流計算, 睡著了不再叫醒它上班, 等28年後還有電力. 待機時間計算方法大概是這樣, 150 mAh / 0.0006mA = 250000 h (小時) = 10416 天 = 28.5 年. (不過電池會漏水爆漿, 這裡不表了)

LeTV 電視, 經過賈躍亭惡搞後, 樂視網跟樂視電視機已呈絕唱, 那個鳥電視每次啟動都依然給你看喊口號廣告然後努力加載, 僅此而已, 啥B都沒得看, 鳥公司在倒閉以前也不把 FIRMWARE 更新去掉那沒鳥用的 “努力加載", 努力是沒用的.

Onkyo AV 擴大機

MTV7000D 電視盒

上述三個機器, 常用的幾個遙控按鍵的訊號格式, 源碼如下, 應該夠不言自明 (老外說的 self-explanatory), 白話說法, 你懂的….

IR_command.h


/*
* xiaolaba, 2016-JAN-12
* IR signal raw code captured, by uses original IR remote control,
* raw code only, MSB first,
* original signal, NEC IR format, leader code 9ms, 16 units, unit time 9/16 = 526.5us,
* 16 bit address + 8 bit command + 8 bit /command, total 32 bit
* REF : https://www.sbprojects.net/knowledge/ir/nec.php
* LeTV, model X50 air, remote control model, N/A
* Onkyo AV reciver, model TX-NR609, remote control model RC-803M
* Magic TV, model MTV7000D, DTMB TV receiver, remote control model N/A
*/

#pragma once

#define MagicTV_CH+_button 0x1B546897
#define MagicTV_CH-_button 0x1B54E817

#define LeTV_Power_button 0x32A650AF
#define LeTV_SOURCE_button 0x32A630CF
#define LeTV_VOL_UP_button 0x32A6A857
#define LeTV_VOL_DOWN_button 0x32A638C7

#define LeTV_UP 0x32A6D02F
#define LeTV_DOWN_button 0x32A6708F
#define LeTV_OK_button 0x32A6B04F

#define Onkyo_VOL_UP_button 0x4BB640BF
#define Onkyo_VOL_DOWN_button 0x4BB6C03F
#define Onkyo_Apple_TV_button 0x4BB6B04F // Onkyo Game button
#define Onkyo_MagicTV_button 0x4B3631CE // Onkyo BD/DVD button

 

這些訊號的數據是以前抓的, 按照第一篇的方式就有了.

有了源碼, 有了可用的遙控器的經驗, 有了 MCU 省電的實驗結果, 移植一下應該不會難, 差不多兩年後, 放假就玩一玩. 不過, ARDUINO UNO 有 “無限大容量", 但是 ATtiny13, 比對只有個小腦袋, 不大 1K 對 32K 的容量, 裝不下原來的原碼, 需要瘦身才可. 瘦身計畫也很成功, 例如,

不要 SERIAL OUTPUT

刪除字串

差不多把原碼精簡剩下2K, 但是還是離開 1K 超過了 100%

再來刪除 LOOP, PIN MODE, digitwrite 等等, 畢竟 ARDUINO IDE 是不計成本產出臃腫源碼的, 目的是方便普通玩家, 要深入要更上層樓, 只能用 C, 關鍵時刻, 可能還需要動到 AVR INLINE ASSEMBLER, 後話, 純粹為了玩一下.

遇到的問題, 電池電壓下降 RC OSC 會變慢, LeTV 容錯能力很好, 37KHZ 照樣遙控無誤, 反觀Onkyo / MTV7000D, 對時間碼的要求很嚴格, 9ms/16 偏移 2% 就沒反應了. 所以實驗了一個 10MHz 的 XTAL 震盪器, 如下圖, C1 改用220PF, C2 改用 30PF, 隨便試用得到得結果, 沒想到很容易做成也很好用了, C3 不要, Vc 那點接 ATtiny13 CLKI.

10MHz 震盪器搭起棚架實驗筆記

neo_10MHz Pierce oscillator uses a single NPN transistor – xiaolaba

 

第二個問題, CPU 頻率設定等於 XTAL 頻率, 不除以 8 (CDIV8=1), CPU 速度高了, 計時精度不變, 但是解析度高了, 9ms / 16 還是一樣誤差, 用 #define factor ( ( ( (F_CPU/1000) *9 ) /16 ) /4 ), 編譯結果時序差很多, 理論上, F_CPU = 10000000, 單一CPU指令耗時 0.1uS, 9mS/16, 每份額佔據 562.5uS, 需要 562.5 / 0.1 = 5625 CPU 週期, 延時計數要 5625 / 4 = 1046次…….還是有些沒有考慮到的誤差或錯誤編碼存在, 只能手動微調延時, 延時計數設定成1435, offset 37%, 最後順利遙控了三個機器, 只用一個 ATtiny13….8個腳, Vcc / GND / CLKI / RESET 去掉4個, 只剩4個, 做不出來5個鍵的遙控器…..?!

Tiny13 IR Remote control 搭起棚架實驗筆記

neo_Tiny13_38KHZ_schematic_PCB_xiaolaba

 

……還沒完….

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.