对于单片机初学者来说,数字电压表是一个不错的练习项目。在本文中,单片机开发工程师们分享了一个使用pic单片机开发的简易数字电压表。该数字电压表的范围是0-20v,当然你也可以自己增加或减少输入电压的范围。
在这个方案中,使用的是microchip的pic16f688单片机,该pic单片机通过8个模拟通道之一读取输入电压,并使用内部adc将其转换为10位数字。用adc转换做一些数学运算,该数字可以转换为实际测得的电压。电压显示在基于hd44780的字符lcd上。
一、数字电压表电路图和说明
你无法将20v信号直接馈入pic单片机的输入通道。它的工作电压过高,可能会损坏单片机。因此,首先我们需要一个电压缩放器,该电压缩放器会将输入电压缩小到pic16f688的安全工作电压范围。可以通过下面所示的简单电阻分压器来实现。
使用两个电阻r1和r2,可以将0-20v的输入电压下转换为0-5v。对于r1和r2的选定值,你可以看到电阻分压器网络的输出(va)是输入电压的1/4。如果输入电压超过20v,则va将超过5v,这可能对pic单片机有害。如果在r1电阻两端连接一个5.1v稳压二极管,则输出电压va将永远不会超过5.1v。这样可以保护单片机免受高压输入可能造成的任何损害。电压va将流到pic16f688单片机的an2(引脚11)通道。其余电路如下所示:
lcd显示器以4位模式连接。如果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 / an2输入定义为模拟输入。将adcon1寄存器的vcfg位清零,以使用vdd = + 5v作为ad转换的参考电压。adcon0 = 8将an2输入通道连接到内部采样和保持电路。端口a和c引脚上的比较器也必须被禁用(分配cmcon0 = 7)。其他设置:
振荡器-》内部rc无时钟;
看门狗定时器-》关闭;
电定时器-》开启;
主清除启用-》启用;
代码保护-》关闭;
数据ee读保护-》关闭;
欠压检测-》 bod启用,sboren禁用;
内部外部切换模式-》启用;
监视器时钟故障保护-》启用;
二、基于pic单片机开发的数字电压表源代码
sbit lcd_rs at rc4_bit;
sbit lcd_en at rc5_bit;
sbit lcd_d4 at rc0_bit;
sbit lcd_d5 at rc1_bit;
sbit lcd_d6 at rc2_bit;
sbit lcd_d7 at rc3_bit;
sbit lcd_rs_direction at trisc4_bit;
sbit lcd_en_direction at trisc5_bit;
sbit lcd_d4_direction at trisc0_bit;
sbit lcd_d5_direction at trisc1_bit;
sbit lcd_d6_direction at trisc2_bit;
sbit lcd_d7_direction at trisc3_bit;
// end lcd module connections
char message1[] = “dvm project”;
unsigned int adc_value, displayvolt;
char *volt = “00.0”;
void main() {
ansel = 0b00000100; // ra2/an2 is analog input
adcon0 = 0b00001000; // analog channel select @ an2
adcon1 = 0x00; // reference voltage is vdd
cmcon0 = 0x07 ; // disable comparators
trisc = 0b00000000; // portc all outputs
trisa = 0b00001100; // porta all outputs, except ra3 and ra2
lcd_init(); // initialize lcd
lcd_cmd(_lcd_clear); // clear display
lcd_cmd(_lcd_cursor_off); // cursor off
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)%10 + 48;
volt[3] = (displayvolt/10)%10 + 48;
lcd_out(2,5,volt);
delay_ms(500); // hold for 500 ms
} while(1);
} // end main()
荣耀9什么时候上市?荣耀9最新消息:麒麟960+2000万双摄+6GB,6月20号与你不见不散
超灵敏二硫化钼湿度传感器有什么优点?有哪些应用?
机器人开发大赛圆满结束,Imagination核心IP为开发者提供技术支撑
亚马逊2亿美元投资Velodyne,进军激光雷达领域
罗德与施瓦茨QPS Walk2000可以轻松集成到完整的安全通道架构中
使用PIC单片机开发的简易数字电压表
面板的全新时代,可挠式OLED战火燃烧
无线倾角传感器监测英国圣马利亚大教堂
服务器并发的概念
广东广电网络未来的5G建设规划详细介绍
传感器的升级换代成为智慧城市发展的关键
锤子科技即将发布坚果Pro2S,就在8月20日19:30的北京凯迪拉克中心
未来若机器人与人类共存 那么该如何相处
基于机器视觉系统图案识别的检查任务
荣耀30手机最终以91分的成绩拿下5G通信指数第一名
工业互联网或将驶入快车道,如何探索新商业模式
2021春季全国特种电子元器件展,创历史新高!
技术沉淀迎来变局,复盘导电剂前世今生
华为正在为公司的功率器件研发大肆招兵买马
SiC市场份额翻番,安森美半导体要起飞?