Hallo, ich hab zwar eine Lösung gefunden, finde die aber nicht elegant. Aufgabe: Der Atmel soll kontinuierlich den ADC-Wert in einen best. PWM-Wert wandeln. Problem: Er führt genau 1ne Umwandlung nach dem Reset durch (eigentlich führt er dauernd Umwandlungen durch), zumindest sieht das aber von aussen so aus als ob er nur eine macht. Die GROSSGESCHRIEBENEN Kommentare gegen Ende der Datei sind die relevanten Stellen. Hoffe jemand kennt das Problem. Übrigens, grad noch getestet, im AVR Simulator tritt das Problem nicht auf.
Kann es sein, dass du dir beim Schalten der H-Brücke den Pull-Up von PC1 (dem Analogeingang) schaltest und damit den Analogwert verfälscht? Ich verstehe auch die Bitzugriffe in adccomplete (sbis adch,7 und sbic adch,7) auf adch und adcl nicht, soviel ich weiß sollte man auf adch (und ggf auf adcl) nur per IN zugreifen, damit sich das interne temporäre Zwischenregister nicht veralbert. Auch die Lesereihenfolge ist wichtig. Da der ADC mit Einzelkonversion arbeitet, muss in adccomplete adsc in adcsra für jede Messung neu gesetzt werden. ...
> Auch die Lesereihenfolge ist wichtig.
Yeah, danke, das wars!
Dadurch dass der letzte Lesezugriff auf ADCL (mit sbic ADCL,7) erfolgt
wird das Schreiben in ADC gesperrt! Ich hab nur ein "in temp, ADCH"
vor die retis geschrieben und es geht :-)
Auszug aus Datenblatt:
Once ADCL is read, ADC access to Data Registers is blocked. This means
that if ADCL has been read, and a conversion completes before ADCH is
read, neither register is updated and the result from the conversion is
lost. When ADCH is read, ADC access to the ADCH and ADCL Registers is
re-enabled.
Das erklärt auch warum es einmal nach dem Reset funktioniert.
Nochmals vielen Dank
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.