Einen Timer mit z.B. 5msec takten lassen, für jeden Ausgang einen Ablauf erstellen.
Guten Morgen,
habe eine Frage bezüglich eines Programms in C zum schalten von ca. 5-10 Kanälen in definierten Abständen.
Es soll ein Prgramm entstehen für einen Controller z.b ATMega8 ect., welcher durch vorgegebene Zahlen/Variablen, die Ausgänge in bestimmten Zeitabständen aus und wieder einschaltet.
Das Problem ist, das alle Ausgänge völlig unabhängig laufen.
Beispiel wäre z.b Kanal 1, soll für 20ms einschalten, dann für 1000ms eine Pause machen und wieder für 30ms oder ähnlich einschalten usw. Alle Ausgänge werden andere Zeitvorgaben bekommen.
Ich möchte selbstverständlich keinen fertigen Code oder sowas bekommen, sondern viel eher vielleicht ein Paar Vorschläge, evt. hat der eine oder andere sowas schon gelöst.
Meine Idee wäre natürlich die Timer/Counter zu benutzen, aber viele sind ja in den kleinen Megas nicht verfügbar und somit eine nicht ganz einfache Aufgabe. Denn, hätte ich für jeden Kanal einen eigenen Timer, würde die Sache um einiges einfacher ausfallen.
Wäre um jede Antwort Dankbar!
Gruß
Einen Timer mit z.B. 5msec takten lassen, für jeden Ausgang einen Ablauf erstellen.
Also: Millisekunden sind bei den Controllern ne halbe Ewigkeit. Es reicht da EIN Timer der eine interne Uhr betreibt - ich habe bei einem 20 MHz-Quarz einen 50 µs-Timer. Damit zähle ich in der zugehörigen ISR bis 20000 (zwanzigtausend) und fange dann neu an zu zählen - sprich alle Sekunde. Es ist mit uint16_t möglich bis 60000 zu zählen, drei Sekunden.Zitat von killma$ter
Im übergeordneten Programm kann ich mich auf diese Boardzeit berufen. Allenfalls ist es sinnvoll, neben der Timer-Zeit für den jeweils aktuellen Fall noch "altzeit" und "neuzeit" festzuhalten (oder andere Variante), um den Überlauf von einer auf die andere Sekunde mitzukriegen.
Ciao sagt der JoeamBerg
Lesezeichen