Servus, Ich würde gerne mit einem digitalen Input den Wert einer Integervariable i zu ändern. Jedoch ändert sich i nicht und bleibt null. Deswegen wird aus dem Feld immer der nullte Wert auf den Ausgang gegeben. Wäre nett wenn mir jemand verraten könnte was ich dafür in den code schreiben muss. Danke
Max M. schrieb: > Jedoch ändert sich i nicht und bleibt null. Deswegen wird > aus dem Feld immer der nullte Wert auf den Ausgang gegeben. Laut Programm Du verwendest 2 Eingänge. Du änderst die Variable mit einem 1 auf Eingang 1, aber der Ausgang wird nur dann aktualisiert wenn der 2. Eingang auch 1 ist. Ist es so gewollt? Ich gehe davon aus, dass alle Ein- und Ausgänge richtig initialisiert sind.
Max M. schrieb: > Jedoch ändert sich i nicht und bleibt null. Dir ist schon bewusst, dass der Eingang nur in der ganz kurzen Zeitspanne ausgewertet wird? Sprich: in einer verdammt kurzen Zeit am Anfang der Schleife. Wie hast du es denn bis jetzt getestet?
Deine variable i läuft immer über 8, weil der conrontroller bei jedem Schleifendurchlauf (Vermutlich im Mhz Bereich) inkrementiert. Abhilfe schafft die Abfrage einer zusätzlichen Variable. War der Eingang schon HI dann zähle nicht. Erst nachdem wieder ein LOW registriert wurde und damit die Blockvariable zurückgesetzt wurde darf weitergezählt werden.
Okay, danke das leuchtet mir ein. Aber was genau soll jetzt wo in meinen Code, dass ich i stufenweise ändern kann. Bräuchte ich evtl. einen __delay ?
Max M. schrieb: > Aber was genau soll jetzt wo in meinen > Code, dass ich i stufenweise ändern kann. der heinz schrieb: > War der Eingang schon HI dann zähle nicht. Was darauf hinaus läuft, dass den Zustand des Eingangs bei jeder Abfrage mit denḿ vorherigen Zustand vergleichst. Denn vorherigen Zustand musst du in einer weiteren Variable vermerken.
Könnte es vielleicht an den Variablen liegen? Wenn ich nämlich statt i++; einfach i = 4; schreibe funktioniert genauso wenig obwohl dann i nicht gegen unendlich gehen würde und es damit auch nicht immer wieder auf null zurückgesetzt werden würde.
Max M. schrieb: > Könnte es vielleicht an den Variablen liegen? Tja, die ist wohl kaputt. Versuche mal eine andere Variable, zum Beispiel j. Max M. schrieb: > Wenn ich nämlich statt i++; einfach i = 4; schreibe > funktioniert genauso wenig Was funktioniert genau so wenig?
N. M. schrieb: > Was macht denn das return in der while(1)? Joa, richtig Einrücken wäre mal eine Maßnahme.
Thomas E. schrieb: > N. M. schrieb: >> Was macht denn das return in der while(1)? > > nichts warum beendet Return die Funktion Main() nicht?
Walter K. schrieb: > warum beendet Return die Funktion Main() nicht? Tut sie das nicht? Das bin ich anders gewohnt. Indiesem Zusammenhang sollte man hinterfragen, welches Programm die CPU denn nach main() ausführt. Der avr-gcc lässt die CPU dann in einer Endlos-Schleife auf der Stelle treten. Andere Compiler lassen sie vielleicht ins leere laufen, was eventuell irgendwann einen Neustart bewirkt.
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.