jeweils mit Ausgang1 oder dann immer mit Ausgang2..3...4.. usw.?!?!
Tach,
ich habe ein Problem ich will auf einem ATmega16 8 Aufgaben gleichzeitig ausführen? ist das möglich?
Mein Programm(grob):
if Eingang1 = 1 then
Ausgang1 = 1
Wait 1s
Ausgang2 = 1
Wait 1s
Ausgang3 = 1
end if
if Eingang1 = 0 then
Ausgang1 = 0
Wait 1s
Ausgang2 = 0
Wait 1s
Ausgang3 = 0
end if
Und dises Programm muss ich 8 mal haben. Ich habe bedenken wenn ich die Wartezeit mit hochzählen eines Wertes mache kann ich ja kein 2 Programm anstoßen.
Ich wäre froh wenn mir da jemand einen Tipp geben könnte.
MfG
Athlon
jeweils mit Ausgang1 oder dann immer mit Ausgang2..3...4.. usw.?!?!
TAch,
also jeder der 8 Funktionen hat ihre eigenen Ein/Ausgänge.
weiß nicht ob ich dich richtig verstehe, aber vielleicht so:
if eingang1 = 1 then
ausgang1 = 1
else
ausgang1 = 0
if eingang2 = 1 then
ausgang2 = 1
else
ausgang2 = 0
if eingang3 = 1 then
ausgang3 = 1
else
ausgang3 = 0
wait 1
endif
und dann halt so weiterführen....
Ne ich beschreib das mal.
Das ganze gibt es 8 mal mit unterschiedlichen Ein/Ausgängen:
Wenn Eingang1 true, dann Ausgang1 true, 1s warten, dann Ausgang2 true, 1s warten, dann Ausgang3 true,
Wenn Eingang1 false, dann Ausgang1 false, 1s warten, dann Ausgang2 false, 1s warten, dann Ausgang3 false,
Die Anweisung werden nur einmal bei True/False wechsel durchlaufen.
Ich hoff das es so verständlich ist.
Das könnte man gut mit einem Timer lösen...
Eine Möglichkeit: der Timer pollt die Eingänge und erzeugt die Verzögerungen. Z.B. alle 10ms einen Timer-Interrupt auslösen, darin dann die Eingänge auslesen. Wenn dann für eine der acht "Aufgaben" eine Verzögerung ansteht, ne Variable dafür auf 100 setzen und vom Timer runterzählen lassen. Wenn null erreicht ist, ist die Sekunde rum, der Ausgang wird geschaltet und die nächste Wartezeit für diese "Aufgabe" begonnen.
Was willst Du denn damit steuern?
also gleichzeitig ist mal auf keinen Fall, der µC kann immer nur eine
Sache abarbeiten, dann kann er sich ner anderen widmen.
1 Sekunde Wartezeit ist für die Kiste ne Ewigkeit in der der Controller
nix aber auch garnix anderes macht als abwarten, esseidenn
er bekommt zwischendurch nen Interrupt z.B. vom Timer.
Dann springter aus der Warterei raus und amcht was anderes um dann
nach Erledigung wieder in die Warterei zurückzuspringen.
Wie von uwegw beschrieben wär ne Timeranwendung um die Ports
zu pollen und anschliessend ne Variable runter zählen lassen
eine Möglichkeit. Oder auch der PinChangeInterrupt könnt sowas
vollbringen. Dann wärste frei von Timingproblemen was das
Abfragen der Ports angeht.
Wenn ich dich recht verstanden hab gehts aber nur um einen
abzufragenden Pin, nämlich den von Eingang 1 und danach werden
die Ausgänge einfach durchrotiert. Eine Möglichkeit für das
Durchschalten wär anstelle von x If einfach rotate des Ports
Vor den Erfolg haben die Götter den Schweiß gesetzt
Lesezeichen