6 LED's mit 2 Byte und Timer?

Gast #1139002
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...
#1139058
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.
Gast #1139135
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.