ADC Pinwechsel

Gast #173225
Hallo! Ich arbeite mit einem Atmega 32, 16 MHz. Ich möchte an zwei Pins
des ADC nacheinander Spannungen einlesen. Die Referenzspannung ist
extern an AREF 5V. Wenn im Programm nur ein Pin benutz wird
funktioniert die Wandlung einwandfrei. Wenn ich jedoch gleich nach der
Wandlung am ersten Pin und zueisung des Ergebnisses an die
entsprechende Variable auf den nächsten Pin wechsele und Wert einer
anderen Variable übergebe enthalten beide Variablen den Wert der
zweiten Wandlung. Der Quelltext befindet sich im Eingang. Muss ich
vielleicht eine Funktion einbauen, die wartet bis ADC das erste mal
ausgelesen wurde und dann erst mit der zweiten Wandlung beginnen?

Danke!
Angehängte Dateien:
Gast
Direkt nach dem Start, steht natürlich noch das Ergebnis der vorherigen
Wandlung im Puffer.

Du must schon testen, ob die Wandlung beendet ist oder ein
entsprechendes delay einfügen.


Peter
Gast
Wie kann ich das testen? Ich nehme an mit der Überprüfung von ADIF?
Hab ich eben versucht:

while(ADIF!=1){}

Hier bleibt das Programm aber scheinbar in einer Dauerschleife hängen.
Laut Datenblatt müsste ADIF aber gesetzt sein sobald die Wandlung
beendet ist.
Gast
Hi easy,

ADIF ist in einer deiner include-Files mit Sicherheit als 4 definiert,
weil es das vierte Bit im Register ADCSRA ist. Es kann also nie zu 1
werden und deine Abfrageschleife wird demzufolge niemals verlassen
werden.
Prüfe einfach, ob das vierte Bit (ADIF) im Register ADCSRA gesetzt
ist.

while(!(ADCSRA & ADIF));

Gruß
Schmidle
Gast
ADMUX=....//Kanal,VrefType
ADCSRA.6=1;
while (ADCSRA.6);
ADCSRA|=0x10;
return ADCW;

x.x wird bei deinem Compiler wahrscheinlich nicht unterstützt, musst
also die sonst übliche Schreibweise nehmen.
Gast
@Schmidle:
Danke hat geklappt die Dauerschleife bin ich jetzt los!

@crazy horse:
Was ist genau gemeint mit <<while (ADCSRA.6);>>
Soll das überprüfen ob ADSC (Start Conversion) gesetzt ist? Wenn ich
dies versuche <<while(ADCSRA & ADSC)>> lande ich wieder in einer
dauerschleife
Gast
Hallo! Ich habe immer noch das Problem , dass sich der Wert einer
wandlung auch in die Variablen reinschreibt in der eigentlich die Werte
der anderen Wandlung annehmen sollte. Das warten auf beendigung der
jeweiligen Wandlung hab ich durch die Zeile
<<while(!(ADCSRA&(1<<ADIF)))>> meiner Meinung nach sicher gestellt.
Kann mir jemand helfen?
Danke easy
Gast
Hallo! Hab soeben festgestellt dass es so gar egal ist in welcher
Reihenfolge im Programm ich die Wandlungen an den Pins durchführe.
Immer der Pin mit der höchsten Ziffer ist bestimmend. Also Wenn ich zum
Beispiel am Pin 0 und an Pin 4 arbeite, wird immer der Wert von Pin 4
für beide übernommen. Kann damit jemand was anfangen?
Danke!
Gast
Hallo,
hast Du nach der ersten Wandlung und dem Auslesen des Ergebnisses auch
ADCSRA = (1<<ADIF); geschrieben, um das ADIF zu löschen? Wenn Du es
nämlich nach der ersten Wandlung nicht per Hand löschst (wenn Du es
über ISR machst, tut die es für Dich), dann bleibt ADIF = 1 und es
ändert nichts an Deiner Abfrage, d.h. ADIF steht noch von der
vorherigen Wandlung auf "1" und die Bedingung ist irrtümlich
erfüllt.
Gruß
Lutz

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.