www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit ADC im Free Running Mode und ADMUX


Autor: Ralf Meiberg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.