实验目的:
学习无线数字收/发模块的使用方法。 实验要求:
掌握无线数字收/发模块典型接口电路设计方法。 掌握无线数字收/发模块编程控制方法。 实验原理:
无线数字接收模块PT2272的接收中断控制。 芯片简介:
PT2262/PT2272是台湾普城公司生产的一种CMOS工艺制造的低功耗低价位通用编解码电路,其最多可有12位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441地址码,PT2262最多可有6位(D0-D5)数据端管脚,设定的地址码和数据码从17脚串行输出,可用于无线遥控发射电路。
编码芯片PT2262发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片PT2272接收到信号后,其地址码经过两次比较核对后,VT脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。当发射机没有按键按下时,PT2262不接通电源,其17脚为低电平,所以315MHz的高频发射电路不工作,当有按键按下时,PT2262得电工作,其第17脚输出经调制的串行数据信号,当17脚为高电平期间315MHz的高频发射电路起振并发射等幅高频信号,当17脚为低平期间315MHz的高频发射电路停止振荡。
PT2262/PT2272特点: 1.CMOS工艺制造,低功耗 2.外部元器件少 3.RC振荡电阻
4.工作电压范围宽:2.6-15v 5.数据最多可达6位
6.地址码最多可达531441种 PT2262/PT2272应用范围:
1.车辆防盗系统 2.家庭防盗系统 3.遥控玩具
4.其他电器遥控 PT2262引脚图:
PT2262管脚说明 :
PT2272引脚图:
PT2272管脚说明 :
接收模块芯片选型 :
PT2272解码芯片有不同的后缀,表示不同的功能,有L4/M4/L6/M6之分,其中L表示锁存输出,数据只要成功接收就能一直保持对应的电平状态,直到下次遥控数据发生变化时改变。M表示非锁存输出,数据脚输出的电平是瞬时的而且和发射端是否发射相对应,可以用于类似点动的控制。后缀的6和4表示有几路并行的控制通道,当采用4路并行数据时(PT2272-M4),对应的地址编码应该是8位,如果采用6路的并行数据时(PT2272-M6),对应的地址编码应该是6位。
在通常使用中,我们一般采用8位地址码和4位数据码,这时编码电路PT2262和解码PT2272的第1~8脚为地址设定脚,有三种状态可供选择:悬空、接正电源、接地三种状态,3的8次方为6561,所以地址编码不重复度为6561组,只有发射端PT2262和接收端PT2272的地址编码完全相同,才能配对使用,遥控模块的生产厂家为了便于生产管理,出厂时遥控模块的PT2262和PT2272的八位地址编码端全部悬空,这样用户可以很方便选择各种编码状态,用户如果想改变地址编码,只要将PT2262和PT2272的1~8脚设置相同即可。
实验内容:
(一)摇控器电路原理图(发送模块)
图9.1
(二)主控器接收与显示控制(接收模块)
图9.2 显示电路
图9.3 接收电路(接收模块输出)
图9.4 接收电路(RB口电平变化中断输入)
图9.5 主控器电路原理图
(三)程序参考PIC单片机“INT中断”和“RB口电平变化中断”编写 1.“INT中断” 1)电路原理图
图9.6 “INT中断”仿真电路
2)参考程序
#include __CONFIG(XT & LVPDIS & WDTDIS); #define bitset(var,bitno)(var |=1< 0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C, 0x39,0x5E,0x79,0x71}; and a~f int i=1; void interrupt rb0int(void) { if(i<16) { PORTC=table[i++]; } else { i=0; PORTC=table[i++]; } INTF=0; //0~9 } main() { TRISC=0x00; bitset(TRISB,0); PORTC=0x3F; INTEDG=1; //INTEDG=0 下降沿;1 上升沿; GIE=1; INTE=1; INTF=0; while(1); } 2.“RB口电平变化中断” 1)电路原理图 图9.7 “RB口电平变化中断”仿真电路 2)参考程序 #include __CONFIG(XT & LVPDIS & WDTDIS); #define bitset(var,bitno)(var |=1< while(num--) //do nothing { } } void interrupt rb0int(void)//只要有中断发生就一定有按键按下 { pause(5000); //为了消除按键抖动,可加入适当延时 if((RB7==0)||(RB6==0)||(RB5==0)||(RB4==0)) //因为按下与松开时都产生了电平变化,因此若不加此语句就会产生两次中断(按下与松开) //并且每次运行都会产生一次错误中断 //若加上此语句,下面的PORTB=PORTB语句可省去 { unsigned char tmp; tmp=PORTB&0xF0; switch(tmp) { case 0xE0: PORTC=0x3F;break; case 0xD0: PORTC=0x06;break; case 0xB0: PORTC=0x5B;break; case 0x70: PORTC=0x4F;break; default: PORTC=0x40; } RD0?bitclr(PORTD,0):bitset(PORTD,0);//RD0=!RD0; i--; } PORTB=PORTB; //若不加此语句与上面if语句,会不停引发中断; //若添加此语句,但不添加上面if语句,会引一次错误中断, //且每按一次按键会引发两次中断(按下与松开)) RBIF=0; //若不清标志位,即RBIF=1,那么当按键松开时(有电平变化) //可能再次引发中断(可能引发多次错误中断) } main() { TRISB=0xF0; TRISC=0x00; bitclr(TRISD,0); bitset(PORTD,0); //使小灯亮 RBPU=0; GIE=1; PORTB=0x00; RBIE=1; RBIF=1; while(1); } (四)程序参考(无线数字收/发) #include __CONFIG(XT & LVPDIS & WDTDIS & BORDIS); #define bitset(var,bitno)(var |=1< void send(unsigned char data); void pause(int num); void clk(); void spk(); unsigned char off_var=4,flg=0; void pause(int num) { while(num--) //do nothing { } } void clk() //available L to H { CLK=0; NOP(); NOP(); CLK=1; NOP(); NOP(); } void clr() //available { CLR=0; NOP(); NOP(); CLR=1; } void send(unsigned char data) { testbit(data, 7)?SDIN=1:SDIN=0; clk(); testbit(data, 6)?SDIN=1:SDIN=0; clk(); testbit(data, 5)?SDIN=1:SDIN=0; clk(); testbit(data, 4)?SDIN=1:SDIN=0; clk(); testbit(data, 3)?SDIN=1:SDIN=0; clk(); testbit(data, 2)?SDIN=1:SDIN=0; clk(); testbit(data, 1)?SDIN=1:SDIN=0; clk(); testbit(data, 0)?SDIN=1:SDIN=0; clk(); } void spk() L to H { RE0=1; pause(10000); RE0=0; } void interrupt picint(void) //只要有中断发生就一定有按键按下 { unsigned char tmp; if(INTF==1) { tmp=PORTA&0x0F; if(tmp!=0x0F) { switch(tmp) { case 0x01: spk();pause(1000);off_var=0;break; case 0x02: spk();pause(1000);spk();pause(1000);off_var=1;break; case 0x04: spk();pause(1000);spk();pause(1000); spk();pause(1000);off_var=2;break; case 0x08: spk();pause(1000);spk();pause(1000); spk();pause(1000);spk();pause(1000); off_var=3;break; default: spk();pause(5000);spk();pause(5000); spk();pause(5000); } } flg=1; INTF=0; } if(RBIF==1) { if((RB7==0)||(RB6==0)||(RB5==0)||(RB4==0)) { tmp=PORTB&0xF0; switch(tmp) { case 0xE0: spk();pause(1000);off_var=0;break; case 0xD0: spk();pause(1000);spk();pause(1000);off_var=1;break; case 0xB0: spk();pause(1000);spk();pause(1000); spk();pause(1000);off_var=2;break; case 0x70: spk();pause(1000);spk();pause(1000); spk();pause(1000);spk();pause(1000); off_var=3;break; default: spk();pause(5000);spk();pause(5000); spk();pause(5000); } } PORTB=PORTB; flg=1; RBIF=0; } } main() { TRISB=0xF1; TRISA=0x0F; TRISE=0x00; ADCON1=0x06; RBPU=0; GIE=1; PORTB=0x00; RBIE=1; INTE=1; INTF=0; RBIF=0; clr(); while(1) { if(flg==1) { switch(off_var) { case 0: send(0x3F);break; case 1: send(0x06);break; case 2: send(0x5B);break; case 3: send(0x4F);break; default: send(0x40); } flg=0; } } } 因篇幅问题不能全部显示,请点此查看更多更全内容