该设计采用51单片机STC89C52控制DS18B20实现的无线温度控制系统。通过简单的无线通信协议,实现可靠性与功耗平衡。该系统能实现对温度的测量,同时还可以进行温度的设定,是可以实现远程控制的无线温度控制系统。无线传输采用nRF24L01模块传输。
该硬件电路设计主要分为三部分:主机和从机以及语音模块。
具体如下:
从机:由温度传感器DS18B20,STC89C52单片机和nRF24L01无线射频模块,以及LCD1602液晶显示模块和驱动模块、继电器等组成。
主机:由STC89C52单片机,nRF24L01无线射频模块,LCD12864液晶模块、电源稳压等组成。
语音模块:主要基于ISD1720设计,外接扬声器。
无线温度控制原理图与pcb(包含主机从机和ISD1720语音模块):
无线温度控制原理图与pcb(包含主机从机和ISD1720语音模块):
无线领域的总结,1、注意微机之间的通信,2、选择接受通道,3、设置工作通道频率
4、接收通道选择和发送通道相同有效数据宽度5、发射速率、功耗功能设置
6、CRC使能,16位CRC校验,上电,模式选择
单片机源程序如下(部分内容预览):
4、接收通道选择和发送通道相同有效数据宽度5、发射速率、功耗功能设置
6、CRC使能,16位CRC校验,上电,模式选择
单片机源程序如下(部分内容预览):
//软件调试第三个问题,ISD1720有二种工作模式,SPI模式,也就是用单片机直接控制,//独立按键模式,直接用其外围按键控制,刚做好硬件发现独立按键模式工作不正常, //所以选择SPI模式。对ISD1720定点录好音后发现并不能实现连续放音,刚开始考虑到 //可能是指令发送后1720没有足够的时间完成就收到了第二条指令才导致放音不连续, //于是考虑用延时,延时后发现可以把定点录的音都播放出来,但是各段语音之间有停顿 //不能实现无缝播放,语音听起来很生硬,于是继续查看芯片数据手册,对这一点并没有介绍, //于是上网查SPI1720调试心得,发现ISD1720内部有先进先出数据缓冲器,FIFO是英文First //In First Out 的缩写,是一种先进先出的数据缓存器,这是一种传统的按序执行方法, //先进入的指令先完成并引退,跟着才执行第二条指令,并且ISD1720状态寄存器第四位INT作用 //是当一个操作完成后被置1,可被CLR_INT清除。当发送一次定点播放命令后,不断地读状态寄 //存器,判断INT位是否为1,若不是继续读状态寄存器,再判读,当INT为1时,用CLR_INT清楚, //紧接着发送第二条定点播放指令,至此实现了定点语音的无缝播放 if(temperature ==tempwant ) { TxBuf[1] =0x07;//当温度相同时,自动发送停止降温或加热指令 tf = 1 ; } if(tf ==1 ) { TX_Mode(TxBuf); delay_ms(20); TX_Mode(TxBuf); delay_ms(20); TX_Mode(TxBuf);//采用连发,为的是担心从机工作在发送模式,而接不到指令 delay_ms(20); Check_ACK(1); // 等待发送完毕,清除TX FIFO tf = 0 ; //自动跳出发射状态 delay_ms(100); RX_Mode(); // 设置为接收模式 } } //软件调试第二个问题,当调试NRF24L01通信时发现程序多次进入进入死循环,经查资料发现, //NRF24L01不能同时工作在发送接收二种状态,因为它是半双工通信。虽然可以收也可以发, //但是收的时候不能发,发的时候不能收,这种通信方式可以实现双向的通信,但不能在 //两个方向上同时进行,必须轮流交替地进行。也就是说,通信信道的每一段都可以是发送端, //也可以是接收端。但同一时刻里,信息只能有一个传输方向。 /************************************************** 函数:main() 描述: 主函数 /**************************************************/ void main(void) { init();//初始化液晶 pitcure(table_t);//开机图片 delay(1000); SID_Init();//ISD1720初始化 delay(500); ISD_set_play(0X7E,0X00,0X9E,0X00);//播放开机音乐 ISD_set_play(0X6D,0X00,0X6D,0X00); //软件调试第四个问题:开机音乐不能实现正常播放,当下载程序的时候, //开机音乐正常播放,断电后再接通,开机音乐不播放,其中有一个细节性的问题, //就是下载程序时ISD1720有足够的时间初始化,由于再录音的时候使用了定点删除, //导致录音没有遵从1720内部环形存储体系,导致1720自检需要很长的时间, //改进办法:当接通电源后,在1720开机音乐定点播放命令前面放入开机图片, //以此代替延时,使1720初始化完全后再给其发送开机音乐定点播放命令。 write_com(0x01);//清屏 init_io(); // NRF24L01初始化IO TX_Mode(); // 设置为发射模式 RX_Mode(); while(1) { display(); display_state(); key(); // 按键扫描 if(tf ==0 ) { sta = SPI_Read(STATUS); // 读状态寄存器 //if(RX_DR) 判断是否接受到数据 SPI_Read_Buf(RD_RX_PLOAD, RxBuf, TX_PLOAD_WIDTH); // 从RX FIFO读出数据 SPI_RW_Reg(WRITE_REG + STATUS, sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志 } } }
复制代码函数:FS()
软件调试第二个问题,当调试NRF24L01时发现程序多次进入进入死循环,它是半双工通信。虽然可以收也可以发,但是收的时候不能发,发的时候不能收,这种通信方式可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。也就是说,通信信道的每一段都可以是发送端,也可以是接收端。但同一时刻里,信息只能有一个传输方向。在此设置
主机软件
② 源程序
无线温度控制主机程序,包括三大模块,12864,NRF24L01,ISD1720,此程序在调试时出现三大难题,一:NRF24L01是单收单发行器件,不能同时工作在既发射有接收状态,为此必须做以下调整,主机:一直工作在接受状态,当有按键被按下时进入发射状态,同时停止接受,当发射结束后,自动跳出,进入接受状态;
从机:用标志位循环工作在发射接受状态,当发射结束后,自动定义标志位使其进入接受状态,然后再跳出接收状态,进入发射状态,如此循环。二:在isd1720定点播放时要想实现无缝连接需要读状态寄存器,判断ISD1720返回的信号是否上一个指令已经完成,每次定点录音后1720会自动在语音结尾加EOM标志,所以录音时不应全部录完然后再查找所需要的语音,应单个录音,三:应调试发现ISD1720反应比较慢所以要想实现开机音乐必须在主程序中加3秒延时,使语音芯片有足够的时间初始化,等待SPI指令的到来。
经验及教训:1、学习一个新型原器件时应该反复琢磨芯片使用说明书,查看别人的学习新的体会,2、其中重要的是状态寄存器和微机之间的通信,3、单片机高电平时输出电流小于10个ma,低电平时大概为30~40MA,NRF24L01正常工作单片机输出电流应小于10个MA,否则容易烧毁模块,一般采用2K电阻限流。待续
软件调试第二个问题,当调试NRF24L01时发现程序多次进入进入死循环,它是半双工通信。虽然可以收也可以发,但是收的时候不能发,发的时候不能收,这种通信方式可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。也就是说,通信信道的每一段都可以是发送端,也可以是接收端。但同一时刻里,信息只能有一个传输方向。在此设置
主机软件
② 源程序
无线温度控制主机程序,包括三大模块,12864,NRF24L01,ISD1720,此程序在调试时出现三大难题,一:NRF24L01是单收单发行器件,不能同时工作在既发射有接收状态,为此必须做以下调整,主机:一直工作在接受状态,当有按键被按下时进入发射状态,同时停止接受,当发射结束后,自动跳出,进入接受状态;
从机:用标志位循环工作在发射接受状态,当发射结束后,自动定义标志位使其进入接受状态,然后再跳出接收状态,进入发射状态,如此循环。二:在isd1720定点播放时要想实现无缝连接需要读状态寄存器,判断ISD1720返回的信号是否上一个指令已经完成,每次定点录音后1720会自动在语音结尾加EOM标志,所以录音时不应全部录完然后再查找所需要的语音,应单个录音,三:应调试发现ISD1720反应比较慢所以要想实现开机音乐必须在主程序中加3秒延时,使语音芯片有足够的时间初始化,等待SPI指令的到来。
经验及教训:1、学习一个新型原器件时应该反复琢磨芯片使用说明书,查看别人的学习新的体会,2、其中重要的是状态寄存器和微机之间的通信,3、单片机高电平时输出电流小于10个ma,低电平时大概为30~40MA,NRF24L01正常工作单片机输出电流应小于10个MA,否则容易烧毁模块,一般采用2K电阻限流。待续
软件介绍:
无线温度控制主机程序,包括三大模块,12864,NRF24L01,ISD1720。此程序在调试时出现三大难题。
1、NRF24L01是单收单发行器件,不能同时工作在既发射有接收状态。为此必须做以下调整主机,一直工作在接受状态。当有按键被按下时进入发射状态,同时停止接受,当发射结束后,自动跳出,进入接受状态。从机用标志位循环工作在发射接受状态,当发射结束后,自动定义标志位使其进入接受状态,然后再跳出接收状态,进入发射状态,如此循环。
2、在isd1720定点播放时要想实现无缝连接需要读状态寄存器,判断ISD1720返回的信号是否上一个指令已经完成,每次定点录音后1720会自动在语音结尾加EOM标志,所以录音时不应全部录完然后再查找所需要的语音,应单个录音。
3、应调试发现ISD1720反应比较慢所以要想实现开机音乐必须在主程序中加3秒延时,使语音芯片有足够的时间初始化,等待SPI指令的到来。