Io T Dreamstime L 149977116

微控制器通过低成本模块发送电压和频率

2020年8月12日
In this Idea for Design, voltage and frequency can be transmitted wirelessly using PIC microcontrollers.

本文以PDF格式下载。

该项目将一组8位微控制器与433 MHz工业,科学和医学(ISM)带发射器/接收器配对。FS1000A RF发射器的范围高达200 m;XY-MK-5V RF接收器在5 V处运行,仅使用4 mA(Fig. 1)。这些模块很容易获得,并在带有Arduinos等平台的项目中使用。


项目使用MicrochipPIC microcontrollers including the16F161916F1614。这些利用了采用片上EUSART(增强的通用同步/异步接收器发射器)接口的无线电模块。在发射器侧,我们使用图片的模拟和数字接口来读取电压和频率源,分别在0到4.99 V DC和0至65.5 kHz范围内。

The logic diagram for the transmitter(Fig. 2)包括一个LCD显示屏以提供反馈。清单1(请参阅文章结尾)has the code for the 16F1619.


The receiver side(图3)also includes a pair of LCD displays. The displays aren’t needed in an application, but they’re handy for debugging.清单2(请参阅文章结尾)具有16F1614的代码。


连续交流

First, we will touch on the serial communication support that’s tied to the wireless modules. To establish communication, it’s necessary to have a starting bit for a period of time to alert the receiver that a data package is about to be transmitted. This forces the receiver clock to start synchronization with a 0 bit. Then each bit is sent individually, starting with the LSB bit through the MSB bit(see table below)。Each bit has the same period. Once all bits are transmitted, it must wait for the Stop bit to indicate end of transmission. This is achieved with a High logic, where the communication ends.


传输字母数字字符“ A”,其ASCII代码为0B01000001(图4),如表中所示,将其组织。每个位具有由传输速度(波特速率)确定的周期,该速度可能从115.2 kb/s到200位/s。


每个位的时间由:

为了传输电压,我们将使用10位类似物到数字转换器(ADC)读取它,默认情况下,该转换器将其参考电压连接到5V。这定义了ADC分辨率:

To perform the binary to decimal conversion, we use this code:

VINBCD = VIN*4887 ; multiplying by RESlsb = 4.8887

VR = div32 1000 ; perform 16-bit division

其中VIN是ADC读取的二进制电压,而VR是电压结果。

Timer1负责阅读频率,并配置为一秒钟内读取脉冲的数量。之后,PIC传输并收到这些读数。准备好数据后,指令HSEROUT发送序列数据。代码始终在等待用户激活。激活后,它将通过指令HSEROUT向接收单元发送控制变量,该指令以2400位/s的速度发送。该变量表明数据传输正在启动:

hserout [“ bz0”,10];发送激活指令

对于发射器代码,有必要分别使用微控制器的ADC和Timer1读取电压和频率。最大频率是:

然后,代码将在使用命令挖掘的情况下获取每个小数位数,并且每个数字以2400位/s发送,并带有指令HSEROUT的序列数据。在每个数据包的开头插入ASCII代码中的两个数字,以便接收确定要接收的数据。

hserout [“ bz”,dec a,10];

HSEROUT ["AZ",VD[3],VD[2],VD[1],VD[0],10]; send serial dataHSEROUT ["CZ",H[4],H[3],H[2],H[1],H[0],10];

When the receiver gets the data “BZ,” it represents the activity control in the serial port. The data package AZ represents the Voltage, while the data package CZ represents Frequency.

当Micro用按钮接收停止指令时,它在控制数据包中传输一个“ 1”,表明传输结束。

接收器使用指令HSERIN和WAIT等待控制变量BZ,该指令专门等待数据“ BZ”。由于RF数据传输具有外部噪声,因此在接收数据BZ之后,下一个数据存储在变量中以操作如下:

hserin 10,main1,[wait(“ bz”),str a \ 1];等待一秒钟接收指示

当第二个Micro收到控制变量时,它启动了数据输入,指令HSERIN等待每个传输的软件包中的ASCII代码。如果没有收到任何数据,代码将跳到下一个指令,如下:

HSERIN 10,JUMP1,[WAIT ("BZ"), STR A\1]

JUMP1: HSERIN 100,JUMP2,[WAIT ("AZ"), STR VD\4]JUMP2: HSERIN 10,HERE, [WAIT ("CZ"), STR H\5]

