www.mikrocontroller.net

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


Autor: Mike (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Mike (Gast)
Datum:

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

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.