Uart Problem beim auslesen

Gast #178160
Hi,
ich habe ein kleines Programm, das mir den Wert aus der ADC-Wandlung
ans Uart übergeben soll. Aber irgendwie funktioniert die Wandlung so
nicht richtig, da ich immer "255" ans Terminal gesendet bekomme, aber
nur, wenn ich
loop_until_bit_is_clear(ADCSR,ADSC);
statt
loop_until_bit_is_set(ADCSR,ADIF);
schreibe.

Wäre es möglich (sofern der Code doch richtig ist) dass der ADC hinüber
ist? Ich wollte einfach nur von 0-Vcc mit einem Poti einstellen und am
ADC Pin abgreifen. GND und ADC-Vcc sind mit 100nF verbunden und sonst
(UART, Takt..) stimmt eigentlich auch alles.
Auf die kleine Induktivität, wie im Datenblatt, habe ich verzichtet -
kann es daran liegen?

Danke
Daniel
Angehängte Dateien:
Gast #178161
vergessen:

mit
loop_until_bit_is_set(ADCSR,ADIF);
funktioniert gar nichts, scheinbar wird die Wandlung nie fertig und das
bit nicht gesetzt!?
Gast #178162
Habe mir dein gelinktes Programm nicht weiter angeschaut, jedoch
folgende Kommentare:

ADIF zu prüfen macht in meinen Augen keinen Sinn. Wenn du ADIE gesetzt
hast, übernimmt deine ISR die Behandlung von ADIF. Ansonsten reicht es,
ADSC zu prüfen.
BTW: inp und outp sind veraltet, konsultiere dazu die WinAVR-Doku.
Im Zweifel würde ich sagen, dass dein Fehler in der Beschaltung des AVR
liegt (AVCC, AGND, AREF).

Alex
Gast #178163
while (ADCSRA & (0<<ADSC));

 (0 << ADSC) wird nicht das sein, was Du machen möchtest,
 ~(1 << ADSC) dürfte da richtig sein...

Hab aber auch nur überflogen...
Gast #178164
@ OldBug

Man setzt doch ADSC, um eine Konvertierung zu starten. ADSC wird mit
dem Abschluss der Konvertierung gelöscht.
Also muss geprüft werden.

while (ADCSRA & _BV(ADSC));

Alex
Gast #178166
Hm, nicht ganz, ich hatte aus (0 << ADSC) geschlossen, daß er ein Bit
auf "0" Prüfen möchte. Ich habe - wie gesagt - nur überflogen. Das
Bitwise-Not muss dann wohl weg...

Also:

while(ADCSRA & _BV(ADSC));

oder

while(ADCSRA & (1 << ADSC));

Ist beides korrekt, aber mein Vorschlag

while(ADCSRA & ~(1 << ADSC));

würde genau das Gegenteil liefern...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.