When the data is received, it’s transferred to two LCD displays. By using a CMOS switchHCF4066,可以控制每个LCD中的启用和R/W功能。MicroController中的两个位选择哪个LCD将按照以下代码显示:

LCD1 = 1 ; ENABLE LCD1

LCD2 = 1 ; ENABLE LCD2

接收器PIC MicroController驱动两个16x2 LCD显示由四cmos开关控制的HHCF4066-被视为多路复用器,以选择哪个LCD将接收数据。在这种情况下,第一个LCD显示电压,第二个LCD显示频率。

对于接收器,我们使用指令HSERIN,该指令接收两个ASCII字符,然后保存两个字符的相应数据。

里卡多·希门尼斯(Ricardo Jimenez)拥有电子工程硕士学位。他是应用于仪器的PIC微控制器上的几种实验室实践笔记本的作者。

加布里埃尔·李·阿尔瓦雷斯(Gabriel Lee Alvarez)正在Mexicali(ITM)攻读其电子工程学位。

清单1:PIC16F1619的代码用作发射机

;无线电压表/FREQ RF RS232 TransMiter;Melabs.com的PBP3编译器;作者:里卡多·希门尼斯和加布里埃尔·李·阿尔瓦雷斯;©2020年7月13日;PIC16F1619;TRANSMITTER PIC16F1619 #CONFIG __config _CONFIG1, _FOSC_INTOSC & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _BOREN_ON & _CLKOUTEN_OFF __config _CONFIG2, _WRT_OFF & _PPS1WAY_OFF & _ZCD_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LVP_OFF __config _CONFIG3, _WDTCPS_WDTCPS4 & _WDTE_ON & _WDTCWS_WDTCWS100 & _WDTCCS_LFINTOSC #ENDCONFIG DEFINE OSC 16;OSCCON =%01111010;Intenal OSC设置为16 MHz OSCTUNE = 0 OSCSTAT =%0001111;trisa =%00111110; RA0 AS A OUTPUTS, RA1:RA2:RA3:RA4:RA5 AS A INPUTS ANSELA = %000100; RA0:RA1:RA4:RA5 AS DIGITAL,RA2:RA3 AS ANALOG, TRISC = %100000;RC0:RC1:RC2:RC3:RC4 AS OUTPUTS, RC5 AS INPUTS TRISC=0; Clearing PORTC TRISB = 0; Clearing PORTB ANSELB = 0; PORTB set as digital ;PPSLOCK=0; ;ANSEL PULL-UP resistors disabled WPUA = 0; AC = 0; WPUC = 0; PULL-UPS DISABLED OPTION_REG.7 = 0; PULL-UPS ENABLED WPUA.3 = 1; PULL-UP IN RA3 ENABLED T1CON = %10000101; TMR1 ENABLED ADCON0 = %00001111;AN3 IS ENABLED ADCON1 = %10000000; FOSC/2, VDD ;--------------------------------- DEFINE HSER_RCSTA 90h; RX MODULE IS ENABLED DEFINE HSER_TXSTA 20h; TX MODULE IS ENABLED DEFINE HSER_BAUD 2400; BAUD RATE IS 2400 rc1sta.7 = 1; SERIAL COMUNICATION IS ENABLED RB7PPS = %10010; ;--LCD CONFIGURATION ---------------------- DEFINE LCD_DREG PORTC ' PORTC is LCD data port DEFINE LCD_DBIT 0 ' PORTC.0 is the data LSB DEFINE LCD_RSREG PORTA ' RS is connected to PORTA.0 DEFINE LCD_RSBIT 0 DEFINE LCD_EREG PORTA ' E is connected to PORTA.1 DEFINE LCD_EBIT 1 DEFINE LCD_BITS 4 ' 4 data line DEFINE LCD_LINES 2 ' 2-line display DEFINE LCD_COMMANDUS 1500 ' Use 1500uS command delay DEFINE LCD_DATAUS 44 ' Use 44uS data delay ;;----------------------------------------------------- LCDOUT $FE,$28; $28 FUNCTION SET, 4 BITS LCDOUT $FE,$10; $10 SHIFT DISPLAY LCDOUT $FE,$0C; $0C DISPLAY ON LCDOUT $FE,$06; $06 ENTRY MODE SET ;----------------------------------------- ;CREATING ALIAS ;TX VAR PORTC.0;; PB VAR PORTA.3 ;---- ;---VARIABLES X VAR byte[4]; Y VAR WORD; VIN VAR WORD; VINBCD var word H VAR BYTE[5]; TMR VAR WORD; VD var byte[4]; A VAR BIT IN var byte; OUT VAR BYTE; ;-------- A = 1 for x = 0 to 5 vd[x] = "0"; h[x] = "0"; next x ;send a message to the LCD LCDOUT $FE,$80,"FREQUENCY METER-"; LCDOUT $FE,$C0,"--VOLTMETER RF--"; PAUSE 2000; TMR = 0; T1CON.0 =0; T1CON input Frequency DISABLED MAIN LCDOUT $FE,$80,"FREQUENCY METER-"; LCDOUT $FE,$C0,"--VOLTMETER RF--"; ;--------- IF PB = 0 THEN; wait for Push button to go Low PAUSE 150 A = 0; CONTROL VARIABLE IS 0 FOR X= 0 TO 3; HSEROUT ["BZ0",10]; SEND ACTIVATION INSTRUCTION NEXT X; ENDIF; IF A = 0 THEN; START QUESTION FOR CONTROL variable LCDOUT $FE,$80," START "; LCDOUT $FE,$C0," TX "; PAUSE 1000; TMR1L = 0;CLEAR TIMER TMR1H = 0; T1CON.0 = 1; ENABLES TIMER STAY:; T1CON.0=1; PAUSE 1000 T1CON.0=0; TIMER DISABLED GOSUB ADC; GOSUB H_DEC; GO TO h_DEC AND RETURN; GOSUB SHOW_LCD; GO TO SHOW_LCD AND RETURN GOSUB SEND; if pb = 0 then; wait for Push button to go high A = 1; CONTROL variable is 1, END TRANSMISSION PAUSE 200; ENDIF; IF A = 0 THEN STAY; If CONTROL IS "0" GO TO STAY A = 1;; CONTROL VARIABLE IS "1" FOR X = 0 TO 2; GOSUB SEND NEXT X LCDOUT $FE,$80," END "; LCDOUT $FE,$C0," TX "; PAUSE 1000 ENDIF goto main; ADC:; ADCON0.1 = 1; ENABLE ADC MODULE HERE1: IF ADCON0.1 = 1 THEN HERE1; CONVERSION in progress VIN.BYTE0 = ADRESL; SAVE LOWER REGISTER OF THE ADC IN VARIABLE VIN VIN.BYTE1 = ADRESH; SAVE HIGHER REGISTER OF THE ADC IN VARIABLE VIN disable; DISABLE INTERRUPTS VINBCD = VIN*4887; MULTIPLYING BY RESLSB = 4.8887 VIN = div32 1000; PERFORM 16-BIT DIVISION enable; ENABLE INTERRUPTS FOR X = 0 TO 3; START LOOP IN = VIN DIG X; GET DIGIT X LOOKUP IN,["0123456789ABCDEFG"],OUT; DIGITS DECODING VD[X] = OUT; SAVE DECODED DIGITS NEXT X; return; SHOW_LCD:; display LABEL on LCD LCDOUT $FE,$80,"HZ= ",H[4],H[3],H[2],H[1],H[0]," "; LCDOUT $FE,$C0,"V= ",VD[3],".",VD[2],VD[1],VD[0]," "; RETURN; SEND:; LABEL SEND; HSEROUT ["BZ",DEC A,10]; HSEROUT ["AZ",VD[3],VD[2],VD[1],VD[0],10]; SEND SERIAL data HSEROUT ["CZ",H[4],H[3],H[2],H[1],H[0],10]; RETURN; H_DEC:; LABEL h_DEC; TMR.BYTE0 = TMR1L ; OBTAIN LOWER REGISTER OF TIMER1 TMR.BYTE1 = TMR1H; OBTAIN HIGHER REGISTER OF TIMER1 FOR X = 0 TO 4; START LOOPS IN = TMR DIG X; OBTAIN DIGITS LOOKUP IN,["0123456789"],OUT; DECODING DIGITS H[X] = OUT; SAVE DIGITS NEXT X; NEXT LOOPS TMR1L = 0; CLEAR TIMER TMR1H = 0; RETURN; END;

