Hallo!
Ich will den Zustand von PIND5 abfragen und je nach Zustand den Wert einer Variablen ändern. Leider funktioniert es nicht. Was mache ich falsch?
while (TRUE)
{
sta = 1;
if (!( PIND & (1<<PIND5))) {sta=0;};
}
MfG Sven
Druckbare Version
Hallo!
Ich will den Zustand von PIND5 abfragen und je nach Zustand den Wert einer Variablen ändern. Leider funktioniert es nicht. Was mache ich falsch?
while (TRUE)
{
sta = 1;
if (!( PIND & (1<<PIND5))) {sta=0;};
}
MfG Sven
Was geht denn nicht ?
Pin auch als Eingang definiert ?
Ja, ist als Eingang definert. "sta" wird dann in einer Interruptroutine verwendet. Das Programm ist ein Videoinserter mit einem AtMega8. Dort soll je nach Zustande des PIND5 ein anderes Zeichen eingblendet werden.
Sven
Servus Sven,
hast das JTAGEN-Fuse richtig gesetzt? Probiers mal damit zuerst bevor du lange suchst.
Grüße Wolfgang
@BlueNature
Beim Mega 8 gibts kein JTag !
@afusven
und was geht jetzt nicht, ist sta immer 0 oder 1, oder wo zwickts ?
Servus linux_80,
da stand nichts von einem AtMega8, man muß immer von allem ausgehen wenn man keine genaue Infos hat. Woher weißt Du das es ein AtMega ist? :)
Grüße Wolfgang
sta ist immer 1. Wenn ich sta an Anfang auf 0 setze, ist sta immer 0. Ich vermute, das es an der while-Schleife liegt...
Ich werde morgen nochmal experimentieren.
Hallo BlueNature,
im 2. Post hat afusven geschrieben:
deswegen dachte ich es geht um einen Mega 8 :-)Zitat:
Zitat von afusven
@afusven
ich glaub das ! spielt dir einen Streich, lass es mal weg, und stell das Programm um (if ... else ...).
Ich habe mit AVR-Studio nochmal simuliert:
Wenn ich die while-Schleife weglasse, wird sta in Abhängigkeit von PIND5 gesetzt. Mit while-Sschleife geht es nicht!
Neuer Versuch: while-Schleife durch goto-schleife ersetzt - geht auch nicht!
Aber: Compiler-optimierung von -o3 auf -o1 gesetzt - jetzt geht es!!!
Man sollte seine Programmeireung aber nicht unbedingt darauf ausrichten welche Optimierung der Compiler macht, da kann ja allerhand unvorhergesehens dabei rauskommen. Spätestens wenn man später mal die verschiedenen Codeschnipsel zu einem Grösseren Programm vereinigt.
Ich hätte das, wie oben schon erwähnt, mit if ... else ... gemacht, da gibts dann immer eine alternative, und man kann den IF-Teil anpassen.
Hast du sta als volatile deklariert?
Ansonsten kann es passieren das dir der Compiler wegoptimiert, da es in der entsprechenden while() Schleife ansonsten nicht verwendet wird. Das du es in einer Interruptroutine abfragst kann der Compiler natürlich nicht wissen ;-)
MfG Kjion