PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vorschläge zum schalten von mehreren Ausgängen in C



killma$ter
01.03.2011, 09:45
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ß

Hubert.G
01.03.2011, 10:28
Einen Timer mit z.B. 5msec takten lassen, für jeden Ausgang einen Ablauf erstellen.

oberallgeier
01.03.2011, 10:50
... Ausgänge in bestimmten Zeitabständen ... 30ms oder ähnlich ... Timer/Counter ... aber viele sind ja in den kleinen Megas nicht verfügbar ...Also: Millisekunden sind bei den Controllern ne halbe Ewigkeit. Es reicht da EIN Ti mer der eine interne Uhr betreibt - ich habe bei einem 20 MHz-Quarz einen 50 µs-Ti mer. 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.

Im übergeordneten Programm kann ich mich auf diese Boardzeit berufen. Allenfalls ist es sinnvoll, neben der Ti mer-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.