Verschiedene Zuständer einer LED realisieren?

Gast #2072463
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...
#2072469
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.
Gast #2072530
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...
Gast #2072542
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
#2072546
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

Antwort schreiben

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.

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.