清单2:PIC16F1614的代码作为RF接收器

;Melabs.com的PBP3编译器;作者:里卡多·希门尼斯和加布里埃尔·李·阿尔瓦雷斯;©2020年7月13日;接收器模块的PIC16F1614;包括“ modedefs.bas”;包括库OSCCON =%01111010;16 MHz OSCTUNE = 0;OSCSTAT =%00011111;PLL已关闭,HFINTOSC和MFINTOSC准备就绪定义OSC 16;时钟设置为16MHz Trisa =%0000000; ALL PINS ARE OUTPUTS ANSELA = %000000; ALL PINS ARE DIGITAL WPUA = 0; INTERN PULL-UPS DISABLED TRISC = %100000; RC5 INPUT, RC0:RC4 OUTPUTS ANSELC = 0; ALL PINS ARE DIGITAL WPUC = 0; INTERN PULL-UPS IS DISABLED OPTION_REG.7 = 0; WEAK PULL-UPS ENABLED BY INDIVIDUAL WPUX ;----UART-HSERIN CONFIGURATION------ RXPPS = %10101; EUSART CR/RX PORTC.5 DEFINE HSER_RCSTA 90h; RECEIVER ENABLED DEFINE HSER_TXSTA 20h; TRANSMITTER ENABLED DEFINE HSER_BAUD 2400; 2400 BAUD RATE DEFINE HSER_CLROERR 1; CLEAR OVERRUN ERROR rc1sta.7 = 1; SERIAL PORT IS ENABLED ;--LCD CONFIGURATION ---------------------- DEFINE LCD_DREG PORTC; PORTC IS A DATA PORT DEFINE LCD_DBIT 0 ; RC0 IS THE LSB, RC1,RC2,RC3 ARE MSB DEFINE LCD_RSREG PORTC ' RS IT IS IN PORTC DEFINE LCD_RSBIT 4; RS IN RC4 DEFINE LCD_EREG PORTA ; EN IS IN PORTA DEFINE LCD_EBIT 0; RA0 IS EN DEFINE LCD_BITS 4 ' 4 ; IMES DEFINE LCD_LINES 2 ' It is a 2-line display DEFINE LCD_COMMANDUS 1500 ; Use 1500uS command delay DEFINE LCD_DATAUS 44 ' Use 44uS data delay ;;----------------------------------------------------- ;----SET ALIAS-------- PB VAR PORTA.3 LCD1 VAR PORTA.1; LCD2 VAR PORTA.2; ;----CREATE VARIABLES----- X VAR byte; VIN VAR WORD; VIN2 var word VD var byte[4]; Y VAR BYTE; H VAR BYTE[5]; A VAR BYTE; R VAR BYTE[7] IN var byte; OUT VAR BYTE; ;---- ;-CLEAR VARIABLES-- FOR Y = 0 TO 5; VD[Y] = "0" H[Y] = "0" NEXT Y; X =0; ;---INITIALIZE LCD-------------------- LCD1 = 1; ENABLE LCD1 LCD2 = 0; DISABLE LCD2 PAUSE 10; LCDOUT $FE,$28; $28 FUNCTION SET, 4 BITS LCDOUT $FE,$10; $10 SHIFT DISPLAY LCDOUT $FE,$0C; $0C DISPLAY ON LCDOUT $FE,$06; $06 ENTRY MODE SET ;--- LCD1 = 0; DISABLE LCD1 LCD2 = 1; ENABLE LCD2 PAUSE 10; LCDOUT $FE,$28; $28 FUNCTION SET, 4 BITS LCDOUT $FE,$10; $10 SHIFT DISPLAY LCDOUT $FE,$0C; $0C DISPLAY ON LCDOUT $FE,$06; $06 ENTRY MODE SET ;-------------------------------------- LCD1 = 1; ENABLE LCD1 LCD2 =1; ENABLE LCD2 PAUSE 1; LCDOUT $FE,$80,"---VOLTMETER----"; LCDOUT $FE,$C0,"--RF RECEIVER---"; PAUSE 1000 MAIN: LCD1 = 1; ENABLE LCD1 LCD2 = 0; DISABLE LCD2 PAUSE 1; LCDOUT $FE,$80,"----WAITING-----"; LCDOUT $FE,$C0,"----VOLTAGE-----"; LCD1 = 0; ENABLE LCD1 LCD2 = 1; DISABLE LCD2 PAUSE 1; LCDOUT $FE,$80,"----WAITING-----"; LCDOUT $FE,$C0,"---FREQUENCY----"; LCD1 = 1; ENABLE LCD1 LCD2 = 1; ENABLE LCD2 ;ON INTERRUPT GOTO READ_UART MAIN1: HSERIN 10,MAIN1,[WAIT("BZ"), STR A\1]; WAIT 1S TO RECEIVE INSTRUCTION if a = "0" then LCD1 = 1; ENABLE LCD1 LCD2 = 1; ENABLE LCD2 PAUSE 1; LCDOUT $FE,$80," STARTING "; LCDOUT $FE,$C0," RX "; PAUSE 1000; HERE_START: HSERIN 10,JUMP1,[WAIT ("BZ"), STR A\1] JUMP1:HSERIN 100,JUMP2,[WAIT ("AZ"), STR VD\4] JUMP2:HSERIN 10,HERE, [WAIT ("CZ"), STR H\5] HERE:; LCD1 = 1; ENABLE LCD1 LCD2 = 0; DISABLE LCD2 PAUSE 2; LCDOUT $FE,$80,"RECEIVED VOLTAGE"; LCDOUT $FE,$C0,VD[0],".",VD[1],VD[2],VD[3]," "; HERE3:; LABEL HERE3 LCD1 = 0; DISABLE LCD1; LCD2 = 1; ENABLE LCD2 PAUSE 2; LCDOUT $FE,$80," FREQUENCY "; LCDOUT $FE,$C0,H[0],H[1],H[2],H[3],H[4]," HZ "; ;ENABLE LCD1 = 1; ENABLE LCD1; LCD2 = 1; ENABLE LCD2; ;ENABLE INTERRUPT if a = "0" then HERE_START LCD1 = 1; ENABLE LCD1 LCD2 = 1; ENABLE LCD2 PAUSE 1 LCDOUT $FE,$80," END "; LCDOUT $FE,$C0," RX "; PAUSE 1000 ; endif goto main; END

