ATmega8 ADC Code Example für Free Running

Dieses Code Example für den ATmega8 ADC sampelt im Free Running Mode


Beschreibung

Dieses Code Example vergleicht den ADC Wert des ATmega8 mit 512. Ist er grösser, wird der Digitalausgang PB0 auf high gesetzt. PB1 zeigt bei jeder Flanke an, wann der ADC-Wert verglichen wurden. Zwischen zwei Wandlungen treten mehrere Flanken auf BP1 auf. Die Spannungsreferenz des ADC ist Vcc. Der ADC Clockprescaler teilt den 1MHz clock durch 16 auf 62.5kHz. Die erste Konversion muss mit dem ADSC Bit gestartet werden. Anschliessend läuft der ADC automatisch weiter.

Please visit: the four

ampel

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<<ADFR)|(1<<ADEN)      // Enable ADC, set prescaler to 16
            |(1<<ADPS2);              // Fadc=Fcpu/prescaler=1000000/16=62.5kHz
                                      // Fadc should be between 50kHz and 200kHz


    ADCSRA |= (1<<ADSC);              // Start the first conversion
    
    for(;;)                           // Endless loop
    {                                 // main() will never be left

        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
    }

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

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

Signalplots

Code Example für ATmega8 ADC Free Running

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

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

Rot: Analoger eingang PC0 (ADC0)