www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC - immer gleicher wert in ADCH???!


Autor: Burt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

hab heute versucht meinen AD-wandler am Mega128
zum laufen zu bringen. Der versuchsaufbau ist eigentlich ganz einfach:

Am Port-pin ADC0 wird eine spannung von 2,5V angelegt (poti).
Die Referenzspannung beträgt 5V und wird extern an Aref angeschlossen.
Nach einer Single-conversion soll der wert aus ADCH (nur 8bit) binär am

byteport A ausgegeben werden (8 leds angeschlossen)
In Assembler hab ich folgendes test-programm geschrieben:

ADMUX:  REFS1 + REFS2 auf low setzen (externe Uref an Aref)
        ADCLAR auf high setzen (lese nur das high-byte ADCH)

ADCSRA: ADEN auf high und die drei Prescaler bits auf high (prescaler
128) alles andere Low (kein ADIF)

bevor ich anfange zu lesen, werden MUX0 - 4 auf low gesetzt (Channel
ADC0).
anschließend wird das ADC start-bit gesetzt (ADSC) und per schleife
wird gewartet, bis ADIF
high wird. jetzt wird das ADC Data register (ADCH) ausgelesen und auf
port A ausgegeben.

--> Ich glaube der fehler liegt an der schleife. Gibt es einen befehl
mit dem man ein einzelnes bit abfragen kann (kein I/O)
    und je nach wert weiterspringt? z.B. jump if bit ADIF = 1 oder
sowas?
    hab sowas im instructionset nicht gefunden!

Danke, Burt

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sbrs/sbrc können deine Freunde sein...

...

Autor: Burt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
danke für die schnelle antwort.... hab diese befehle wohl überlesen
:-D

hab meine schleife jetzt umgeschrieben und immerhin leuchten jetzt nur
noch die ersten drei leds.... aber unabhängig von der spannung an
ADC0??

Danke, Burt

Autor: Burt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, mein Mega wird extern mit 16Mhz quarz getaktet....
drum hab ich eine teilung durch 128 gewählt...

16Mhz/128 = 125khz abtastrate?????!

Burt

Autor: Dennis Strehl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ldi r22, ADCH

ldi r23, 0xff
  out DDRA, r23

  out PORTA, r22"

Wenn ich das richtig sehe, wird so die Addresse von ADCH ausgegeben und
nicht der Wert, der in ADCH steht. ldi lädt immer nur eine Konstante (in
dem Fall die Addresse von ADCH) in ein Register.

"ldi r24, ADCSRA

loop:
sbrc r24, 6
jmp loop"

Ich glaub, das funktioniert so auch nicht, da mit ldi die Addresse
geladen wird. Du prüfst also in der Schleife ob ein Bit der Addresse
gesetzt ist und nicht ob ein Bit in dem Wert gesetzt ist.

I/O-Register kann man mit "in" und "out" lesen und schreiben, bei
Registern die im SRam liegen funktionieren nur "lds" und "sts"

MfG

Autor: Burt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Verdammt..... das war ja völlig daneben....
ihr müsst mich entschuldigen, bin noch keine Woche AVRler.... davor hab
ich nur 8051er programmiert....

Auf jeden fall funktioniert es jetzt wie ichs mir vorgestellt hab.

@Dennis: Danke für die bemühungen. Sehr gut erklärt, habs gleich
geblickt :-))))

Danke, Burt

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.