Hallo, arbeite mit einem Atmega8 (AVR) und möchte 3 analoge Kanäle nacheinander einlesen. Mit einem Kanal geht das super aber mit mehreren finde ich leider keine Lösung . Interruptverarbeitung wäre bevorzugt. In den Beispielen habe ich nichts gefunden. Ein Beispiel wäre toll. Danke schon mal im voraus.
Wo ist den Dein Problem? Der Interrupt holt nur die Werte aus den ADC und dazwischen muss doch nur Multiplext werden.
Hallo, mein Problem ist wie ich die ausgelesenen Werte den Ports zuordnen kann. Das ADCH und ADCL Register ist doch Puffer für jeden Port. Könntest du mir ein Beispiel geben ? Danke
>mein Problem ist wie ich die ausgelesenen Werte den Ports zuordnen kann.
Du weißt doch wohl was du vorher in ADMUX reingeschrieben hast? also!
>>mein Problem ist wie ich die ausgelesenen Werte den Ports zuordnen kann. > Du weißt doch wohl was du vorher in ADMUX reingeschrieben hast? also! Du könntest sogar ADMUX einfach wieder auslesen :-o
Lothar Miller schrieb: >>>mein Problem ist wie ich die ausgelesenen Werte den Ports zuordnen kann. >> Du weißt doch wohl was du vorher in ADMUX reingeschrieben hast? also! > Du könntest sogar ADMUX einfach wieder auslesen :-o Wobei dieser Wert aber nicht zwingend der Kanal ist, der gerade gemessen wurde: Wenn ADMUX hinterher (also nach dem Start der Messung) beschrieben wurde, dann wird der Wert in ADXMUX erst mit dem Start der nächstes Messung aktiv. Dies kann man ausnutzen wenn man den ADC im Freerunning Mode betreibt und trotzdem mehrere Kanäle wandelt. Davon würde ich aber erstmal abraten, sondern für den Anfang den ADC immer per Hand nach dem Setzen des ADMUX neu starten.
> Wenn ADMUX hinterher (also nach dem Start der Messung) beschrieben > wurde, dann wird der Wert in ADXMUX erst mit dem Start der nächstes > Messung aktiv. Oh, das ist ja extrem böse... :-/ Zudem steht es genau invertiert im DB:
1 | the user cannot tell if the next conversion is based on |
2 | the old or the new settings. |
Von der aktuellen Wandlung steht da gar nichts, diesen Umkehrschluss muß man selber implizieren.
Lothar Miller schrieb: > Zudem steht es genau invertiert im DB: >
1 | > the user cannot tell if the next conversion is based on |
2 | > the old or the new settings. |
3 | > |
Ja, das ganze ist etwas tricky, daher rate ich, wie oben schon geschrieben, davon ab ADMUX im Freerunning Mode zu ändern, wenn man nicht genau weiß was man macht. Der Haken ist nämlich dieser Satz:
1 | ADMUX can be safely updated in the following ways: During conversion, minimum one ADC clock cycle after the trigger event. |
Man muss ausreichend lange warten (nämlich mindestens einen ADC Takt nach dem Start der Umwandlung), allerdings kann man nicht exakt sagen wie lange das ist, denn man kennt den aktuellen Stand des ADC Prescaler nicht. Bei dem ADC gibts noch mehr Gemeinheiten rund um ADMUX in denen das Datenblatt etwas abweichend von der Realität ist. Irgendwo hatte glaube ich Jörg Wunsch da mal etwas erwähnt, irgendwas was den Zeitpunkt des Samplevorgangs angeht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.