Forum: Mikrocontroller und Digitale Elektronik Verschiedene Zuständer einer LED realisieren?


von AVRli (Gast)


Lesenswert?

Hallo zusammen,

ich habe auf einem Bord 2 LED's und möchte die nun optimal ausnutzen um 
verschiedene Zustände anzuzeigen. Wie mache ich das nun OHNE Rechnzeit 
dafür zu verschwenden, klar etwas ist schon ok, doch keine DELAY oder 
sowas ;)? Am liebsten wären mir pro LED die Zustände:

an/aus
kurzes blinken mit 1 Sek Pause
langes blinken im 1 Sek Takt
langes blinken mit kurzer Pause

Wie baut man so etwas auf? Timer und Interrupt Wissen ist hier soweit 
vorhanden, nur was macht man wo?

Vielen Dank für jede helfende Antwort.
Programmiere in C und nen ATmega32

Gruß AVRli...

von Michael H. (overthere)


Lesenswert?

Kommt drauf' an, wie kompliziert du rangehen willst. Das schnelleste wie 
man es machen kann, ist eine Folge anzulegen und die Zeitlich immer mit 
einem Timer auszugeben. Also ein Int mit An, Aus, Aus,Aus,Aus ist zum 
Beispiel kurzes Blinken mit langer Pause. Der Timer läd sich dann aus 
der Folge "raus" was er braucht.
Die Blinkfolge setzt du über einen Pointer.

von AVRli (Gast)


Lesenswert?

Danke für Deine Antwort... ok wenn man dann alle 250ms den INT anfährt 
und da dann das Muster auf 2 Sekunden ansetzt dann verstehe ich das 
soweit.

1,0,0,0,0,0,0,0     für kurzes blinken
1,1,1,1,0,0,0,0     für 1 Sek blinken
1,1,1,1,1,1,1,1     für an
0,0,0,0,0,0,0,0     für aus

Nun muss man sich noch irgendwie was basteln wo man das nächste Muster 
"rein schieben" kann, wenn das davor fertig ausgegeben wurde.

Gruß AVRli...

von Exil-Ing (Gast)


Lesenswert?

Nimm einfach ne globale volatile-Variable, welche das naechste 
auszugebende Muster enthaelt. Der Interrupt hat zwei eigene Variablen: 
Einmal den Zaehler fuer die Position des naechsten auszugebenden 
Zustands, und das aktuell ausgegebene Muster. Wenn ein Muster fertig 
ausgegeben ist, kopierst Du die globale Variable in die lokale.


Patrick

von Michael W. (michael87)


Lesenswert?

Hallo AVRli

ich glaube du verstehst das falsch. Das "anfahren" deines Int alle 250ms 
wäre richtig, das "ansetzen auf 2 Sekunden" jedoch nicht.
Gemeint ist eher:

Du gibst, solange der Zustand gleich ist (blinken, dauerleuchten, ...) 
das GLEICHE Muster aus.
Beispiel kurzes Blinken

Jedes Interrupt gibt nun 1 Bit des Musters aus:
1. Durchlauf: 1
2.-8. Durchlauf: 0
Danach wird wieder beim ersten Bit angefangen

Wenn man das schnell genug ausführt (50 Hz = 20ms für ALLE Bit = 2,5ms 
für jedes Bit), so sieht man auch kein flackern mehr.
Viel Aufwand ist das für einen µC nicht.

MFG

Edit: Exil-Ing war schneller, trotzdem passt meine Antwort glaube ich 
noch als Erklärung

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.