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...
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.
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...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.