Datum:
Ich habe in der Loop ein aufruf zu einer gebastelten millis ISR Methode.
Das Problem ist das er bei den einzelnen Benutzer-Befehlen etwas länger
braucht un bei CMD_START_IMP garnicht oder total verspäted rauskommt.
Was mache ich falch ?
void prog_isr()
{
switch(CMD[prog_run].Befehl)
{
case CMD_ZEIT:
if(CMD[prog_run].Befehl == CMD_START_IMP) intervall_imp =
CMD[prog_run].param1; else intervall_imp = CMD[prog_run].param1 * 1000;
break;
case CMD_PMP:
Serial.println("PMP");
if(digitalRead(pumpe) == HIGH) {digitalWrite(pumpe, LOW);}
else{digitalWrite(pumpe, HIGH);};
aktStatus();
prog_run ++;
Root.goDown();
break;
case CMD_SAN:
Serial.println("SAN");
if(digitalRead(injektor) == HIGH) {digitalWrite(injektor,
LOW);} else{digitalWrite(injektor, HIGH);};
aktStatus();
prog_run ++;
Root.goDown();
break;
case CMD_START_IMP:
Serial.println("IMP");
p_imp_pause = CMD[prog_run].param1;
p_imp_dauer = CMD[prog_run].param2;
p_imp_status = true;
state_imp=true;
prog_run ++;
Root.goDown();
break;
case CMD_STOP_IMP:
Serial.println("STOP_IMP");
p_imp_status = false;
state_imp=false;
digitalWrite(v_pneumatik, LOW);
aktStatus();
prog_run ++;
Root.goDown();
break;
case CMD_END:
Serial.println("END");
prog_run = 0;
break;
}
if (prog_run > anzCMD)
{
prog_run = 0;
Serial.println("BEendet");
}
// ZeitBefehl abgelaufen
if (millis() - pMillis > intervall_imp) {
// aktuelle Zeit abspeichern
pMillis = millis();
prog_run ++;
Root.goDown();
}
}
Datum:
Andreas Frauenstein schrieb: > Was mache ich falch ? Erstmal das "s". Dann verwende bitte die [c]-Tags damit man es besser lesen kann. Dann wäre die Angabe des OS bzw des Prozessors hilfreich, natürlich auch der (mit Sicherheit vorhandene) Rest des Codes.
Datum:
Angehängte Dateien:- Code befindet sich im Anhang Es handelt sich im ein Arduino UNO Board Atmega AVR 328
Datum:
Karl Heinz Buchegger schrieb: >> Serial.println("PMP"); > > Das braucht Zeit Machs jetzt wech aber ich denke auch mein ICR Aufbau ist nicht optimal
Datum:
> Das Problem ist das er bei den einzelnen Benutzer-Befehlen etwas > länger braucht un bei CMD_START_IMP garnicht oder total verspäted > rauskommt. Über welche Zeiten reden wir?
Datum:
Hab herausgefunden woran es lag :) Ich habe zwei ISR Davon ist ein Die für die Impulse. Also haben die beiden ISRs die selben Parameter benutzt: pMillis ist jetzt für die Programm-ISR p_pMillis und intervall_imp ist jetzt in der Programm-ISR p_intervall_imp daran leg es. Der Befehl CMD_START_IMP startet die Impuls ISR Die wird wiederum die gesetzten parameter pause und dauer lesen. Aber jetzt ist alles bestens trozdem danke Vielmals.
Datum:
Karl Heinz Buchegger schrieb: >> Das Problem ist das er bei den einzelnen Benutzer-Befehlen etwas >> länger braucht un bei CMD_START_IMP garnicht oder total verspäted >> rauskommt. > > Über welche Zeiten reden wir? Die Zeiten werden aus einer Datei in den EEProm gfelanden und später in den RAM Die Datei sieht folgendermasen aus: vobei alles werte Sekunden sind und nur Die imp sprich impulsstart mit millisekunden referenziert werden.
pname=Programm 01; zeit(5); pmp(an); zeit(10); san(an); zeit(5); imp(1000,500); zeit(30); stop_imp(); zeit(10); imp(500,200); zeit(30); stop_imp(); san(aus); zeit(7); pmp(aus); end; |