ATmega16 ADC Free Running Mode
C Sourcecode Beispiel um auf dem ATmega16 den ADC im Free Running Mode zu betreiben.
Beschreibung Am Eingang PA0 (ADC0) wird eine Analogspannung angeschlossen. Der ADC des ATmega16 läuft im free running mode und vergleicht die Eingangsspannung mit 2.5V (halbe Referenzspannung Vcc). Im free running mode müssen die Wandlungen nicht einzeln ausgelöst werden, sondern der ADC wandelt selbstständig so schnell wie möglich. Nachdem eine ADC Wandlung gestartet wurde, wartet der Mikrocontroller, bis der ADC die Wandlung beendet hat. Ist ein eingelesener Wert grösser als 2.5V, wird der ausgang PB0 gesetzt. Der Mikrocontroller arbeitet damit als Komparator. |
Please visit: the four |
C Sourcecode
#include <avr/io.h>
#define ADATE 5 // Definition is missing in
// some Versions of AVR Studio
int main(void)
{
DDRB = 0x01; // Setup PB0 as output
ADMUX |= (1<<REFS0); // Set reference to AVcc
ADCSRA |= (1<<ADEN)|(1<<ADATE)| // Enable ADC, Enable auto Triggering
(1<<ADPS2)|(1<<ADSC); // Set prescaler to 16
// Fadc=Fcpu/prescaler=1000000/16=62.5kHz
// Fadc should be between 50kHz and 200kHz
// Start first conversion
for(;;) // Endless loop;
{
while(!(ADCSRA&(1<<ADSC))); // Wait until a conversion is finished
if(ADC>=512) // Compare the conversionresult with 512
PORTB |= 0x01; // If larger, set PB0
else
PORTB &= ~0x01; // If smaller, reset PB0
} // main() will never be left
return 0; // This line will never be executed
}
Download C-Sourcefile mit ASCII-Schema: C-Sourcefile mit ACII-Schema
Signalplot
Gelb: ADC Eingangsspannung
|