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


von AVRli (Gast)


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...

von Dominique G. (dgoersch)


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.

von AVRli (Gast)


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...

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.