Hallo, ich habe ein programm geschrieben, welches zwei leds über zwei Vergleichsregister (OCR1A/OCR1B) steuert/dimmt. Die LEDs fangen gleichzeitig an hinauf zu dimmen. Nun ab einen bestimmten Punkt verzögert eine LED um einen Schritt. Es wird nun sauber weiter hinauf gedimmt aber die eine LED ist natürlich einen Schritt später fertig. Ich habe OCR1A und OCR1B vertauscht und mir ist aufgefallen dass es nur bei OCR1A auftritt. Anschleißend habe ich einen neuen Atmega16 ausprobiert, das Problem ist geblieben. Nun komme ich nicht mehr weiter und bitte um Hilfe.
Warum schickst Du die Projektdatei? Mit der kann in dem Zusammenhang keiner was anfangen, weil die keinen Quellcode enthält.
> out OCR1AL, DimWertL ;gib DimWertL in OCR1AL aus > out OCR1AH, DimWertH ;gib DimWertH in OCR1AL aus Du beachtest die Zugriffsreihenfolge beim Schreiben der Compare-Register nicht! Beim Schreiben von 16-Bit-Registern der Timer muss grundsätzlich das High-Byte zuerst geschrieben werden.
Info: Datenblatt (aktuelle Version von 08/07) z.B. auf Seite 92, Abschnitt "Accessing 16-Bit Registers"...
da ist irgendwie nichts gescheites rausgekommen. Ich habe auch nachgeschaut, ich kanns mir nicht erklären aber er schreibt den high wert zuerst, soweit ich dass in AVR Studio überblickt habe.
> aber er schreibt den high > wert zuerst, soweit ich dass in AVR Studio überblickt habe. Warum sagst Du nicht gleich, dass Du das im Simulator machst? Der Simulator hat einige Macken, was die 16-Bit-Timer angeht. Zitat aus der Hilfe: "16-bit Timer/Counters on all devices have several problems with PWM, prescaler and output compare. Output compare registers are not buffered properly."
Als ich die high werte zuerst geladen habe haben sich die led nicht sauber gedimmt. wenn ich die low werte zuerst lade dimmen sie sauber nur dass ocr1A mittendrin die Dimmstufen um einen Schritt verzögert ausgibt. Der ocr1B macht es sauber(geprüft auf dem Board). Es kann auch sein dass ich mehrere Fehler drin habe und sie sich so ausgleichen. Ich habe erst angefangen zu "programmieren"
Stefan wrote: > hast du icq? > dann könnte ich dir das im video zeigen Nein, hab ich nicht. Hast Du es mittlerweile noch mal im realen System ausprobiert?
ja, schon aber die Abfolge der Helligkeiten der Leds ergiebt irgendwie keinen Sinn. Ich hab die werte auch umgedreht 2,4,8 usw. auch hierbei ist nichts brauchbares herrausgekommen. Im Internet habe ich auch gelesen dass das high Byte zuerst geladen werden muss. Andersherum gings eben bei mir besser :-D. Was ich überhaupt nicht verstehe, warum arbeiten im realen System OCR1A und OCR1B nicht "geich"
1 | > ldi r16, 0x03 ;Z�hler setzen, jetz fangt er mit der |
2 | > out TCNT1H, r16 ;Hauptschleife zu z�hlen an |
3 | > ldi r16, 0xFF |
4 | > out TCNT1L, r16 |
Hat zwar vermutlich nix mit dem eigentlichen Problem zu tun, aber fiel mir grad noch so auf: Was soll das da? Warum lädst Du den Timer am Anfang vor? Was Du da in der Hauptschleife machst, erschließt sich mir auch nicht so ganz...
ohne diesen vers fangen die leds nicht "sauber" an, versteh ich selber nicht so ganz, habe irgendwo im internet gefunden, funktioniert aber
Stefan wrote:
> ohne diesen vers fangen die leds nicht "sauber" an,
^^^^
Vers? Als Gedicht oder gar Lied würde ich das Programm aber nicht
bezeichnen...;-)
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.