ATmega8 ADC Beispiel mit Single Conversion
Dieses Code Beispiel für den ADC des ATmega8 zeigt die Funktion des Single Conversion Mode
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. |
Please visit: the four |
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
Gelb: Digitaler Ausgang PB0 zeigt an, ob Analog IN > 512
|