這一次還是接在 cemera 上。用 中斷引腳 eint20 也就是 gpg12.
之前焊的 51 板子上有乙個紅外置收器。
請注意了,是
標準的 nec 碼規範:
首次傳送的是9ms的高電平脈衝,其後是4.5ms的低電平,接下來就是8bit的位址碼(從低有效位開始發),
而後是8bit的位址碼的反碼(主要是用於校驗是否出錯)。然後是8bit 的命令碼(也是從低有效位開始發),
而後也是8bit 的命令碼的反碼。其「0」為載波發射0.56ms,不發射0.565ms,其「1」為載波發射0.56ms,
不發射1.69ms。
這是一種不太好的實現方式,以後會更新其它更好的演算法。
原理比較簡單,當有中斷發生中,將gpg12設為輸入功能,通過讀引腳的電平,配合時間,就能得到 紅外遙控器發出的**。
**共4個,廠家id 高, 廠家id 低, 命令 , 命令反碼
經過試驗,發現,命令只有低6個bit 是正常的,
驅動原始碼
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include string.h>8 #include 9 #include 10
11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19
20 #include 21 #include 22 #include 23 #include 24
25 #include 26 #include 27 #include 28 #include 29 #include 30
31/*
32標準的 nec 碼規範:
33首次傳送的是9ms的高電平脈衝,其後是4.5ms的低電平,接下來就是8bit的位址碼(從低有效位開始發),
34而後是8bit的位址碼的反碼(主要是用於校驗是否出錯)。然後是8bit 的命令碼(也是從低有效位開始發),
35而後也是8bit 的命令碼的反碼。其「0」為載波發射0.56ms,不發射0.565ms,其「1」為載波發射0.56ms,
36不發射1.69ms。
37*/
3839
#define ir gpio_get_value(s3c2410_gpg(12))
4041
static irqreturn_t irm_irq(int irq, void *dev_id)42;
4546
/*操作原理 當有中斷發生中 配置引腳功能為 gpio 輸入型 直接讀irm訊號電平高低
*/47 s3c_gpio_cfgpin(s3c2410_gpg(12
), s3c2410_gpio_input);
48 mdelay(5); //
9ms 內必須是低電平否則就不是頭資訊
49if(0 ==ir)
5068}69
70//
計算反碼 code碼是否正確
71if((irm_code[2]&0x3f) == (~(irm_code[3]) & 0x3f
))7275}
76}77 s3c_gpio_cfgpin(s3c2410_gpg(12
), s3c2410_gpio_irq);
78return
irq_handled;79}
8081
static
int irm_init(void)82
8889
static
void irm_exit(void)90
9394
module_init(irm_init);
95module_exit(irm_exit);
96 module_license("
gpl");
紅外遙控器解碼原理
紅外遙控器解碼原理 august 7th,2015 1 紅外遙控系統 通用紅外遙控系統由發射和接收兩大部分組成,應用編 解碼專用積體電路晶元來進行控制操作,如圖1所示。發射部分包括鍵盤矩陣 編碼調製 led紅外傳送器 接收部分包括光 電轉換放大器 解調 解碼電路。2 遙控發射器及其編碼 遙控發射器專...
STM32 NEC紅外遙控器解碼
現有的紅外遙控包括兩種方式 pwm 脈衝寬度調製 和ppm 脈衝位置調製 兩種形式編碼的代表分別為nec 和philips 的rc 5 rc 6 以及將來的rc 7。nec 格式的特徵 1 使用38 khz 載波頻率 2 引導碼間隔是9 ms 4.5 ms 3 使用16 位客戶 4 使用8 位資料 ...
自製紅外空調遙控器
自製空調紅外遙控器 一開始網上看了很所紅外的協議nec,rc 5,rc 6,sirc。太多了,據說國內用的最多的是nec的協議。看看實際的波形圖吧 這是家裡格力空調遙控器的開機波形。先講一下紅外置收頭,市面上的有很多種,但總結下就是沒訊號高電平,有型號低電平,還有就是需要38khz的載波對應。傳送頭...