Saturday, June 6, 2020

Making a simple +5 V voltmeter with ATMega32 ADC module

In the previous post, we have introduce about the ADC module of ATMega32. Actually the maximum reference voltage of the ADC is +5 V in usual. From this concept we can measure an input analog voltage input to any ADC channel at +5 V full scale reading.

The reading ADC value in the single ended conversion could be obtained from:
Making a simple +5 V voltmeter with ATMega32 ADC module
Reference voltage VREF is normally +5 V. Input voltage must not exceed +5 V.

To calculate the voltage, we can obtain it from:
Making a simple +5 V voltmeter with ATMega32 ADC module 

In this example, I use ADC0 to read an analog input voltage fed from a POT. The POT varies an analog output voltage from 0 V to +5 V DC. The MCU displays the reading result of the voltage from 0.0 V to 5.0 V.

Making a simple +5 V voltmeter with ATMega32 ADC module
ADC0 read the input analog voltage. PortC and PortD drive a two-digit
SSD. The voltage reading is from 0.0 V to 5.0 V.

Source code is here:

#include <avr/io.h>
#define  F_CPU 4000000UL
#include <util/delay.h>
int main(void)
{ float voltage;
 char _voltage;
 char ssd[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,
  0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
    //PortC as output
    DDRC=0xFF;
    //PortD as output
    DDRD=0xFF;
    //PA0 or ADC0 as an analog input
    DDRA=0;
    //Turn on the ADC module
    ADCSRA|=(1<<ADEN);
    while (1)
    {
     //Start the conversion
     ADCSRA|=(1<<ADSC);
     //Wait for the completion
     while((ADCSRA&(1<<ADSC))==1);
     /*Convert ADC to voltage*/
     voltage=(ADCL+(ADCH<<8))*5.0/1024;
  voltage*=10;
  /*convert float to SSD data*/
  _voltage=(char)voltage;
  /*Displaying the Data*/
  PORTD=0x00;
  PORTC=ssd[_voltage/10]|0x80;
  PORTD=0x01;
  _delay_ms(10);
  PORTD=0x00;
  PORTC=ssd[_voltage%10];
  PORTD=0x02;
  _delay_ms(10);
    }
}

Making a simple +5 V voltmeter with ATMega32 ADC module
The ADC reading is 2.5 V analog voltage.

Back to main tutorial page ATMega32 tutorials in C with Atmel Studio 7.




No comments:

Post a Comment

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (56) AVR (57) CCS PICC (28) DAC (1) DHT11 (2) Display (105) Distance Sensor (3) DS18B20 (3) dsPIC (2) dsPIC30F1010 (2) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (67) Interrupt (19) Keil (5) Keypad (10) LCD (47) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (71) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (6) PCD8544 (3) PCF8574 (5) PIC (107) PIC12F (2) PIC16F628A (2) PIC16F630 (1) PIC16F716 (3) PIC16F818 (10) PIC16F818/819 (2) PIC16F84A (15) PIC16F876A (1) PIC16F877A (9) PIC16F88 (1) PIC16F887 (60) PIC18 (19) PIC18F1220 (4) PIC18F2550 (3) PIC18F4550 (12) PWM (11) RTC (8) Sensor (10) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)