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 |
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
Gelb: Digitaler Ausgang PB0 zeigt an, ob Analog IN > 512
|