Forum: Mikrocontroller und Digitale Elektronik ADC - keine reaktion?


von Sencer (Gast)


Lesenswert?

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.

von Thomas Burkhardt (Gast)


Lesenswert?

Hi,

was soll eigentlich die Addition von r16 und r17 bewirken?

von Sencer (Gast)


Lesenswert?

Das habe ich einfach nur zur Sicherheit in den CODE geschrieben, damit
die LEDs auch wirklich was anzeigen.

von Thomas Burkhardt (Gast)


Lesenswert?

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...

von Sencer (Gast)


Lesenswert?

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?

von Andi (Gast)


Lesenswert?

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

von Sencer (Gast)


Lesenswert?

Danke sehr,
werde ich gleich mal ausprobieren.

von Sencer (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.