-
-
ADC Wandlerproblem mit ATmega32
Hallo zusammen!
Ich habe eine Anwendung in der 4 analoge Spannungen relativ schnell erfasst werden müssen um darauf zu "regeln". Es wird ein Pulsmuster erzeugt und in der Zeit, wärend der Timer läuft wird gemessen. Passt auch wunderbar!
Nun zum Problem ich habe den ADC im Free runing mode konfiguriert starte ihn einmal und mache dann in einem Sub
v=getadc(0)
w=getadc(1)
.
.
X=getadc(3)
gemessen wird zwar bei allen, aber nur adc 0 ist genau, bei den anderen 3 Eingängen erhalte ich zu stark schwankende Werte!
Laut Datenblatt muss ja beim Multiplexen definitiv die laufende Messung abgeschlossen sein, bevor umgeschaltet wird! Nur wie geht das mit Bascom? Wegen der extremen Ungenauigkeit ist die Auswertung so nicht brauchbar. Also ist die bisher verwendete Konfiguration wohl Mist...
Wenn ich die Eingänge in einem Testprogramm einzeln teste, misst jeder gleich gut, also liegt es wohl an dem Ablauf im Programm nur wie geht dem?
Danke schonmal für eure Hilfe
Gruß
Sven
-
Erfahrener Benutzer
Roboter Experte
Hallo,
du kannst in Free-Running-Mode nicht einfach den Kanal wechseln.
Dann musst du zumindest abwarten bis mit dem neuen Kanal mindestens
eine komplette Wandlung abgelaufen ist.
Warum benutzt du die free-running-Betriebsart ?
In deinem Anwendungsfall wäre es doch besser,
zuerst den gewünschten Kanal einzuschalten,
dann eine AD-Wandlung zu starten und nach Ablauf
das Ergebnis zu lesen.
Gruß Jan
-
Hallo Jan,
das wäre eigentlich auch mein Ziel, allerdings stehe ich etwas dem Schlauch, wie das mit Bascom umzusetzen ist. Single mode ist kein problem!
Würde das so klappen: single mode usw...bla bla
start adc
v=getadc(0)
stop adc
start adc
w=getadc(1)
stop adc
usw...
macht das Bascom dann richtig? Oder muss ich die Bits laut Datenblatt setzen?
Gruß
Sven
-
Erfahrener Benutzer
Roboter Experte
Hi Sven,
versuchs mal so:
-------------
dim V0 as word, V1 as word, V2 as word
config adc = Single , Prescaler = Auto
start adc
V0=getadc(0)
V1=getadc(1)
V2=getadc(2)
stop adc
--------------
Gruß Jan
-
Erfahrener Benutzer
Fleißiges Mitglied
Versuch doch mal folgendes:
v=getadc(0)
w=getadc(1)
w=getadc(1)
x=getadc(2)
x=getadc(2)
y=getadc(3)
y=getadc(3)
Dann wird nach dem Kanalwechsel erst ein Wert eingelesen, der aber nicht benutzt wird. Der nächste Wert sollte dann stimmen.
felack
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen