mikrocontroller.net

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


Autor: Raubvogel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: remo (Gast)
Datum:

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

ciao
remo

Autor: Raubvogel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: remo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olaf Stieleke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Raubvogel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.