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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.