PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC Wandlung mit Atmega16



C1122345
18.04.2007, 11:55
Hallo!

Ich möchte in Assembler von 5 analogen Kanäle mit meinem ATmega16 fortlaufend einlesen, die werte fortlaufend wandeln (mittels ADC )und abspeichern. Als Startbedingung gilt ein Schwellwert, sobald der an einem der Kanäle überschritten ist, gehts insgesamt los.

Jetzt die Frage: Da ich blutiger Anfänger bin,
gibts zu sowas ein Tutorium, hab auf der Seite ansonsten nämlich nichts gefunden

Habe mich zwar schon mit Assembler beschäftigt aber ich habe zu wenig beispiele für adc anwendungen

Auch weiß ich nicht was für den Anwendungsfall besser ist: single conversion oder multiplexbetrieb?

würde mich über Hilfe sehr freuen!

Gruß
Stefan

wkrug
18.04.2007, 18:52
Ich würd das was Du vorhast in einer Interruptroutine plazieren.
Der A/D Wandler wird im Hauptprogramm für den ersten Kanal in single Conversation gestartet.
Wenn die Wandlung fertig ist löst der A/D Wandler einen Interrupt aus.
Der A/D Wandlerwert wird ausgelesen und vorerst mal abgespeichert.
Jetzt wird innerhalb der Interruptroutine auf den nächsten Kanal umgeschaltet und eine neue single Conversation gestartet.
Das Spielchen geht jetzt so lange weiter bis alle gewünschten Kanäle einmal dran waren.
Jetzt werden die temporärwerte ausgelesen und mit dem Schwellwert verglichen.
Ist einer der Werte über dem Schwellwert werden die Daten endgültig abgespeichert, ist kein Wert dabei, werden die Daten im temporären Speicher beim nächsten Durchlauf überschrieben.

Ob Du dann einen neuen Zyklus in der Interruptroutine startest, oder wieder im Hauptprogramm ist deine Entscheidung.

Ein Interrupt sollte imme so kurz wie möglich ausfallen.
Also keinen unnötigen Code, oder gar Zeitschleifen reinbasteln.

Alternativ kannst Du die Wandlerergebnisse auch im Hauptprogramm erfassen, dann musst Du aber das "Conversation Ready Bit" (Weiss jetzt nicht genau wie das wirklich heisst) pollen (=ständig abfragen).

Eine Wandlung erst starten, wenn ein Wert überschritten wurde kann nicht funktionieren, weil Du ohne A/D Wandlung natürchlich auch keine Wandlerergebnisse hast.