Abend zusammen.
Ich benutze den compare Interupt von Timer1.
Dies funktioniert auch ohne Probleme wenn ich meine Ausgabe direkt in
die ISR schreibe.
Jetzt habe ich eine voaltile Variable deklariert,die in der ISR
inkrementiert wird.
In einer Unterfunktion wird dann die Ausgabe ausgeführt.
Nur leider funktioniert es jetzt nicht mehr und ich finde den Fehler
einfach nicht.
Hier mal der Code:
1 | volatile unsigned int timer1 ;
|
2 |
|
3 | //--------------------------------------------
|
4 | //Einschalten des Interrupts von Timer 1 COMPA
|
5 | //--------------------------------------------
|
6 |
|
7 | void trapan()
|
8 | {
|
9 | // Timer 1 16bit
|
10 | //Setzen des Prescalers auf 1024, Einschalten des compare Modus
|
11 | TCCR1B |= (1<<CS12) | (1<<CS10) | (1<<WGM12);
|
12 | // Berechnung der Zeit
|
13 | //Frequenz 18432000 Hz
|
14 | //Prescaler 1024
|
15 | // (18432000/1024) = 18000 entspricht 1s
|
16 | // (18432000/1024)*2=36000 entspricht 2s
|
17 | // (18432000/1024)*3=54000 entspricht 3s
|
18 | OCR1A=54000-1;
|
19 | // compare interrupt erlauben
|
20 | TIMSK1 |= (1<<OCIE1A);
|
21 | // Global Interrupts aktivieren
|
22 | sei();
|
23 | }
|
24 |
|
25 | //------------------------------
|
26 | //Timer 1 COMPA Interrupt Vektor
|
27 | //------------------------------
|
28 |
|
29 | ISR (TIMER1_COMPA_vect)
|
30 | {
|
31 |
|
32 | timer1++;
|
33 | }
|
34 | //---------------------
|
35 | //Ausgabe bei Interrupt
|
36 | //---------------------
|
37 |
|
38 | void trap (volatile unsigned int timer1)
|
39 | {
|
40 | if(timer1>=20)
|
41 | {
|
42 | //Initialisierung Ausgabestring
|
43 | char z[]="Pause!!!!!";
|
44 | //Ausgabe des strings
|
45 | uart_puts (z);
|
46 | //Ausgabe des strings auf dem Lcd
|
47 | lcdausgabe(z);
|
48 | timer1 = 0;
|
49 | }
|
50 |
|
51 | }
|
52 |
|
53 | int main(void)
|
54 | {
|
55 |
|
56 |
|
57 |
|
58 |
|
59 | while(1)
|
60 | {
|
61 | void trap ();
|
62 |
|
63 | }
|
64 | return 0;
|
65 |
|
66 | }
|
Also das ganze ist Teil eines Terminalservers.
Ich lese über uart einen Befehl ein.
Damit kann ich den Timer aktivieren.
Das funktioniert auch alles, wenn ich die Ausgabe von trap() direkt in
die ISR reinschreibe. Sobald ich es so wie im geposteten Code mache geht
es nicht mehr.
Im Anhang hab ich mal meinen ganzen Code hochgeladen.
Hoffe mir kann jemand helfen.
Bin jetzt schon ewig am rumsuchen und finde den Fehler einfach nicht
gruß Matze