Friday, July 10, 2020

Using analog comparator module of ATMega32

Analog Comparator Module Of ATMega32 AVR

An analog module is integrated in ATMega32. It's useful for comparing two analog voltage inputs. Just like any conventional analog comparator IC, the built-in analog comparator module work in the similar way. In the case of ATMega32 there are two standard analog voltage inputs pins,
  1. a positive input AIN0
  2. and a negative input AIN1. 
Using analog comparator module of ATMega32 AVR ATmega LM358 LM311 Proteus Atmel Studio 7 C Microchip Atmel POT ADC Analog To Digital Converter
An example of using analog comparator module

The module compares between the potential of these two inputs. If the voltage fed to AIN0 is greater than the AIN1, it set the analog comparator output (ACO). 

Using analog comparator module of ATMega32
A simple analog comparator module without its complex logic parts.


Actually the analog comparator module of this device is more complex than the figure listed above.
For more options, the negative input pin AIN1 could be replace with on of the ADC input pin from ADC0 to ADC7. It depends on the application we cop with.

The analog comparator module could generate interrupt on output rising, falling and toggling. 

These are registers involves with the analog comparator module.

Using analog comparator module of ATMega32
Analog Comparator Control and Status Register


There are two more registers to select an alternative negative voltage input pin. But it's stored in the ADC module register and special IO function register (SFIOR). By default, both analog voltage input pin are AIN0 and AIN1.

I don't want to list all description of these registers because some features are not used here. For more technical details, please check the datasheet.

By default the ACD of ACSR is '0'. Hence the analog comparator module is turned on. To test the output status, we must use the ACO bit.

Programming For Analog Comparator In Atmel Studio 7

In this example, I use a simple way to compare between AIN0 and AIN1. If the analog voltage fed to AIN0 is greater than 2.5 V, the output LED connects to PC5 will set.

Atmel Studio C source code implementation is very simple.

#include <avr/io.h>
int main(void)
{
 //PC5 in output pin
 DDRC|=(1<<5);
     while (1) 
    {
    /*Test the ACO bit*/
  if(ACSR&0b00100000) PORTC|=(1<<5);
  else PORTC&=~(1<<5);
      }

Using analog comparator module of ATMega32
AIN0 varies the positive voltage while AIN1 hold a fixed voltage of 2.5 V. PC5 is set
whenever AIN0 is greater than AIN1.



3 comments:

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)