ATmega16 ADC Free Running Mode

C Sourcecode Beispiel um auf dem ATmega16 den ADC im Free Running Mode zu betreiben.


Beschreibung

Am Eingang PA0 (ADC0) wird eine Analogspannung angeschlossen. Der ADC des ATmega16 läuft im free running mode und vergleicht die Eingangsspannung mit 2.5V (halbe Referenzspannung Vcc). Im free running mode müssen die Wandlungen nicht einzeln ausgelöst werden, sondern der ADC wandelt selbstständig so schnell wie möglich. Nachdem eine ADC Wandlung gestartet wurde, wartet der Mikrocontroller, bis der ADC die Wandlung beendet hat. Ist ein eingelesener Wert grösser als 2.5V, wird der ausgang PB0 gesetzt. Der Mikrocontroller arbeitet damit als Komparator.

Buchtippp:


AVR Mikrocontroller
In C programmieren

C Sourcecode

#include <avr/io.h>

#define ADATE 5                         // Definition is missing in
                                        // some Versions of AVR Studio
int main(void)
{
    DDRB = 0x01;                        // Setup PB0 as output

    ADMUX |= (1<<REFS0);                // Set reference to AVcc

    ADCSRA |= (1<<ADEN)|(1<<ADATE)|     // Enable ADC, Enable auto Triggering
              (1<<ADPS2)|(1<<ADSC);     // Set prescaler to 16
                                        // Fadc=Fcpu/prescaler=1000000/16=62.5kHz
                                        // Fadc should be between 50kHz and 200kHz
                                        // Start first conversion

    for(;;)                             // Endless loop;
    {
            while(!(ADCSRA&(1<<ADSC)))// Wait until a conversion is finished

            if(ADC>=512)                // Compare the conversionresult with 512
                PORTB |= 0x01;          // If larger, set PB0
            else
                PORTB &= ~0x01;         // If smaller, reset PB0

    }                                   // main() will never be left

    return 0;                           // This line will never be executed
}


Download C-Sourcefile mit ASCII-Schema: C-Sourcefile mit ACII-Schema

Signalplot

ATMega16 ADC Free Running Mode

Gelb: ADC Eingangsspannung
Blau: Digitaler Ausgang BP0