Assembler Mehrere ADC Kanäle abfragen

TommyB

Team Bitschubse
17. Mai 2010
2.151
80
48
40
127.0.0.1 ;)
Sprachen
  1. C#
  2. VB.Net
  3. LunaAVR
  4. Assembler
  5. Python
Mag jetzt vielleicht blöd klingen, aber wie sagt man so schön? Es gibt keine blöden Fragen, nur blöde Antworten :D

Anyway, ich möchte/muss/will 2 oder 3 ADC Werte abfragen. Kontinuierlich, also immer ADC1, ADC2, ADC1, ADC2, ...
Nur wie ist das am sinnvollsten möglich?

Free running mode nebst Interrupt, im Interrupt den Kanal wechseln?
Oder doch anders? Weil im Datenblatt steht ne Menge drin aber so wirklich verstanden hab ich das jetzt nicht. Wenn ich das so mache bekomme ich immer das Ergebnis des vorherigen Kanals? Also ich hab vorher schon auf 2 gestellt, bekomm aber jetzt den Wert von 1?

Oder doch lieber als "normaler" mode, im Interrupt den Channel setzen und eine weitere Umwandlung "von Hand" starten?


Hat ja bestimmt schon mal einer von euch gemacht / analysiert :)
Geht ja nur um's Prinzip, das müsste ja bei allen Käfern der Serie das Selbe sein. Ich quäl hier nen Tiny13a :)
 
Soweit ich verstanden habe ist Dein Problem folgendes:
-im FreeRunningMode passiert bei kompletter Conversion folgendes:
--das Ergebnis steht in den Result-Registern
--das ADC-Complete-Flag wird gesetzt
--wegen freeRunningMode wird automatisch eine neue Conversion gestartet
--sofern aktiviert, wird der entsprechende IRQ ausgeführt (wo Du den Channel wechselst)

AFAIK tritt der Wechsel aber erst nach Abschluß der grad laufenden Conversion in Kraft.
Der freeRunningMode ist im Prinzip auch nur ein Autostart-Mode, der an das ADC-Complete-Flag gekoppelt ist. Man kann auch an andere Flags koppeln (ich hatte mal einen Timer-Überlauf (TOV) genommen).
mMn sollte das eigentlich so gehen - Du wechselt den Channel halt direkt nach dem Start der Conversion. Problematisch könnte das nötige schnelle "Umladen" der Sample&Hold-Stufe des ADC sein.
Alternativ halt ohne freeRunningMode - also in der Complete-ISR den Channel wechseln, die Results auslesen, und dann das ADC-Start-Bit setzen.

Halt nur mal so auf die Schnelle überlegt - für genaueres mußte auch ich ins DB schauen. Um welchen Controller gehts eigentlich genau? (AFAIK hat auch in dieser Hinsicht die NextGen (88er und co) diverse Änderungen bekommen...)
 
Hallo,
danke schonmal :)

Ja, so habe ich es auch erst mal gemacht, also im Interrupt Kanal einstellen und wieder neu starten.
Scheinbar läuft es auch ganz gut, werde das aber mal etwas ausgiebiger testen müssen.
Auch mit anderen Frequenzen etc., das Timing ist da doch etwas wichtiger als ich dachte :)

Ich hab jetzt den ATTiny13A im Einsatz, aber ich befürchte ich brauch n anderen. Mir gehen so langsam die freien Pins aus. Naja wird schon irgendwie
 
Wie gesagt, es sollte auch im FreeRunningMode gehen - Du stellst als erstes Channel 1 ein startest den ADC einmal, stellst dann gleich Channel 2 ein. Wenn der ADC den ersten fertig hat wird er sofort mit Channel 2 gestartet, Du liest in der ADC-fertig-ISR das Result zum Channel 1 aus, und setzt den Channel einen weiter. Von 2 auf 3.
Aber das DB vom Tiny13 hab ich mir jetzt noch nicht angesehen.
P.S.: wenn Dir der µC zu klein ist, wirst Du mit dem Tiny10 wohl auch nicht richtig glücklich werden (der ist ja mal niedlich - ich hab mir mal 5 davon gegönnt... bei 62ct pro Stück konnte ich nicht wiederstehen...
 
Muss ich mal schaun. Ich hab jetzt wegen akutem Pinmangel erstmal zum Mega168 gewechselt. Warum ist einfach: Den hatt ich noch da :)
Aber der Tiny könnte es werden, später :)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)