Hi
versuche eben eine einfache Ausschaltverzögerung hinzubekommen, die
jedoch komplett interruptgesteuert funktioniert. Der Timer einzeln
getestet funktioniert. Ebenso die Triggerung bei steigender Flanke auf
INT0. Aber beides zusammen will nicht so ganz.
1 | ISR(INT0_vect)
|
2 | {
|
3 | TCNT0 = 0; //Zähler zurücksetzen
|
4 | TIMSK |= (1<<TOIE0); //Timer aktivieren
|
5 | PORTC=0xff; //Mal zum testen gesammten Port auf 1
|
6 | }
|
7 |
|
8 | ISR(TIMER0_OVF_vect)
|
9 | {
|
10 | PORTC=0; //zum test wieder alles aus
|
11 | TIMSK &= ~(1<<TOIE0); //Timer deaktivieren
|
12 | }
|
13 | int main()
|
14 | {
|
15 | ...
|
16 | MCUCR |= 0x0f; //INT0 und INT sollen bei steigender Flanke triggern
|
17 | GIMSK |= 0x40; //INT0 aktivieren
|
18 |
|
19 | TCCR0 = 0x03; //Vorteiler 64 Systemtakt 4Mhz
|
20 | ...
|
21 | }
|
Int0 kriegt alle 20ms nen Impuls mit ein paar µs-Breite. Der Timer
müsste nach meiner Berechnung eine Verzögerung von ca 4ms auslösen. Was
nun passiert ist, dass er immer wieder mal alle 20ms auslöst (nicht
immer) und wenn, dann fällt das Signal nach 5µs wieder ab. Jemand eine
Idee, warum dieses interrupt gesteuerte starten eines Timers nicht auf
diese Weise funktioniert?