Spannung an ATMega8 ADC7 messen

Gast #275738
Lesenswert?

Hallo,
ich möchte eine Analogspannung von maximal 9V an dem Analogeingang ADC7
messen. Dazu habe ich den ATMega8 folgendermasen initialisiert:

  ADCSRA=(1 << ADPS1 |1 << ADPS2 |1 << ADEN |1 << ADFR);
  cbi (ADCSRA,ADPS0);
  ADMUX=(1 << MUX0 |1 << MUX1 |1 << MUX2);

Wenn ich nun aber das ADCW abfrage und mir seriell ausgeben lasse,
stehen dort nur Wirre Zeichen. Der UART-Befehl lautet wie folgt:

        UartPrintF("U: %2.1f",(ADCW*0.009775));

Habe ich etwas falsch initialisiert? Kann mir jemand nen Tip geben?
Gruß
Chris
Gast #275740
Lesenswert?

Ich habe den ATMega in SMD, also TQFP.
Das ADCW habe ich in einem anderen Projekt gesehen, hatte es zuvor auch
schon mit
(ADCL + (ADCH<<8))
probiert. War leider genauso!
Ich gehe doch recht in der Annahme das im Freerunning Mode ständig das
Register aktualisiert wird, oder? Ich muß also nur noch wie oben
beschrieben darauf zugreifen?!
Oder habe ich doch vergessen etwas zu initialisieren?
Gast #275741
Lesenswert?

Ich arbeite immer mit Interrupt, sonst kannst du nur abfragen wenn das
ADIF gesetzt ist, so lese ich es in der Doku.
Zum Probieren setze einmal ADLAR und frage nur ADCH ab.

Beschaltung des Mega ist sicher richtig?
Gast #275742
Lesenswert?

Ja, habe beide GND und VCC leitungen beschaltet sowie auch AGND, AVCC
und AREF...
Kannst Du mir vielleicht ein Beispiel für die Interruppt abfrage geben?
Was alles initialisiert werden muß.
Habe ich nämlich auch schon versucht, sprang aber gar nicht in den
Interrupt. Deshalb glaube ich ja das ich nen Initialisierungsfehler
mache!
Zu erwähnen ist vielleicht noch, ich arbeite mit dem internen
Oszillator auf 8Mhz. Ist ja wichtig für den Vorteiler...
Gast #275743
Lesenswert?

#include <avr/signal.h>
#include <avr/interrupt.h>

für single conversion
ADMUX=(1<<ADLAR)|(1<<REFS0)|(1<<REFS1);  /*ADC-Kanal, ADLAR, interne
Ref. einstellen 0xe0 */
  ADCSRA=(1<<ADEN)|(1<<ADIE)|(1<<ADPS1)|(1<<ADPS2)|(1<<ADSC);  /* ADC
initialisieren und starten */

abfrage
SIGNAL(SIG_ADC){      /*Interrupt auslösen wenn ADC-conversion 
komplett*/
Messwert=ADCH;         /*Register auslesen*/

einstellung ist Kanal 0, ergebnis linksbündig, interne Referenzstpg.,
ADC enable, ADC interrupt enable, Teilerfaktor, ADC Start

Da fällt mir gerade auf, wo startest du die Conversion?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren