Probleme mit ADC im Free Running Mode und ADMUX

Gast #38384
Hallo.

Ich hoffe nochmals auf Eure Hilfe. Bei meinem ersten Versuch hier zu
posten konnte mir leider keiner helfen, aber vielleicht ja jetzt.

Ich habe folgendes Problem:

Ein Unterprogramm soll hintereinander mehrere Spannungswerte
auswerten:


1.)Ausgangsspannung (PA0)
2.)Eingangsspannung (PA1)
3.)Ausgangsspannung (PA0)
4.)Spannung_an_Shunt_1 (PA6)
5.)Ausgangsspannung (PA0)
6.)Spannung_an_Shunt_2 (PA7)




Da dies zyklisch mit einem ganz bestimmten Takt geschehen soll,
betreibe ich den ADC im Free Running Mode und Interrupt. In der ADC_ISR
möchte ich nun synchron dazu die ADC_Kanäle ändern (bzw. einen Takt
vorher auf den gewünschten Kanal umstellen).
Ich initialisiere meinen ADC mit dem Kanal ADC0

ADC_ISR:

PUSH...
PUSH...
..

SBRS pruefbyte, ZUSTAND_BIT
RJMP zustand_inaktiv

IN temp, ADCL
IN temp, ADCH

LDI ZH, high(Tabelle)
LDI ZL, low(Tabelle)
ADD ZL, adc_channel
BRCC kein_ueberlauf_
INC ZH
kein_ueberlauf_:
IJMP

Tabelle:
RCALL Kanal_eingangsspg          ;Kanal auf PA1 umstellen
RJMP end_adc

RCALL Kanal_ausgangsspg          ;Kanal auf PA0 umstellen
RJMP end_adc

RCALL Kanal_spg_shunt1           ;Kanal auf PA6 umstellen
RJMP end_adc

RCALL Kanal_ausgangsspg          ;Kanal auf PA0 umstellen
RJMP end_adc

RCALL Kanal_spg_shunt2           ;Kanal auf PA7 umstellen
RJMP end_adc

RCALL Kanal_ausgangsspg          ;Kanal auf PA0 umstellen
end_adc:

IN temp_l, ADCL
IN temp_h, ADCH
SBR pruefbyte, ADC_STATUS

POP ...
POP ...
POP ...

RETI

Jetzt sollte es so sein daß der ADC beim ersten mal mit ADC0
initalisiert ist. Dann sollte er die Werte der Ausgangsspannung
einlesen den Kanal aud ADC1 umstellen, die ISR beenden, das
Unterprogramm aufrufen, die Spg. auswerten. Beim nächsten mal sollte er
die Eingangspg. einlesen, den Kanal auf ADC0 umstellen usw...

Eigentlich klappt ja alles, außer das der ADC nicht den gewünschten
Wert einliest obwohl ich doch vorher das Register ADMUX geändert habe.
Erst habe ich gedacht, daß der ADC zwei Durchläufe braucht um den Kanal
zu ändern, aber ich konnte da auch keine Regelmäßigkeit erkennen.

Vielleicht wisst Ihr eine Lösung für mein Problem, da ich den Fehler
einfach nicht finden kann.

MfG
Ralf

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.