PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega16 / 16 Mhz / ADC Code beispiel



Sany
26.12.2009, 01:22
Hallo,

Ich versuche mich gerade an der Programmierung mit dem Beispielcode für den Atmel ADC.

Ich möchte von ADC6 (PA6) den Wert meines Temperatur Sensors (KTY81) einlesen.

Mein Atmel läuft mit Externer ACC von +5V, mit 16 Mhz. Nun hab ich den Teilungsfaktor 32 Eingestellt, sowie auch die Referenzspannung auf ACC eingestellt, stimmt das in etwa?



uint16_t ReadChannel(uint8_t mux)
{
uint8_t i;
uint16_t result;

ADMUX = mux; // Kanal waehlen
ADMUX |= (1<<REFS0); // interne Referenzspannung nutzen

ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); // Frequenzvorteiler
// Setzen auf 32!
// setzen auf 8 (1) und ADC aktivieren (1)

/* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while ( ADCSRA & (1<<ADSC) ) {
; // auf Abschluss der Konvertierung warten
}
result = ADCW; // ADCW muss einmal gelesen werden,
// sonst wird Ergebnis der nächsten Wandlung
// nicht übernommen.

/* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
result = 0;
for( i=0; i<4; i++ )
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while ( ADCSRA & (1<<ADSC) ) {
; // auf Abschluss der Konvertierung warten
}
result += ADCW; // Wandlungsergebnisse aufaddieren
}
ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2)

result /= 4; // Summe durch vier teilen = arithm. Mittelwert

return result;
}


Nun meine Frage, kann ich dann mit ReadChannel(6) meinen ADC6 auslesen? :)

Danke für eure Antworten.

Hubert.G
26.12.2009, 09:34
Ja, sollte so funktionieren.
Es ist aber nicht notwendig den ADC zu deaktivieren, damit ersparst du dir auch die weiteren Dummy Messungen.
Bei single conversion läuft er ohnehin nur ein mal.

X-Ray
27.12.2012, 23:06
Ja, warum so kompliziert? Versuchs mal mit dem Code, den du unter
http://www.electronicsplanet.ch/mikrocontroller/avrcodesammlung/ATmega16ADCindex.htm

findest