Hallo zusammen,
ich möchte dass meine Steuerung, sofern sie den Kontakt zum Computer
verliert in einen sicheren Zustand geht.
Um dies zu erreichen möchte ich den Timer2 des ATmega 644PA nutzen.
Der Computer soll dabei per UART spätestens alle 30 Sekunden eine
Variable zurücksetzen müssen, damit das System nicht in den sicheren
Zustand geht.
Die UART-Funktionen funktionieren schon alle.
Mit fehlt nur noch der Timer.
Die anderen Timer sind schon für PWM in Betrieb, daher muss ich leider
mit dem 8-bit Timer vorlieb nehmen.
Dieser ist, sofern ich das Datenblatt richtig verstehe sowieso immer am
laufen und zählt immer die 8 bit voll und beginnt dann von vorne.
Ich möchte einfach bei jedem Überlauf eine Zählvariable incrementieren,
die dann, wenn sie einen bestimmten Wert erreicht, meine maximale
akzeptable Dauer ohne Signal vom PC darstellt.
Das hier ist mein Codeversuch:
1 | uint8_t sicherheitsflag=0;
|
2 | volatile uint16_t zeit=0;
|
3 | uint8_t systemAus=0;
|
4 |
|
5 | void init_saeftyTimer()
|
6 | {
|
7 | TCCR2B |= (1 << CS22)|(1 << CS21)|(1 << CS20); // 18,4320MHz / 1024 = 18kHz
|
8 | //Überlauf nach: 0,0142857143 Sekunden
|
9 | //30 Sekunden = 2100 Überläufe
|
10 | // Interrupt TOV2
|
11 | }
|
12 |
|
13 | ISR(TIMER2_OVF_vect_num) // Interrupt-Service-Routine
|
14 | {
|
15 | zeit++;
|
16 | }
|
17 |
|
18 | void saeftyTimer()
|
19 | {
|
20 | if (sicherheitsflag==1)
|
21 | {
|
22 | zeit=0;
|
23 | sicherheitsflag=0;
|
24 | }
|
25 | if (zeit>=2100)
|
26 | {
|
27 | systemAus=1;
|
28 | zeit=0;
|
29 | }
|
30 | }
|
Allerdings meckert er bei der ISR:
"expected declaration specifiers or '...' before numeric constant"
Was ist mein Fehler?
Und ist der Ansatz sonst so ok?
Vielen Dank :-)