ATega8 ADC Free Running mit Interrupt
Mit diesem Code kann der ADC des ATmega8 im Free Running Mode mit Interrupt laufen gelassen werden.
Beschreibung Dieses Codebeispiel lässt den ATmega8 im Free Running Mode mit Interrupt laufen. Am Eingang ADC0 (PC0) wird eine Analogspannung vom ADC eingelesen. Ist diese grösser als 512 (Hälfte von 10Bit) wird der Digitalausgang, wird der Ausgang PB0 gesetzt. Der ADC läuft im Free Running Mode. Jedes mal wenn eine ADC Wandlung abgeschlossen ist, wird ein Interrupt ausgelöst. Dies wird durch ein Toggeln von BP1 angezeigt. Im Free Running Mode startet die nächste Wandlung jeweils automatisch. |
Please visit: the four |
C Sourcecode
#include <avr/io.h>
#include <avr/interrupt.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)|(1<<ADIE); // Fadc=Fcpu/prescaler=1000000/16=62.5kHz
// Fadc should be between 50kHz and 200kHz
// Enable ADC conversion complete interrupt
sei(); // Set the I-bit in SREG
ADCSRA |= (1<<ADSC); // Start the first conversion
for(;;); // Endless loop
// main() will never be left
return 0; // This line will never be executed
}
// Interrupt subroutine for ADC conversion complete
ISR(ADC_vect)
{
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
}
Download C-Sourcefile mit ASCII-Schema: C-Sourcefile mit ACII-Schema
Signalplots
Gelb: Digitaler Ausgang PB0 zeigt an, ob Analog IN > 512
|