Forum: Mikrocontroller und Digitale Elektronik sleep, external interrupt


von ee (Gast)


Angehängte Dateien:

Lesenswert?

hallo zusammen,

ich habe ein Problem mit angehängtem Programm. Es läuft auf einem 
Attiny13 und mit Optimierung -OS.
Grundsätzlich soll das Programm auf einen Tastendruck (PCINT4) warten 
und dann eine Reihe von Lichteffekten durchführen. Anschliessend soll 
der uC wieder schlafen gehen und mit PCINT4 wieder aufwachen.

Nun läuft das Programm beim ersten Durchgang wie gewollt, erst bei 
Tastendruck ab. Jedoch läuft die Schlaufe dann endlos ab und der uC geht 
nicht mehr schlafen. Ich finde nicht heraus wieso. Sieht jemand meinen 
Denkfehler?

von Thomas E. (thomase)


Lesenswert?

ee schrieb:
> Ich finde nicht heraus wieso. Sieht jemand meinen Denkfehler?

> PORTB=(1<<PB3);

Da und noch an mehreren weiteren Stellen, wird der Pullup für den Taster 
abgeschaltet, womit der Pin dann offen in der Luft hängt, munter vor 
sich hin floated und immer wieder den PCINT auslöst.

Noch ein kleiner Tip zur Initialisierung des PCINT: Damit nicht schon 
durch das Einschalten des Pullups der 1. PCINT-Interrupt ausgelöst wird:
1
PORTB|=(1<<PB4);
2
GIMSK|=(1<<PCIE);    
3
PCMSK|=(1<<PCINT4);
4
GIFR |= (1 << PCIF);  //löscht das Interrupt-Flag
5
sei();

Ist hier nicht relevant, kann einen aber an anderer Stelle in den 
Wahnsinn treiben.

mfg.

PS: Grundsätzlich ist dein Programm, milde ausgedrückt, stark 
verbesserungsfähig: Keine Tastenentprellung, Delays zur 
Programmsteuerung.

von ee (Gast)


Lesenswert?

Ja klar, auf den PULL-UP habe ich mich gar nicht geachtet.

Zur Verbesserung: erstens muss mein Programm weder genau noch 
zeiteffizient sein. Zweitens braucht es ja gar keine Tastenentprellung, 
die Laufzeit einer Schlaufe ist genügend lang.
Natürlich ist das ganze nicht sehr ästhetisch, aber es musste halt 
schnell gehen.

Danke für deine rasche Antwort

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.