ATMega16 - ADC mit 2 Kanälen

Gast #729901
Lesenswert?
• ▲
▼
Hallo,

ich habe ein kleines C Programm für den ATMega16 geschrieben welches bei 
jedem Interrupt (Flanke an PD2) eine ADC am Analogeingang (PA0) 
vornimmt.

Das klappt wunderbar, ich initalisiere den ADC am Anfang und in meiner 
Endlosschleife springt er bei jeder Flanke am Port in meine 
ISR(INT0_vect) Routine. Dort lese ich einfach den Wert aus dem ADCL und 
ADCH und fertig.

Nun will ich das erweitern, sodass in der ISR jedes mal 2 Kanäle 
ausgelesen werden. Doch er wandelt mir die Werte doch automatisch bei 
jedem Interrupt. Ich müsste ja insgesamt 2 mal wandeln und den Kanal 
entsprechend umschalten. Wie funktioniert das bei der Benutzung mit 
Interrupt?

Gruss
#729914
Lesenswert?
• ▲
▼
> ich initalisiere den ADC am Anfang

Das wird dann nicht mehr gehen, da ja (wahrscheinlich) die
Kanalnummer ein Teil deiner Initialisierung ist.

Es gibt jetzt mehrere Möglichkeiten, jenachdem wie
das Timing an deinem INT0 aussieht.

* Wenn der INT0 regelmässig kommt.
  Du kannst nach wie vor das Ergebnis der letzten Wandlung
  abholen. Danach schaltest du den ADC auf den nächsten Kanal,
  startes die Wandlung und verlässt den INT0 Interrupt wieder.

  Wenn der nächste INT0 auftritt, dann hast du wieder das Ergebnis
  der vorhergehenden Wandlung da, etc. etc.

* Wenn der INT0 nur sporadisch und in nicht zu kurzen Abständen
  kommt.
  Einfach im Interrupt Handler beide ADC Kanäle hintereinander
  sampeln.

* ....

Dreh und Angelpunkt ist es aber, dass du irgendwann die Kanal-
umschaltung im ADMUX Register machen musst.
Gast #729936
Lesenswert?
• ▲
▼
Ok, danke.

Hatte ich mir schon gedacht dass man das nicht automatisieren kann. 
Benutze den ADC nun nur noch im Single Conversion Mode und starte den 
ADC in meiner ISR eben 2 mal mit jeweils nem anderen Kanal.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.