Forum: Mikrocontroller und Digitale Elektronik ATMega16 - ADC mit 2 Kanälen


von Mike (Gast)


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

von Karl H. (kbuchegg)


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.

von Mike (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.