PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abfrage PD5 - geht nicht



afusven
21.01.2006, 21:02
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

linux_80
21.01.2006, 21:07
Was geht denn nicht ?
Pin auch als Eingang definiert ?

afusven
21.01.2006, 21:15
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

BlueNature
21.01.2006, 21:24
Servus Sven,

hast das JTAGEN-Fuse richtig gesetzt? Probiers mal damit zuerst bevor du lange suchst.

Grüße Wolfgang

linux_80
21.01.2006, 21:43
@BlueNature
Beim Mega 8 gibts kein JTag !

@afusven
und was geht jetzt nicht, ist sta immer 0 oder 1, oder wo zwickts ?

BlueNature
21.01.2006, 21:50
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

afusven
21.01.2006, 21:52
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.

linux_80
21.01.2006, 22:25
Hallo BlueNature,
im 2. Post hat afusven geschrieben:

... mit einem AtMega8.

deswegen dachte ich es geht um einen Mega 8 :-)


@afusven
ich glaub das ! spielt dir einen Streich, lass es mal weg, und stell das Programm um (if ... else ...).

afusven
21.01.2006, 23:05
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!

afusven
22.01.2006, 12:52
Neuer Versuch: while-Schleife durch goto-schleife ersetzt - geht auch nicht!

Aber: Compiler-optimierung von -o3 auf -o1 gesetzt - jetzt geht es!!!

linux_80
22.01.2006, 13:01
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.

Kjion
22.01.2006, 17:31
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