对于单片机初学者来说,数字电压表是一个很好的练习。在本文中,英瑞恩单片机开发工程师分享了一个用途PIC单片机开发的简单数字电压表。该数字电压表的范围为0-20V,当然,您也可以增加或减少输入电压的范围。
在这个方案中使用microchip的PIC16F688单片机,该PIC输入电压由8个模拟通道之一读取,内部使用ADC将其转换为10位数。ADC数字可以转换为实际测量的电压。电压显示是基于HD44780的字符LCD上。
1、数字电压表电路图及说明
你无法将20V信号直接馈入PIC单片机的输入通道。它的工作电压过高,可能会损坏单片机。因此,我们首先需要一个电压缩放器,它将输入电压缩小到PIC16F688安全工作电压范围。可通过以下简单的电阻分压器实现。
使用两个电阻R1和R2,可以将0-20V输入电压转换为0-5V。对于R1和R您可以看到电阻分压器网络的输出(Va)是输入电压的1/4。如果输入电压超过20V,则Va将超过5V,这可能对PIC单片机有害。如果在R电阻两端连接51.1V稳压二极管,输出电压Va永远不会超过5.1V。保护单片机免受高压输入可能造成的任何损坏。电压Va将流到PIC16F688单片机的AN(引脚11)通道。其它电路如下:
LCD显示器以连接显示器。如果LCD模块中只有14个引脚,可能没有背光功能,可以忽略15和16个引脚。通过连接调整对比度 5V和Gnd之间的5K完成电位计。提供在线串行编程(ICSP)以便将来任何变化都能轻松升级头部PIC单片机内部的固件。当单片机因某种原因停止执行程序时,外部复位有助于使整个系统进入已知的初始状态。
基于面包板的完整电路显示在这里。您需要使用此项目 5V稳压电源。因此,可以使用LM7805线性稳压器IC。
该方案采用C语言开发和使用Mikroelektronika的mikroC Pro for PIC编译器。PIC16F688单片机使用4.0 MHz内部时钟振荡器。启用了MCLR并打开启动定时器。你需要通过将军ANSEL寄存器的相应位置1,RA2 / AN输入定义为模拟输入。将ADCON1寄存器的VCFG为使用而清零位置Vdd = 5V作为AD转换的参考电压。ADCON0 = 8将AN输入通道连接到内部采样和维护电路。端口A和C也必须禁用引脚上的比较器(分配CMCON0 = 7)。其他设置:
振荡器->内部RC无时钟;
看门狗定时器->关闭;
电定时器->开启;
主清除启用->启用;
代码保护->关闭;
数据EE读保护->关闭;
欠压检测-> BOD启用,SBOREN禁用;
内外切换模式->启用;
监视器时钟故障保护->启用;
二、基于PIC单片机开发的数字电压表源代码sbitLCD_RSatRC4_bit;
sbitLCD_ENatRC5_bit;
sbitLCD_D4atRC0_bit;
sbitLCD_D5atRC1_bit;
sbitLCD_D6atRC2_bit;
sbitLCD_D7atRC3_bit;
sbitLCD_RS_DirectionatTRISC4_bit;
sbitLCD_EN_DirectionatTRISC5_bit;
sbitLCD_D4_DirectionatTRISC0_bit;
sbitLCD_D5_DirectionatTRISC1_bit;
sbitLCD_D6_DirectionatTRISC2_bit;
sbitLCD_D7_DirectionatTRISC3_bit;
//EndLCDmoduleconnections
charMessage1[]=“DVMProject”;
unsignedintADC_Value,DisplayVolt;
char*volt="00.0";
voidmain(){
ANSEL=0b00000100;//RA2/AN2isanaloginput
ADCON0=0b00001000;//Analogchannelselect@AN2
ADCON1=0x00;//ReferencevoltageisVdd
CMCON0=0x07;//Disablecomparators
TRISC=0b00000000;//PORTCAllOutputs
TRISA=0b00001100;//PORTAAllOutputs,ExceptRA3andRA2
Lcd_Init();//InitializeLCD
Lcd_Cmd(_LCD_CLEAR);//CLEARdisplay
Lcd_Cmd(_LCD_CURSOR_OFF);//Cursoroff
Lcd_Out(1,1,Message1);
Lcd_Chr(2,10,'V');
do{
ADC_Value=ADC_Read(2);
DisplayVolt=ADC_Value*2;
volt[0]=DisplayVolt/1000 48;
volt[1]=(DisplayVolt/100) 48;
volt[3]=(DisplayVolt/10) 48;
Lcd_Out(2,5,volt);
delay_ms(500);//Holdfor500ms
}while(1);
}//Endmain()
以上是基于英瑞恩单片机开发工程师分享的PIC单片机开发的数字电压表。英瑞恩专注于单片机应用程序的设计和开发,提供8台单片机、16台单片机、32台单片机、计算放大器和模拟开关。