mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik aktuellen ADC-Wert per UART übertragen


Autor: Alex M. (masterix)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forummitglieder,

momentan experimentiere ich mit einem atmega8 µC auf einem Pollin 
Entwicklungsboard.Ich versuche erfolgslos einen aktuell gewandelten 
AD-Wert per UART auf dem Hyperterminal darzustellen.

Mein Programm soll 15 mal das aktuelle low Byte des ADC über UART 
senden.
Über einen Poti ändere ich den zu wandelnden analogen Spannungswert am 
µC-Eingang.

Ausgabe am Hyperterminal:
-------------------------
Es werden stets 15 gleiche Zahlen ausgegeben, wenn ADCL an UDR übergeben 
wird. Nach dem Reset des µC ändert sich diese Zahl.
Übergebe ich dem UDR das high Byte des ADC, so ändern sich die 15 Zahlen 
sofort je nach Potistellung.

Übrigens das Tutorial zu den beiden Themen UART und ADC habe ich mir 
angeschaut und auch das auslesen des ADCW behebt mein Problem nicht.


Wieso ändern sich im HT die übertragenen Werte des ADCL nicht sofort, 
wie bei dem ADCH, sondern erst nach dem RESET?
Ist eventuell ein Fehler in meinem Code?
Kann jemand helfen?

Danke im Voraus.

PS: Bin kein µC Profi. Arbeite mich gerade durch das Tutorial.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du muss auf jeden Fall das H-Byte vom ADC auslesen (auch wenn du es 
nicht brauchst) sonst ist der ADC 'blockiert'.

MfG Spess

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>PS: Bin kein µC Profi. Arbeite mich gerade durch das Tutorial.
Sonst würdest du ja auch nicht zu diesem Thema eine Frage stellen...

>UDR=x+0x30;  //Ausgabe von ADCL + 0x30 für spätere Anwendung
Lass das 0x30 erst mal weg.

Ich vermute, dass du Probleme mit dem Delay hast. Ob das wirklich noch 
5000ms bei der Taktfrequenz hinbekommt, kann ich nicht sagen, da ich es 
nie benutze.
Lass es doch einfach mal weg und lass dir statt der 15 Mal dauernd Werte 
ausgeben.

Noch was viel besseres: Der Wert des ADC wird erst beim Auslesen des 
ADCH-Registers wieder geändert.
Wenn man nur 8bit-Messungen machen will, dann sollte man das ADLAR-Bit 
ensprechend behandeln und nur das obere ADC-Byte auslesen.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex.

Datenblatt S. 198, oberer Absatz.

Grüße.

Autor: Alex M. (masterix)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Klasse. Es funktioniert.
Allen Vielen Dank für die promte Antwort.

Fehlerquelle:
-------------
Bei dem Zugriff auf einen 10 Bit AD-Wert über 2 Register (ADCL und ADCH)
muss nach Datenblatt des ATMEGA8 zunächst das ADCL und dann das ADCH 
ausgelesen werden. Das war mein Fehler. Andersherum wird scheinbar 
bereits nach dem Auslesen des ADCH das gesamte Register ADC gesperrt 
(access re-enable S.198).
Hoffe, dass ich das so richtig verstanden habe.

Mein aktuelles Programm gibt nun den aktuell gewandelten 10 Bit AD-Wert 
(counts) dezimal im Hyperterminal wieder.

Allen ein schönes WE.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Andersherum wird scheinbar bereits nach dem Auslesen des ADCH das gesamte 
>Register ADC gesperrt

Gesperrt wird das Register, wenn man das ADCL ausliest, damit der Wert 
im ADCH auch zum ADCL passt.
Sobald ADCH ausgelesen wurde, kann das Register wieder (durch den ADC) 
beschrieben werden bzw. wenn man nur das ADCH ausliest.

Wenn man nur 8Bits-breite ADC-Werte braucht, setzt man das ADLAR-Bit und 
liest dann nur das ADCH-Register aus. (Hatte ich ja oben schon 
geschrieben...).

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.