基于无线温度控制系统硬件介绍:
image.png
该设计采用51单片机STC89C52控制DS18B20实现的无线温度控制系统。通过简单的无线通信协议,实现可靠性与功耗平衡。该系统能实现对温度的测量,同时还可以进行温度的设定,是可以实现远程控制的无线温度控制系统。无线传输采用nRF24L01模块传输。
该硬件电路设计主要分为三部分:主机和从机以及语音模块。
具体如下:
从机:由温度传感器DS18B20,STC89C52单片机和nRF24L01无线射频模块,以及LCD1602液晶显示模块和驱动模块、继电器等组成。
主机:由STC89C52单片机,nRF24L01无线射频模块,LCD12864液晶模块、电源稳压等组成。
语音模块:主要基于ISD1720设计,外接扬声器。

无线温度控制原理图与pcb(包含主机从机和ISD1720语音模块):

image.png
image.png
image.png
无线领域的总结,1、注意微机之间的通信,2、选择接受通道,3、设置工作通道频率
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电阻限流。待续

    软件介绍:
    无线温度控制主机程序,包括三大模块,12864,NRF24L01,ISD1720。此程序在调试时出现三大难题。
    1、NRF24L01是单收单发行器件,不能同时工作在既发射有接收状态。为此必须做以下调整主机,一直工作在接受状态。当有按键被按下时进入发射状态,同时停止接受,当发射结束后,自动跳出,进入接受状态。从机用标志位循环工作在发射接受状态,当发射结束后,自动定义标志位使其进入接受状态,然后再跳出接收状态,进入发射状态,如此循环。
    2、在isd1720定点播放时要想实现无缝连接需要读状态寄存器,判断ISD1720返回的信号是否上一个指令已经完成,每次定点录音后1720会自动在语音结尾加EOM标志,所以录音时不应全部录完然后再查找所需要的语音,应单个录音。
    3、应调试发现ISD1720反应比较慢所以要想实现开机音乐必须在主程序中加3秒延时,使语音芯片有足够的时间初始化,等待SPI指令的到来。