Forum: Mikrocontroller und Digitale Elektronik AT90S4433: Problem mit ADC


von Frank Simon (Gast)


Lesenswert?

Hallo,
(Vorweg: ich hab schon die Threads mit der gleichen Problematik
gelesen)
Bei mir arbeitet der ADC im Grunde korrekt, aber bei bestimmten
Spannungswerten kommen keine konstanten Werte, sondern z.B. die Codes
34 und 220 (dez.) in erratischer Abfolge. Ich habe schon AVCC mit
L=100uH und 10uF(Tantal) abgeblockt. Für ARef hab ich schon VCC und
AVCC probiert, auch schon über 1k abgeblockt. Aber das scheint daran
nicht zu liegen. Ich könnte jetzt ja mein Programm listen, aber daran
kanns ja wohl nicht liegen, zumal ich den MC nach dem Wandlungsstart
schlafen lege. (Sleepmode Idle), und ja ansonsten scheinbar alles
funktioniert. Das einzige, was mir noch eingefallen ist: ich habe
nicht, wie Atmel empfiehlt, eine Groundplane überall, das liegt daran,
dass der ganze Aufbau noch recht freiluftmäßig ist.
Hat jemand von Euch eine Idee, was ich falsch mache?
mfg
Frank

von Frank Linde (Gast)


Lesenswert?

Hallo Frank,

hast Du Dir mal das Signal und die Versorgungsspannungen während dieser
Effekte direkt an den Controllerpins mit dem Oszilloskop angesehen? Wenn
da alles sauber ist, liegt es vielleicht doch an der Software. Welcher
Art ist denn das zu messende Signal?

Gruß, Frank

von Frank Simon (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
1.an ein Oszi komme ich wg. Ferien leider erst wieder Montag, Mist!
2.Die Testspannung hab ich mit nem Poti zwischen 0V und VCC
abgegriffen.
3.Software siehe Anlage, wer nicht alles durchkauen will: Essentials
siehe unten.
Für Hilfe wäre ich dankbar,
Frank

; Initialisierungen nach einem Reset:
reset:
...
clr temp      ;Kanalwahl=0 und
out ADMUX,temp    ;Vcc als Referenzspannung.
ldi temp,(1<<ADEN)+(1<<ADIE)+ADCdiv64  ;125kHz->112us
out ADCSR,temp
ldi temp, 1<<SE +0<<SM  ; Sleep ermöglichen, Sleepmode = Idle
out MCUCR, temp
...
In der Empfangs-ISR des UART:
...
clr temp
out ADMUX, temp      ;Kanalwahl
cbi DDRC, 0
cbi PORTC, 0
ADConv:
sbi ADCSR, ADSC      ;Wandlung starten
sleep          ;startet auch die Wandlung im Idle-Mode
...
reti
...
; A-D-Converter Conversion Complete Interrupt
ADCI:
in temp, ADCL
in send, ADCH
rcall transmit
mov send, temp
rcall transmit
reti
...
; UART: Senden eines Bytes. Kein Interrupt, es wird gepollt, bis das
; Datenregister frei ist.
transmit:
sbis UCSRA,UDRE     ; Warten, bis UDR bereit ist
rjmp transmit
out UDR, send
ret
...
; Hauptprogramm-Schleife:
main:
loop:
sleep
rjmp loop

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.