Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo, > irgenwie verstehe ich mein Programm nicht. Offensichtlich mache ich etwas falsch, aber was? > Ich glaube es liegt ein grundsätzlicher Denkfehler vor. Das Programm soll bei Betätigung eines > Schalters, H-L-Flanke, einen Timer anstoßen, der eine bestimmte Zeit an Sekunden > wartet, bevor er eine Meldung ausgiebt. (Derzeit <Timer abgelaufen>,später soll ein Relais bei > steigenden Flanke eingeschaltet werden, und bei fallender Flanke zeitverzögert ausgeschlatet werden). > Soweit funktioniert das Prog auch so wie es soll, aber wenn ich die Zeilen > hwcom.print("...starte Timer"); > hwcom.ret(); > im Thread "nachlauf" auskommentiere, dann läuft der Timer nur genau ein mal ab! Dann tut sich > nix mehr! Erst habe ich geglaubt es liege an der Geschwindigkeit und habe stattdessen > einen sleep von 50, dann 100, 200 und schließlich 1000ms eingefügt, aber das hilft auch nicht. > > Hat irgendjemand eine Idee? Oder ist der ganze Ansatz irgendwie nix. Ich habe so die Vermutung, > es liegt an der Flankengeschichte, ev. funktioniert das nicht ganz richtig! ...aber event. sehe ich > auch den Wald vor lauter Bäumen nicht.... > > Ich wäre dankbar für eine Antwort (oder einen neuen Ansatz). > > hier das Prog. > > const schalter=10; // Eingang P2, PIN48 > const wartezeit=5; // in Sekunden > > int flanke; > int timerflag; > > thread nachlauf > { > long timer; > hwcom.print("...starte Timer"); // mit diesen Einträgen funzt das Programm > hwcom.ret(); // ohne läuft der Timer nur ein Mal > timerflag=0; > timer=system.timer(); > wait system.timer()- timer>(wartezeit*1000); > timerflag=0xFF; > reset; > } > > > function SCHALTER () returns int > /*******************************************************/ > /** Auswertung des SCHALTER-Kontaktes */ > /*******************************************************/ > { > if ports.get(schalter)xor flanke //reagiert auf steigende und fallende Flanke > { > flanke=ports.get(schalter); //Pegel am Port speichern > return 0xff; //flanke=0, d.h. L->H; flanke=-1, d.h. H->L > } > return 0; > } > > > thread main > { > stports.init(); > lcdext.init(); > lcdext.clear(); > stports.LCDlight(0); > run waithost; // ACHTUNG: die Routine habe ich mal ´rausgeschmissen, ist aber die von A.H. > sleep 5000; > hwcom.clr(); > hwcom.print("starte Programm...."); > hwcom.ret(); > > loop > { > if SCHALTER() > { > if flanke > { > hwcom.print(" L->H Flanke"); > hwcom.ret(); > } > else > { > hwcom.print(" H->L Flanke"); > hwcom.ret(); > run nachlauf; > } > } > if timerflag > { > hwcom.print("Timer abgelaufen"); > hwcom.ret(); > timerflag=0; > } > } > }