Hallo, ich zerbrech mir schon eine ganze Weile den Kopf und hoffe hier kann mir jemand weiter helfen. Das Problem ist wahrscheinlich einfach zu lösen, aber irgendwie habe ich eine Denkblockade. Folgendes: Alle 100ms empfange ich eine CAN-Botschaft die mehrere Signale enthält. Von diesen Signalen muss ich aber nur 2 auswerten. Default-Zustand dieser beiden Signale ist 1. Erst wenn beide Signale auf 0 gehen, soll ein Ausgangsimpuls von High für 400ms auf Low gezogen und danach wieder auf High gehen. Die 2 Eingangssignale kann man ja quasi als Schalter verstehen. Der Impuls kommt soweit, nur geht er nicht nach den 400ms wieder automatisch auf High, da beide Eingangssignale (die wie erwähnt aller 100ms kommen) ja nun permanent auf 0 stehen. Erst wenn eines wieder auf 1 geht, geht der Impuls auch wieder auf High. Ich will aber, dass der Impuls gleich wieder nach 400ms auf High geht, auch wenn beide Eingangssignale noch 0 sind. Programmiere in C (was aber für die Lösung eher zweitrangig ist, da mein Problem im Prinzip ja nur eine Zustandsabfrage darstellt, glaube ich zumindest :) ) Kann mir jemand nen Lösungsvorschlag nennen? Danke,Ronny
Ronny schrieb: > Der Impuls kommt soweit, nur geht er nicht nach den 400ms wieder > automatisch auf High, davon steht ja auch nichts in deiner Spec. > Ich will aber, dass der Impuls gleich wieder nach 400ms auf High geht, > auch wenn beide Eingangssignale noch 0 sind. Sobald in deiner Aufgabenstellung in irgendeiner Form das Stichwort 'Zeiten' vorkommt, lautet die Lösung fast immer "Timer". Detektierst du das erste mal die 0-0 Situation startest du einen Timer und stellst den Ausgang auf 0. Der Timer zählt die 400ms abzählt und nach Ablauf der Zeit schaltet er den Ausgang wieder auf High. Das ist im Grunde nichts anderes als eine Eieruhr, die bei Ablauf der Zeit den Schaltvorgang auslöst.
Karl Heinz schrieb: > Detektierst du das erste mal die 0-0 Situation startest du einen Timer > und stellst den Ausgang auf 0. Der Timer zählt die 400ms abzählt und > nach Ablauf der Zeit schaltet er den Ausgang wieder auf High. > Das ist im Grunde nichts anderes als eine Eieruhr, die bei Ablauf der > Zeit den Schaltvorgang auslöst. Danke erstmal für die Antwort. Das mit dem Timer hab ich auch so realisiert wie du geschrieben hast. Das Problem hier ist nur, dass ja die Botschaft alle 100ms kommt, der Impuls aber 400ms lang sein soll. Demzufolge wird also der Eingangssignalzustand alle 100ms verglichen und da beide Eingangssignale nun immer 0 sind, bleibt der Impuls auch weiterhin auf Low. Vielleicht sollte ich eher schreiben, dass es eine C-ähnliche Sprache ist, wo scheinbar die eingehende Botschaft höher priorisiert ist als der Timer. Das Prinzip ist hier so: if((Eingangssignal1 = 0) && (Eingangssignal2 = 0)) { setze Timer} on Timer { ziehe Impuls 400ms auf Low }
Ronny schrieb: > Karl Heinz schrieb: > >> Detektierst du das erste mal die 0-0 Situation startest du einen Timer >> und stellst den Ausgang auf 0. Der Timer zählt die 400ms abzählt und >> nach Ablauf der Zeit schaltet er den Ausgang wieder auf High. >> Das ist im Grunde nichts anderes als eine Eieruhr, die bei Ablauf der >> Zeit den Schaltvorgang auslöst. > > Danke erstmal für die Antwort. Das mit dem Timer hab ich auch so > realisiert wie du geschrieben hast. Dann hast du dabei einen Fehler gemacht. > Das Problem hier ist nur, dass ja > die Botschaft alle 100ms kommt, der Impuls aber 400ms lang sein soll. Und wo ist da jetzt das Problem? Wenn die Eieruhr schon läuft, dann darfst du sie halt nicht neu starten > > if((Eingangssignal1 = 0) && (Eingangssignal2 = 0)) { setze Timer} if((Eingangssignal1 = 0) && (Eingangssignal2 = 0) && der Timer nicht schon läuft) { setze Timer}
Du musst Dir noch in einer Variable speichern, ob Du den Timer schon ausgelöst hast. Wenn ja, löst Du ihn nicht nochmal aus. Erst wenn wieder eines der Eingangssignale 1 wird (und der Timer abgelaufen ist), setzt Du die Variable wieder zurück.
Wenn ich das richtig sehe willst Du folgendes haben : - Sig1 und Sig2 werden auf low geprüft. - Die Ergebnisse werden zu Sig3 verundet. - Beim Übergang/flanke des Sig3 von low nach high wird - ein Monoflop mit 400ms Getriggerd. Stimmts ? Die Flankenerkennung gibt nur dann ein High weiter wenn der alte und der neue Zustand unterschiedlich sind. In Deinem fall auch nur von Low nach High !??
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.