Hallo zusammen. Folgendes Problem habe ich. Das Programm soll sich irgendwanneinmal zu einer Mondlichtsimulation mit drei LEDs weiterentwickeln. Da ich noch ziemlich am Anfang stehe was uC Programmierung betrifft gabe ich mal so angefangen wie im Code. Ziel ist, das immer eine LED hoch und wieder runterdimmt und dann die nächste. Das funktioniert ,mit den beiden, die an OC0 und OC2 hängen auch ganz gut. Nur die LED an OC1A leuchtet dauerhaft und dimmt nicht hoch oder runter. Zu erwähnen ist noch, dass die Schaltung testweise auf dem STK 500 läuft.Taktfrequenz liegt bei (MHz über Quarz auf dem Board. Vielleicht kann mir jemand helfen? Vielen Dank schonmal im Vorraus
Timer 0 + 2 sind 8bit counter, Timer 1 ist ein 16 bit counter. Das OCR1A register ist auch ein 16bit register. Das high und low byte müssen in der richtigen Reihenfolge geschrieben werden. Ich weiß nicht was der Compiler draus macht, wenn du diesem register einen 8bit Wert zuweist. Schau dir mal im Datenblatt den Unterscheid im PWM Verhalten des Timer 1 im Vergleich zum Timer 0 oder 2 an. Ich vermute mal dein Problem liegt irgendwo dort begraben. Viel Glück Remo
> TCCR1A = 1<< WGM10 | 1<<WGM11 | 1<<WGM13 | Das ist der Phase Correct MOdus der PWM. In diesem Modus hat OCR1A eine Sonderfunktion, nämlich den TOP Wert anzugeben. Siehe Datenblatt Seite 112, Tabelle 48 verwende den Modus 5 (Fast PWM, 8 Bit) und deine LED wird sich normal verhalten. Modus 5 ist: WGM10 und WGM12 setzen (siehe gleiche Tabelle aus gleichem Datenblatt) Die Sache mit dem 16 Bit Register kannst du vergessen. Das erledigt der COmpiler schon richtig. (Dazu programmieren wir ja in C, damit wir uns um solche Kleinigkeiten nicht kümmern müssen) Edit: Das setting der COM Bits hab ich jetzt nicht kontrolliert, wie die bei Fast PWM sein müssen. Tabelle 46 ist dafür zuständig.
Hallo nochmal, es funktioniert leider immer noch nicht. Die LED rührt sich nach wie vor nicht. Betreffende Zeile sieht jetz so aus: TCCR1A = 1<< WGM12 | 1<<WGM10 | 1<< CS11 | 1<< CS10 | 1<< COM1A0; OCR1A = 0; Ich habs auch mit zusätzlich 1<<COM1A1 versucht es ändert sich nur das, dass die LED dann am Anfang an ist. Jetzt ist sie aus. Habt ihr vielleicht noch nen Tip? Vielen Dank!
Hi
>TCCR1A = 1<< WGM12 | 1<<WGM10 | 1<< CS11 | 1<< CS10 | 1<< COM1A0;
WGM12 und WGM10 liegen nicht im gleichen Register. CS11/10 und COM1A0
auch nicht. Lies das Datenblatt.
MfG Spess
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.