黄金公主玩法与规则
技術熱線: 4007-888-234

基于PIC單片機開發的數字電壓表

更新時間: 2019-11-19
閱讀量:39

對于單片機初學者來說,數字電壓表是一個不錯的練習項目。在本文中,英銳恩單片機開發工程師們分享了一個使用PIC單片機開發的簡易數字電壓表。該數字電壓表的范圍是0-20V,當然你也可以自己增加或減少輸入電壓的范圍。

在這個方案中,使用的是microchip的PIC16F688單片機,該PIC單片機通過8個模擬通道之一讀取輸入電壓,并使用內部ADC將其轉換為10位數字。用ADC轉換做一些數學運算,該數字可以轉換為實際測得的電壓。電壓顯示在基于HD44780的字符LCD上。

一、數字電壓表電路圖和說明

你無法將20V信號直接饋入PIC單片機的輸入通道。它的工作電壓過高,可能會損壞單片機。因此,首先我們需要一個電壓縮放器,該電壓縮放器會將輸入電壓縮小到PIC16F688的安全工作電壓范圍。可以通過下面所示的簡單電阻分壓器來實現。

VoltageScaler.png

使用兩個電阻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)通道。其余電路如下所示:

Circuit_Project_DVM_PIC16F688-520x450.jpg

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()

以上就是英銳恩單片機開發工程師分享的基于PIC單片機開發的數字電壓表。英銳恩專注單片機應用方案設計與開發,提供8位單片機、16位單片機、32位單片機、運算放大器和模擬開關。

黄金公主玩法与规则 4994901297967937796734295157433502198177471583213353331916959686969370273846211414466533155372158 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();