ATmega8 ADC Beispiel mit Single Conversion

Dieses Code Beispiel für den ADC des ATmega8 zeigt die Funktion des Single Conversion Mode

electroicsplanet home electroicsplanet pagetree Sourcecode Examples electroicsplanet pagetree ATmega8 electroicsplanet pagetree ADC electroicsplanet pagetree Single Conversion

Beschreibung

Das Programm vergleicht den single conversion ADC Wert mit 512 und setzt den Digitalausgang PB0 beim Überschreiten der Schwelle. Eine ADC single conversion wird jeweils im main() gestartet. Anschliessend wartet der ATmega8 darauf, dass der ADC die Wandlung abgeschlossen hat. Diese Zeitpunkte werden durch das toggeln von PB1 angezeigt. Nachdem die Wandlung abgeschlossen ist, wird die nächste ADC single conversion gestartet und wieder auf deren Ende gewartet. Die Spannungsreferenz des ATmega8 ADC ist Vcc der Mikrocontroller teilt den ADC Clock durch 16, um bei einem Systemclock von 1MHz den ADC Cock auf 62.5kHz einzustellen.

Buchtippp:


AVR Mikrocontroller
Programmierung in C

C Sourcecode

#include <avr/io.h>

int main(void)
{

    DDRB = 0x03;                      // Set PB0 and PB1 as output

    
    ADMUX = (1<<REFS0);               // Set Reference to AVCC and input to ADC0
    ADCSRA = (1<<ADEN)|(1<<ADPS2);    // Enable ADC, set prescaler to 16
                                      // Fadc=Fcpu/prescaler=1000000/16=62.5kHz
                                      // Fadc should be between 50kHz and 200kHz
                                      // Enable ADC conversion complete interrupt


    ADCSRA |= (1<<ADSC);              // Start the first conversion
    
    for(;;)                           // Endless loop
    {

        while(ADCSRA &(1<<ADSC));     // Wait until conversion is finished

        PORTB^= 0x02;                 // Toggle PB1

        if(ADC > 512)                 // Is tht ADC vaue greater than 512?
            PORTB |= 0x01;            // Set PB0
        else                          // Is the ADC not greater than 512
           PORTB &= ~0x01;            // Reset PB0

        ADCSRA |= (1<<ADSC);          // Start the next conversion

    }                                 // main() will never be left

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

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

Signalplots

ATmega8 ADC Beispiel

Gelb: Digitaler Ausgang PB0 zeigt an, ob Analog IN > 512

Blau: Digitaler Ausgang PB1 zeigt "End of Conversion" an

Rot: Analoger eingang PC0 (ADC0)