Hallo Zusammen,
ich habe ein kleines Timerproblem.
Zur Steuerung eines Motors über eine Fernbedienung verwende ich für die
Fernbedienung die RC5 Bibliothek von Peter.
Damit der Motor ohne ruckeln läuft, möchte ich einen zweiten Timer
verwenden, der nach einer einstellbaren Zeit den Motor abschaltet, falls
die gleiche Taste nicht wiederholt gesendet wird.
Leider schaffe ich es nicht, den Overflow des zweiten Timers zu
produzieren.
Alle Routinen laufen einzeln ohne Probleme, lediglich der Overflow für
den zweiten Timer wird nicht ausgelöst.
Hier mein Codeausschnitt:
1 | void restartTimer() {
|
2 | timerHighByte = 0;
|
3 | TCNT1 = 0;
|
4 | TCCR1B |= 1<<CS12;
|
5 | }
|
6 |
|
7 | void stopTimer() {
|
8 | TCCR1B &= ~(1 << CS12);
|
9 | }
|
10 |
|
11 |
|
12 | void MotorOff(void)
|
13 | {
|
14 | }
|
15 |
|
16 | void motor_left_on( void )
|
17 | {
|
18 | stopTimer();
|
19 | if ( MotorRightIsOn == MOTOR_ON )
|
20 | {
|
21 | MotorOff();
|
22 | }
|
23 | if ( MotorLeftIsOn != MOTOR_ON )
|
24 | {
|
25 | MotorLeftOn();
|
26 | }
|
27 | restartTimer();
|
28 | }
|
29 |
|
30 | SIGNAL (SIG_OVERFLOW1)
|
31 | {
|
32 | timerHighByte++;
|
33 | if ( timerHighByte >= MOTOR_ON_TIME )
|
34 | {
|
35 | MotorOff();
|
36 | }
|
37 | }
|
38 |
|
39 | void main(void)
|
40 | {
|
41 | // von Peter für RC5 funktioniert!!!
|
42 | TCCR0 = 1<<CS02; //divide by 256
|
43 | // Meiner, funktioniert nicht!!!
|
44 | TCCR1B = 1<<CS12; //divide by 256
|
45 | TIMSK = 1<<TOIE0^1<<TOIE1; //enable timer interrupt
|
46 |
|
47 | sei();
|
48 | motor_left_on();
|
49 | }
|
Gruss und Danke für jede Hilfe
Frank