www.mikrocontroller.net

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


Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Michael H. (overthere)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Exil-Ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael W. (michael87)
Datum:

Bewertung
0 lesenswert
nicht 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

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.