来自我们的合作伙伴

Select TI reference designs

By market. Select a market AutomotiveCommunications equipmentEnterprise systemsIndustrialPersonal electronics Select a sector. By power reference desig…

网络研讨会:权力完整性的基础知识

现在可按需使用。电力完整性涉及维持生成的电力质量。高功率完整性意味着噪音…

力量Integrity Characterization Confidence

Wavesurfer 4000HD的价格适合任何预算,比您想象的要多于分析电源导轨,电源测序和电源管理的功能更多的功能…

4-A,低葡萄酒(1.1-V),低噪声,高精度,超低降低(LDO)电压调节器

4-A,低葡萄酒(1.1-V),低噪声,高精度,超低降低(LDO)电压调节器

Automotive 65-Vin PSR PSR反式转换器,带有100-V,1.5-A集成功率MOSFET

Automotive 65-VIN no-opto flyback converter with 100-V, 1.5-A integrated MOSFET

宽2.2 mhz VIN low IQ synchronous boost controller

宽2.2 mhz VIN low IQ synchronous boost controller

表达您的意见!

本网站要求您注册或登录以发表评论。
尚未添加评论。想开始对话吗?

来自我们的合作伙伴

Select TI reference designs

By market. Select a market AutomotiveCommunications equipmentEnterprise systemsIndustrialPersonal electronics Select a sector. By power reference desig…

网络研讨会:权力完整性的基础知识

现在可按需使用。电力完整性涉及维持生成的电力质量。高功率完整性意味着噪音…

力量Integrity Characterization Confidence

Wavesurfer 4000HD的价格适合任何预算,比您想象的要多于分析电源导轨,电源测序和电源管理的功能更多的功能…

4-A,低葡萄酒(1.1-V),低噪声,高精度,超低降低(LDO)电压调节器

4-A,低葡萄酒(1.1-V),低噪声,高精度,超低降低(LDO)电压调节器

Automotive 65-Vin PSR PSR反式转换器,带有100-V,1.5-A集成功率MOSFET

Automotive 65-VIN no-opto flyback converter with 100-V, 1.5-A integrated MOSFET
Baidu