www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 6 LED's mit 2 Byte und Timer?


Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo :-)

ich zermarter mir gerade die Birne wie man folgenes realisiseren könne. 
Ich möchte mit bis zu 6 LED's einen kurzen Blinkimpuls ausgeben wenn in 
meinem Programm irgend ein Zustand von den 6 möglichen erreicht ist.

Nun der Timer läuft das er alle 250ms angesprungen wird. Das find ich 
ausreichend zum erkennen des Blinkens.

Jetzt habe ich früher immer einen Zähler laufen lassen und den in meinem 
Hauptprogramm auf 3 gestellt und im Timer dann die LED eingeschaltet 
wenn der Zähler >0 war. Der Zähler wurde im Timer runtergezählt und dann 
wenn 0 erreicht war, die LED wieder abgeschaltet.

Bei 6 LED's find ich es totale Verschwendung, 6 Zähler laufen zu lassen 
da der Blinkimpuls bei allen ruhig gleich bleiben kann.

Nun habe ich mir überlegt das man das vlt. sogar mit 2 Byte hinbekommen 
müßte. Wenn man 2 Byte led_on und led_sav hätte könnte man im 
Hauptprogramm das jeweilige Bit in led_on setzen welches beim Eintritt 
in den Timer dann am Port ausgegeben wird. Man könnte sich die gesetzten 
dann in led_sav speichern. Beim nächsten schaut man dann welche im 
led_sav liegen und im led_out nicht mehr gesetzt sind und löscht die 
wieder.

Soweit die Theorie... :-(

Das ganze ist bestimmt mit logischen Verknüpungen realisierbar doch wie 
setze ich da nun an?

Gruß AVRli...

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze geht doch auch in einem Byte. Die untersten 6 Bit des Bytes 
repräsentieren deine 6 LEDs. Angesprochen werden sie dann mathematisch:
Für die 1. LED +1,
für die 2. LED +2,
für die 3. LED +4,
für dei 4. LED +8,
für die 5. LED +16 und
für die 6. LED +32 zum einschalten und den entsprechenden Wert zum 
abschalten wieder subtrahieren. Wenn du die LEDs der Reihe nach an einem 
Port hast, kannst du sogar das Byte in deinem Blink-Timer einfach ins 
Portregister schreiben. Fertig.

//EDIT: Einen Zähler für den Implus brauchst du nach wie vor, aber da 
tuts doch der Timer selber, falls du den nicht anderweitig benötigst.

//EDIT2: Wenn du dsa ganze in Binär ausgibst, reichen für 6 Stati 
übrigens auch 4 Bit. Man muss dann halt jede LED nicht als ein Signal 
ansehen, sondern der Zustand aller LEDs als ein Status.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

In der Tat es reicht in meinem Fall 1 Byte. Ich merke mir pro LED ein 
Bit was ich im Timer setze und dann lösche ich es nach dem setzen im 
Timer wieder. Klappt 1A danke!

Gruß AVRli...

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.