Hallo! Bin gerade dabei ein Lauflicht für die LEDs meines STK zu programmieren, unzwar jedesmal wenn wenn TCNT0=0 ist, also der Timer überläuft, soll eine Variable +1 gesetzt werden. Und wenn die Variable dann >=7 ist, wieder 0 gesetzt werden, aber schaut euch mal am besten den Code an. Jedenfalls passiert nichts. Gruß, Sebastian PS: Zu beachten ist, dass am STK alle LEDs invertiert sind.
DDRB = 0; d.h. alles Eingänge. Klar, daß sich da nix tut. Richtig ist DDRB = 0xff; ciao remo
Hallo! Naja die LEDs hängen ja an PORTD, das PORTB war nurnoch ein Fragment aus einem anderen Program, das ich vergessen hatte zu löschen.
Jj, sorry, da hab ich nicht weiter aufgepasst. zur Wiedergutmachung: if(i=0) hier setzt zu i gleich 0, meintest du nicht if(i==0) ciao Remo
Das gleiche Spiel mit TCNT0 (if(TCNT0=255) -> ==) Ein anderes Problem könnt noch sein: Je nach Vorteiler kann natürlich TCNT0 mehrmals direkt nacheinander gleich 255 sein. Offensichtlich geht es nicht um exaktes timing darum mein vorschlag nicht nur i++, sondern auch TCNT0 = 0 setzen.
Zunächst einmal wäre es deutlich effizienter, das ganze in den Timer0-Overflow-Interrupt zu verlegen. Zweitens: Für ein Lauflicht ist diese Zeile PORTD = (PORTD | i); denkbar ungeeignet. Besser wäre vielleicht PORTD = (1 << i); für einen wandernden Lichtpunkt oder PORTD |= (1 << i) damit die LED der Reihe nach angehen. Damit sich auch wieder der Reihe nach ausgehen, genügt ein PORTD &= ~(1 << i)
Danke Leute, ihr seid spitze! Mit dem == habt ihr natürlich Recht, so hatte immerhin schonmal was geblinkt ;). Und mit Olaf's Tips funktioniert es jetzt wie es soll. Danke nochmal Gruß, Sebastian
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.