Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage (Lauflicht will nicht laufen)


von Raubvogel (Gast)


Angehängte Dateien:

Lesenswert?

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.

von remo (Gast)


Lesenswert?

DDRB = 0;
d.h. alles Eingänge. Klar, daß sich da nix tut.
Richtig ist
DDRB = 0xff;

ciao
remo

von Raubvogel (Gast)


Lesenswert?

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.

von remo (Gast)


Lesenswert?

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

von Werner B. (Gast)


Lesenswert?

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.

von Olaf Stieleke (Gast)


Lesenswert?

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)

von Raubvogel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.