在本篇文章中,我们将向您展示使用两个PIC微控制器制作无线温度计的一种方法。其中一个微控制器(PIC16F688)测量LM34的电压,并将其转换为ADC值,然后发送出去。接收器将接收数据,然后在LCD上显示消息。
使用433MHz发送器发送数据很简单:本例中,我们将PIC微控制器的TX引脚连接到433MHz模块的数据引脚,然后发送器将发送UART引脚产生的任何信号。
但接收数据部分是比较困难的部分。接收器将接收其范围内的所有内容。要整理出我们想要的数据,我们需要某种协议或纠错机制。在之前的文章中,我使用了一个VirtualWire库的Arduino。在本篇文章中,我将使用另一种技术。现在,在发送端向传输的数据添加奇偶校验,然后在接收端检查奇偶校验。在写本文时,我找到了一个适用于PIC的VirtualWire库的网站。然而,这个库有一个缺点就是它几乎占满了PIC的内存。
所需的材料 ● MPLAB X IDE集成开发环境 ● PIC16F688微控制器 ● LM34传感器 ● PIC16F877A微控制器 ● LCD1602液晶显示屏 ● 433MHz射频模块(发射器和接收器) ● 面包板
硬件原理框图 下面是发送和接收部分的原理框图。
发射部分:
实现的功能:
● 编程微控制器的方法 - > ICSP ● 测量温度的传感器 - > LM34 ● 用于处理数据的微控制器 - > PIC16F688 ● 发送数据的方法 - > 433MHz RF TX模块
接收部分:
实现的功能:
● 编程微控制器 - > ICSP ● 显示消息 - > LCD1602液晶显示屏 ● 用于处理数据的微控制器 - > PIC16f877A ● 接收RF信号 - > 433MHz RF RX模块
电路原理图:
发射部分:
接收部分:
未使用的引脚没有连接到GND或测试点。所有原理图都不用于生产,它们仅用于面包板。
软件工作原理 发射部分: 程序运行时,它会读取LM34的电压。该电压转换为ADC值。然后将该值计算为华氏温度和摄氏温度。根据一些if-sentence,将值传递给uart_write函数。此函数检查值是否有效,并将其传输到uarttransmit-函数。此函数为数据添加奇偶校验,然后将其发送到TXREG。
这种类型的发射器在通电后始终发送数据,这会干扰在相同频率范围内工作的其他无线设备。当发射器开启时,车库门钥匙和遥控吊扇可能无法正确响应。为了解决这个问题,我们将仅在需要发送数据时才打开RF发射器,在不需要发送数据时关闭RF发射器。
接收部分: 接收部分拾取各种信号和噪声。该软件有一些调试代码和一个MAX232,用于在终端窗口中查看发生的情况。拾取信号时,将检查该帧的帧错误位。如果该值有一个帧错误,则将接收的数据设置为NULL。然后检查该值是否为Overrun Error位。如果溢出错误位检查失败,则RCSTAbits.CREN复位。如果接收到的值通过了这两个检测,则接收的数据不是垃圾,然后计算奇偶校验。如果计算的奇偶校验等于接收的奇偶校验,则该值有效,然后根据一些if句子采取动作。
检查接收到的数据并确定后,PIC会在LCD显示屏上显示一条消息。为了使LCD与微控制器一起工作,我使用了随XC8编译器一起安装的库文件。所有源文件都添加到一个lcd_lib.c文件中。
在开发过程中,我在面包板上添加了MAX232,并且将其连接到我的电脑。这样我就可以很容易地看到两个PIC上的EUSART端口发送了什么。
总结
在本篇文章中,我们向您展示了如何使用2个PIC微控制器、LM34传感器和LCD1602制作一个无线温度计。使用一个PIC微控制器测量温度,并计算ADC值。根据计算,数据被格式化并发送到USART端口。接收器检查是否有错误,当检查无误后,LCD1602上会显示一条信息。 |