Hallo, Ich schlage mich nun schon die ganze Nacht und den halben Tag mit diesem Problem rum. Ich habe einen Temperatursensor am ADC Wandler meines AVRs. Bis jetzt habe ich einfach den freerun Modus angeschaltet und ab und zu mal die Werte eingelesen. Die temperaturen stimmten alle und ich war glücklich. Nun wollte ich aber auf den single conversion modus umstellen und immer die Kanäle umschalten. Nun zeigt er nur noch mist an, selbst, wenn ich alle sensoren abziehe. Wenn ich einen Sensor kalt mache, dann gehen alle anderen auch runter. Die ausgelesenen werte scheinen völlig beliebig zu sein. vielleicht mache ich was falsch. Hier der code, mit dem ich die werte auslese. Im Programm: ldi mp,0x01 out ADMUX,mp RCALL ADC IN SLOW,ADCL IN SHIGH,ADCH Zum Kanal setzen und aufrufen des unterprogrammes adc: LDI up,0b11000110 OUT ADCSR,up adcwait: IN up,ADCSR ;soll auf ende der conversation warten SBRC up,ADSC RJMP adcwait LDI up,0b10000110 ;0xE6 OUT ADCSR,up RET Danach lese ich mit: ldi mp,0x02 out ADMUX,mp RCALL ADC IN SLOW,ADCL IN SHIGH,ADCH den nächsten sensor ein. DAs klappt aber nun gar nicht. Bitte helft!
Hast du an folgendes Gedacht: Die allererste Wandlung des ADC ist ein "dummy", also Schrott. Die allererste Wandlung brauch 12 Takte mehr als eine Normale. Die Wandlungszeit ist bei Single-Conversion etwas länger. Hast du register doppelt? Dein Wandler kan vom CPU-Kern gestört werden, da kann man einen Rauschreduzierer einschalten. Wieso schaltest du den ADSC noch zusätzlich aus, nachdem die schleife eh nur abgebrochen wird wenn er '0' ist? Wie wird der Befehl aufgerufen LDI mp,0x02, ich sehe keine Sprungmarke davor? Kann es sein, dass dieser Befehl nie erreicht wird? Wieso benutzt du nicht die Interrupt-funktion, dann brauchst du diese Schleife nicht mehr? Gruß Chris
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.