PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 8 Aufgaben gleichzeitig?



Athlonxp2000
24.12.2006, 12:33
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

Zapo.
24.12.2006, 15:07
jeweils mit Ausgang1 oder dann immer mit Ausgang2..3...4.. usw.?!?!

Athlonxp2000
24.12.2006, 15:11
TAch,

also jeder der 8 Funktionen hat ihre eigenen Ein/Ausgänge.

Zapo.
24.12.2006, 15:32
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....

Athlonxp2000
24.12.2006, 15:59
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.

uwegw
24.12.2006, 21:29
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.

Windi
28.12.2006, 08:04
Was willst Du denn damit steuern?

Vitis
28.12.2006, 14:15
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