Forum: Mikrocontroller und Digitale Elektronik Wert einer Variable mit digitalem Input ändern


von Max M. (Firma: FOS FFB) (richtigguteszeug)


Angehängte Dateien:

Lesenswert?

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

von Ozvald K (Gast)


Lesenswert?

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.

von Joni R. (jomaro)


Lesenswert?

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?

von der heinz (Gast)


Lesenswert?

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.

von Max M. (Firma: FOS FFB) (richtigguteszeug)


Lesenswert?

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 ?

von Stefan F. (Gast)


Lesenswert?

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.

von Max M. (Firma: FOS FFB) (richtigguteszeug)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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?

von N. M. (mani)


Lesenswert?

Was macht denn das return in der while(1)?

von Stefan F. (Gast)


Lesenswert?

N. M. schrieb:
> Was macht denn das return in der while(1)?

Joa, richtig Einrücken wäre mal eine Maßnahme.

von Thomas E. (thomase)


Lesenswert?

N. M. schrieb:
> Was macht denn das return in der while(1)?

nichts

von Walter K. (walter_k488)


Lesenswert?

Thomas E. schrieb:
> N. M. schrieb:
>> Was macht denn das return in der while(1)?
>
> nichts

warum beendet Return die Funktion Main() nicht?

von Stefan F. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.