Forum: Compiler & IDEs alle Timer gleichzeitig - funktioniert nicht


von Stier (Gast)


Lesenswert?

Abend,

möchte gerne Nachfragen ob man gleichzeitig mehrere Timer gleichzeitig 
benutzen kann.

Habe einen Code mit dem ich Timer0 und Timer2 ans laufen gebracht habe.

Timer0 für Tastenentprellung
Timer2 für eine Stoppuhr (die ich an und ausmache)

wenn ich den Timer1 noch hinzufüge funktioniert der gesamte Code nicht 
mehr. Timer1 ohne Timer0 und ohne Timer2 lauft sehr gut. Doch alle 
gleichzeitig funktioniert nicht. Im Debug Modus durchläuft der Code die 
gesamte Routine. In der while-Schleife kommt er nur 3 Zeilen weit und 
beginnt dann wieder von vorne (main()).
1
int main(void) {
2
    ...
3
    TCCR0 = (1<<CS02) | (1<<CS00);
4
    TCCR1B = (1<<WGM12) | (1<<CS10);
5
    OCR1A = XTAL / DEBOUNCE - 1;
6
    TCNT1 = 0;
7
    TCCR2 = (1<<CS21) | (1<<WGM21);
8
    TCNT2 = 0;
9
    OCR2 = 49;
10
11
    TIMSK |= (1<<OCIE1A) | (1<<TOIE0);
12
    sei();
13
    while(1) {
14
        ...
15
    }
16
}

Wie gesagt Timer2 Stoppuhr aktiviere ich mittels Buttons.

von Falk B. (falk)


Lesenswert?

@  Stier (Gast)

>möchte gerne Nachfragen ob man gleichzeitig mehrere Timer gleichzeitig
>benutzen kann.

Ja.

>Habe einen Code mit dem ich Timer0 und Timer2 ans laufen gebracht habe.

Das ist ein anderes Problem ;-)

>Timer0 für Tastenentprellung
>Timer2 für eine Stoppuhr (die ich an und ausmache)

Macht man zusammen in einem Timer.

MFG
Falk

von Karl H. (kbuchegg)


Lesenswert?

Stier schrieb:

> gesamte Routine. In der while-Schleife kommt er nur 3 Zeilen weit und
> beginnt dann wieder von vorne (main()).

Dann rate ich mal:
Du hast einen Interrupt freigegeben, für den du keine ISR hast.

von Stier (Gast)


Lesenswert?

wie finde ich diesen Interrupt?

von Stier (Gast)


Lesenswert?

Was halt auffällig ist, dass alle Timer unabhängig funktionieren, aber 
alle zusammen nicht!

von (prx) A. K. (prx)


Lesenswert?

Beispielsweise durch den Vergleich von den im Quellcode aktivierten 
Interrupts mit den dort implementierten Handlern.

Alternativ durch den Einsatz eines Hardware-Debuggers, der dir beim 
Steppen irgendwann wegfliegt und in der Sprungleiste landet.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Stier schrieb:
> Was halt auffällig ist, dass alle Timer unabhängig funktionieren, aber
> alle zusammen nicht!

Zeig uns doch mal deine Interrupthandler.

Gruß,
Magnetus

von Stier (Gast)


Angehängte Dateien:

Lesenswert?

Anhang

von Michael H. (michael_h45)


Lesenswert?

Für die Compare-Vectoren fehlt die angabe, WELCHER Compare-Wert es denn 
werden soll.
Ignorierst du compilerwarnings?

von Hc Z. (mizch)


Lesenswert?

Welcher µC?  Wenn's nicht AT90S2333, AT90S4433 oder ATtiny15 ist, hast 
Du mit ISR(TIMER1_COMP_vect) keine gültige Interrupt-Routine erstellt.

Nähere Auskunft gibt Dir gerne die freundliche Dokumentation zur 
avr-libc, Abschnitt avr/interrupts.h, zu finden z.B. in 
http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html.

von Stier (Gast)


Lesenswert?

Habe den Atmega 8 hier aus dem Shop bestellt. Compilerwarnings ignoriere 
ich so ziemlich. Dachte Warnings sind keine Errors.

von Karl H. (kbuchegg)


Lesenswert?

Stier schrieb:
> Habe den Atmega 8 hier aus dem Shop bestellt. Compilerwarnings ignoriere
> ich so ziemlich. Dachte Warnings sind keine Errors.

Das ist die richtige Einstellung.
Compilerbauer bauen die auch nur so zum Spass ein.

von Huch (Gast)


Lesenswert?

Warnings sind die weiss-roten Absperrbänder vor einer Baugrube. Bei 
nem Error liegst Du schon drin.

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.