Tmer0 Probleme beim ATTiny2313 C-Code

OP #1970021
Lesenswert?

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
Angehängte Dateien:
OP #1970798
Lesenswert?

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.
OP #1970837
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren