ADC - keine reaktion?

Gast #115342
HI,
ich danke allen, die mir geholfen haben.
Ich habe mir nochmal das Datenblatt angeguckt. Ich denke ich verstehe
jetzt sehr gut, wie das ganze Teil funktioniert.
Aber leider kriege ich von dem ADC keinen Wert. Weiss jemand, warum das
nicht funktioniert?
Ich habe den ADC so eingestellt das er im Freilaufenden MODUS arbeitet
und der Teilungsfaktor beträgt 8. (1MHz / 8 = 125kHz)
Ich habe einfach nur zum Test an PortB 8 LEDs angeschlossen und an PIN
20(ADC0) einen Potenziometer mit 100kOhm das an +5V und Masse
angeschlossen ist.
Mein Assembler-CODE sieht so aus:

.include "tn26def.inc"

LDI r16, 0b11111111
OUT DDRB, r16

LDI r16, 0b00000000
OUT ADMUX, r16

LDI r16, 0b11100011
OUT ADCSR, r16

LOOP:

IN r16, ADCL
IN r17, ADCH

ADD r16, r17

OUT PORTB, r16

RJMP LOOP

Habe ich was vergessen?

Sencer.
Gast #115345
komische Sicherheit, du addierst da zwei 8 Bit Register, von denen eines
aber eigentlich eine höhere Wertigkeit hat. Das ergibt einfach recht
wenig Sinn...
Gast #115346
Naja, sollte wieso nur ein Test-Code sein. ADCL beinhaltet 8 bits und
das andere Register 2 bits.
Was ist den nun mein fehler oder was habe ich vergessen?
Gast #115347
Hi!

Mach mal alles am ADC0 weg und probier mal folgendes:
Von +5V zum ADC0 (Pin 20) einen Widerstand mit 10K.
Das Poti machst Du vom ADC0 zur Masse.
Je höher der Widerstand am Poti je höher der ADC-Wert.

Den Code probierst Du mal wie folgt:

.include "tn26def.inc"

LDI r16, 0b11111111
OUT DDRB, r16

LDI r16, 0b00100000       ;ADLAR-Bit setzen.
OUT ADMUX, r16

LDI r16, 0b11100011
OUT ADCSR, r16

LOOP:

IN r16, ADCH              ;ADC-Bits 2 - 9 sind jetzt in R16

COM r16                   ;Dadurch leuchtet eine LED wenn ein ADC-Bit 1
ist.

OUT PORTB, r16

RJMP LOOP

Durch das setzten von ADLAR auf 1 sind die ADC-Bits 2 - 9 in ADCH und 0
und 1 in ADCL an den Bit-Nr. 6 und 7 (left adjusted).

Gruß
Andi
Gast #115349
Es funktioniert tadellos.
Mit meinem CODE hätte es bestimmt auch funktioniert, ich habe einfach
nur vergessen, das Bit7 an PORTB gleichzeitig der RESER PIN ist. Das
wurde über die LED auf Masse gelegt. MASSE = Programmier MODUS.
Anfänger fehler...
Naja, jetzt geht es.
Danke für deine Hilfe.

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.