Hallo. Ich habe ein Problem mit dem Timer0 im ATTiny2313. Folgendes möchte ich erreichen. Das Programm soll auf eine externe Information (HI Eingang auf PINB6) warten. Kommt dieser in einem Zeitfenster von ca. 2 Sekunden nicht, wird die Unterfunktion verlassen und spring wieder in main() zurück. Meine Lösung: Timer Interrupt ändert den Wert einer globalen Variablen und die While Schleife pollt auf dieser Varaiblen oder abereben auf den zu erwartenden ext. Input. Nur leider funktioniert das so nicht. Durch eine gelbe LED überprüfe ich den ISR. Somit müsste auch die globale Variable geändert werden. Aber die entprechende While Schleife wird nicht verlassen. Habe ich da irgendeinen Denkfehler? Schon mal vorab... Vielen Dank für Eure Beiträge. Gruß RaBu
Da ist ein Logikfehler drin
> while ( !( PINB&(1<<PB6)) || time_over_01 != 0x01 );
Warten so lange wie LOW an PB6 UND kein 2s Timeout aufgetreten ist.
while ( PINB & (1<<PB6) == 0 && time_over_01 != 0x01 );
Stefan B. schrieb: > Da ist ein Logikfehler drin > >> while ( !( PINB&(1<<PB6)) || time_over_01 != 0x01 ); > Warten so lange wie LOW an PB6 UND kein 2s Timeout aufgetreten ist. > while ( PINB & (1<<PB6) == 0 && time_over_01 != 0x01 ); Hi. Die Logik muss ein ODER sein. Solage an PB6 kein HI anliegt ODER kein timeout aufgetreten ist verbleibt der uc in der Schleife. Kommt der HI Pegel vor ablauf des timeouts gehts weiter, ansonsten gehts weiter, wenn ca 2s abgelaufen sind. Grundsätzlich möchte ich verhindern, dass der uc in der while() verbleibt.
Stefan B. schrieb: > Da ist ein Logikfehler drin > >> while ( !( PINB&(1<<PB6)) || time_over_01 != 0x01 ); > Warten so lange wie LOW an PB6 UND kein 2s Timeout aufgetreten ist. > while ( PINB & (1<<PB6) == 0 && time_over_01 != 0x01 ); Hi, so ist das schon mal mit der Logik... hätte vorher mal überlegen sollen :-) while ( PINB & (1<<PB6) == 0 && time_over_01 != 0x01 ); sollte auch funktionieren! Werde es nachher mal testen. Gruß Ralf
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.