《《《《《正文》》》》》
《無(wú)線模塊選擇》
說(shuō)明:
一、上圖這種常規(guī)的 433Mhz 無(wú)線模塊,發(fā)射端一般用 PT2262/EV1527/PT2240/HCS301編碼。如果選擇 PT2262,接收端則直接搭配 2272,匹配好振蕩電阻和烙好 A0-A7 腳就可以直接使用了。
二、如果發(fā)射用 EV1527、PT2240、HCS301 等芯片,這些需要自已編寫(xiě)解碼程序,單片機(jī)解碼,要不斷地處理 100us-20ms 脈沖識(shí)別,還要做別的任務(wù),比如按鍵 LED 數(shù)碼掃描等。
三、如果單片機(jī)的任務(wù)單一,可以用在 main 中循環(huán)查詢端口的方式來(lái)不斷地判斷脈沖寬度,一般工程師都是用這種方式入手的,這種方式僅限 EMC153 這類低檔 MCU,如果是 51或 ST 不推薦,原因是單片機(jī)還是有其它任務(wù),這些耗時(shí)較長(zhǎng),會(huì)直接造成無(wú)線接收的丟碼,這種解碼方式僅限入門(mén)用。
四、推薦解碼方法是一個(gè)中斷引腳加一個(gè)定時(shí)器,在中斷里完成這部分的無(wú)線解碼;雖然模塊在靜態(tài)時(shí),有 30us—1000us 不等雜波,占用 MCU 太多的時(shí)間,這完全可以忽視;寫(xiě)好中斷代碼就好了,中斷以外的時(shí)間處理其它任務(wù)完全沒(méi)有問(wèn)題。比如串口收發(fā),SPI通訊等。處理串口中斷,和其它定時(shí)中斷也基本不影響,如果串口波特率較高,實(shí)測(cè)有誤碼時(shí),可以將串口中斷的優(yōu)先級(jí)別高于無(wú)線接收。
《具體解碼方法》
一般選擇單片機(jī)具有上升沿/下降沿,雙邊沿中斷的引腳來(lái)直接連接無(wú)線接收模塊(老式 51 單片機(jī)僅有下降沿方式,后面講此改進(jìn)方法),注意不要灌電給接收模塊,就是單片機(jī) 5V,模塊選 3V 的,這樣會(huì)改變接收模塊的電壓,應(yīng)作處理,一般此腳設(shè)為上拉輸入,但更建議將引腳設(shè)為高阻輸入,這樣減小接收模塊的負(fù)載,有利其減小電壓紋波。
如何解碼?我們選觀察下以下編碼圖,以 1527 編碼為例說(shuō)明:
上面圖中間部分是一幀完整的數(shù)據(jù),最有特征的就是最寬的部分,俗稱同步脈沖,兩個(gè)同步脈沖間的小脈沖是我們要解的編碼。兩個(gè)同步頭間的高電平是 25bit,其中最后 1bit 是下一同步頭的。我們只解其中的 24bit 即可。
HCS301 的編碼只需接收一次就行了,它一包 64bit 位中自帶校驗(yàn)碼,不需要我們這種重復(fù)兩次的方法來(lái)校驗(yàn)。Chkbuf 中的數(shù)據(jù)最好也加個(gè)時(shí)間限制,超時(shí)后,校驗(yàn)位為清 0,下次最收到碼時(shí),又成為了第一包數(shù)據(jù)了。數(shù)據(jù)收到后,交由主程序中查詢?nèi)ヌ幚?,有可能還要有 E2 中的數(shù)據(jù)再次比較,證明是否有無(wú)對(duì)碼等的操作。
請(qǐng)參見(jiàn)下面的流程圖:
《EV1527 編碼芯片之無(wú)線解碼原理說(shuō)明》
EV1527 是一片由 CMOS 設(shè)計(jì)制造的可預(yù)燒內(nèi)碼的學(xué)習(xí)碼編碼 IC,由軟件解碼,每次發(fā)4 幀,每幀 24 位加一個(gè)同步碼。此 24 位中,前 20 位為芯片內(nèi)碼(即 ID,共有 2 的 20 次方,即 1048576 組組合,大大降低使用上編碼重復(fù)的幾率),后 4 位是按鍵值(即數(shù)據(jù))。
其編碼圖形如下所示:
extern unsigned char timer_4_count;
extern unsigned char timer_4_countover;
unsigned char in_bit = 0;
unsigned char rx_start = 0;
unsigned char rx_data_ok = 0;
unsigned char recvbit[4];
unsigned char recvbitcount = 0;
unsigned char recvbyte[40];
unsigned char recvbytecount = 0;
unsigned char Recv_data[5];
unsigned char in_bit_n = 0;
///////////////////接收函數(shù)///////////////////////
void Recieve()
{
//一進(jìn)來(lái)就先把引腳的狀態(tài)讀取了,然后判斷跟前面的是否一樣,不一樣的時(shí)候才進(jìn)行后
續(xù)運(yùn)算
in_bit_n = inport; //inport 是 ASK 模塊的數(shù)據(jù)腳
if(in_bit == in_bit_n)
{
return;
}
in_bit = in_bit_n;
//P3_7 = in_bit; //把值丟給 LED 口
if(timer_4_countover)
{//超時(shí)錯(cuò)誤
RecieveError();
return;
}
// 接收 4 次電平變化,才能確定 1 bit
if((timer_4_count > min_time_l)&&(timer_4_count < max_time_l))
{//窄脈沖,4~14,就是 200us~700us
if(in_bit) //高電平,現(xiàn)在為高電平,其實(shí)之前是低電平的
{
recvbit[recvbitcount] = 0x00; //低短
}
else//低電平
{
recvbit[recvbitcount] = 0x01; //高短
}
}
else if((timer_4_count > min_time_h)&&(timer_4_count < max_time_h))
{//寬脈沖,16~60,就是 800us~3000us
if(in_bit)
{
recvbit[recvbitcount] = 0x02; //低長(zhǎng)
}
else
{
recvbit[recvbitcount] = 0x03; //高長(zhǎng)
}
}
else
{//出錯(cuò)
RecieveError();
return;
}
timer_4_count = 0;
timer_4_countover = 0;
// 1527
recvbitcount++;
if(recvbitcount < 2)
{
return;
}
else
{
//這里判斷的電平,應(yīng)該是跟實(shí)際的相反的,因?yàn)橹挥须娖阶兓?,才?huì)做相應(yīng)處理,
不變化的話是直接退出的。
if((recvbit[0] == 1)&&(recvbit[1] == 2)) //高短低長(zhǎng)
{
recvbyte[recvbytecount] = 0;
}
else if((recvbit[0] == 3)&&(recvbit[1] == 0)) //高長(zhǎng)低短
{
recvbyte[recvbytecount] = 1;
}
else
{
RecieveError();
return;
}
}
recvbytecount++; //接收到的字節(jié)數(shù)加 1。
recvbitcount = 0; //
if(recvbytecount < RECV_BIT_NUMBER)
{// 未接收完
return;
}
recvbytecount = 0;
timer_4_count = 0;
rx_data_ok = 1;
}
50us 定時(shí)器中斷函數(shù):
unsigned long Timer4Count = 0;
unsigned char timer_4_count = 0;
unsigned char timer_4_countover = 0;
{
static unsigned char tt4=0;
//PA_ODR_ODR2=~PA_ODR_ODR2;
tt4++;
if(tt4>=20)
{//1ms
tt4=0;
Timer4Count++;
//PA_ODR_ODR3=~PA_ODR_ODR3;
}
timer_4_count++;
if(timer_4_count == 0)
timer_4_countover++;
TIM4_SR_UIF=0;
}
程序功能:使用前需要對(duì)碼,即按一下按鍵后松開(kāi),4 個(gè) LED 全亮后熄滅只留 LED2,LED3 常亮,5s 鐘內(nèi)按下遙控器,可以發(fā)現(xiàn) LED 分兩組閃爍三次后熄滅即可完成對(duì)碼。 以后該遙控器就可以工作。接收端收到無(wú)線信號(hào)后,先輸出串口,然后判斷 ID,ok 后點(diǎn)亮對(duì)應(yīng)的 LED,100ms 后熄滅。若想解其他最小脈寬的編碼,只需修改程序中的如下四個(gè)變量即可:
注:所謂“最小脈寬”即 EV1527 的編碼中四倍時(shí)鐘,如下圖所示:
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6050文章
44702瀏覽量
641299 -
無(wú)線模塊
+關(guān)注
關(guān)注
12文章
630瀏覽量
48805 -
eV1527
+關(guān)注
關(guān)注
2文章
9瀏覽量
25773
原文標(biāo)題:10分鐘掌握EV1527無(wú)線模塊編解碼
文章出處:【微信號(hào):airX嵌入式,微信公眾號(hào):airX嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
無(wú)線編碼IC EV1527怎么預(yù)燒內(nèi)碼?
想找一個(gè)芯片方案,無(wú)線發(fā)碼專用集成電路,類似于EV1527,但要求是免調(diào)試的。希望知道的推薦下。
請(qǐng)問(wèn)單片機(jī)解碼433MHZ EV1527學(xué)習(xí)型編碼ic 學(xué)習(xí)功能如何用程序?qū)崿F(xiàn)?
基于STM32和hs1527、ev1527、rt1527、fp1527的無(wú)線接收解碼程序
基于STM32和hs1527、ev1527、rt1527、fp1527的無(wú)線接收解碼程序
SYN480R模塊解碼EV1527該怎樣去使用呢
EV1527射頻模塊調(diào)試過(guò)程分享
eV1527學(xué)習(xí)碼編碼IC

評(píng)論