Gast
#331233
hallo
ich hab bei meinem mega16 mal den adc testweise in betrieb genommen.
nur leider ist das ergebniss immer 1023, egal ob 0,01V oder 4,99V
anliegt(an PORTA, 7). Die konfiguration muüsste eigentlich richtig
sein. ich habe als messspannungsquelle einfach nen 1KOHM poti
hergenommen, schleifer auf ADC7 und der rest auf gnd und +5V .
Unten ist mal der wichtigste teil des quelltextes:
wichtig, der untere teil ist nicht documentiert, da wird dann bloß noch
geschaut welcher wert in "balken" steht, damit die entsprechende
routine zur ausgabe aufgerufen werden kann.
==================================================
ldi temp, 0b01111111 ;Port A = Ausgang/eingang
out DDRA, temp
ldi temp1, 0b11100000
out DDRD, temp1 ;Port D = Ausgang, Eingang
cli ; Interrupts sperren
; _ADC_ einrichten
ldi temp, 0b00000111 ; Vorteiler einstellen (128)
out ADCSRA, temp ; und nach ADCSRA ausgeben
cbi ADCSRA, ADIE ; ADC Int ausschalten
cbi ADMUX, REFS1 ; AREF ext hernehmen
cbi ADMUX, REFS0
sbi ADMUX, 0 ; Kanal 7 hernehmen
sbi ADMUX, 1
sbi ADMUX, 2
cbi ADMUX, 3
cbi ADMUX, 4
sbi ADCSRA, ADEN ; ADC generell einschalten
rcall lcd_init ; Display hochfahren
rcall lcd_clear
loop: rcall auslesen ; ADWandlung aufrufen
rcall ausgabe
rcall warteschleife
rjmp loop
auslesen:
sbi ADCSRA, ADSC ; ADWandlung starten
ADC_busy: sbis ADCSRA, ADIF ; ADC noch busy?
rjmp ADC_busy
in SL, ADCL ; Daten auslesen
in SH, ADCH
ror SH ; auf 256 werte verkleinern
ror SL
ror SH
ror SL
mov WERT, SL ; ab das eigentliche Register
ret
ausgabe:
clr balken ; balken loeschen
ausgabe1:
subi WERT, 32 ; von WERT 32 abziehen
brmi count ; wenn negativ, dann Ende
inc balken ; balken hochzählen
rjmp ausgabe1 ; und nochmal
count:
ldi temp, 0x01
cp temp, WERT
breq balken1a
ldi temp, 0b00000010
cp temp, WERT
breq balken2a
ldi temp, 0b00000011
cp temp, WERT
breq balken3a
ldi temp, 0b00000100
cp temp, WERT
breq balken4a
ldi temp, 0b00000101
cp temp, WERT
breq balken5a
ldi temp, 0b00000110
cp temp, WERT
breq balken6a
ldi temp, 0b00000111
cp temp, WERT
breq balken7a
ldi temp, 0b00001000
cp temp, WERT
breq balken8a