mikrocontroller.net

Forum: Compiler & IDEs Uart Problem beim auslesen


Autor: Daniel Maisner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel Maisner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vergessen:

mit
loop_until_bit_is_set(ADCSR,ADIF);
funktioniert gar nichts, scheinbar wird die Wandlung nie fertig und das
bit nicht gesetzt!?

Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Exakt dasselbe, was Patrick auch geschrieben hat. ;-)

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.