Hallo,
ich bastle seit Tagen an einem Problem:
Ziel ist es ein Servosignal, momentan von einem ServoTester später
funkempfänger, auszuwerten.
Hardware: Atmega328 auf 20MHz. Intialisiert sind:
Timer1 (16bit) - normal mode, no prescaling d.h. overflow bei ca 3,2ms
INT0 - rising edge (hier liegt das signal an)
Das ist mein code. alle variablen sind volatile und rising ist mit 1
initialisiert.
1 | ISR(INT0_vect)
|
2 | {
|
3 | if(rising == 1) //also rising edge
|
4 | {
|
5 | start = ((uint16_t)TCNT1H << 8) | TCNT1L; //Timer auslesen
|
6 |
|
7 | rising = 0;
|
8 | EICRA &= ~(1 << ISC00); //jetzt auf fallende flanke triggern
|
9 | }
|
10 | else
|
11 | {
|
12 | end = ((uint16_t)TCNT1H << 8) | TCNT1L; //Timer auslesen
|
13 | rcsig = end - start;
|
14 |
|
15 | rising = 1;
|
16 | EICRA |= (1 << ISC00);
|
17 | }
|
18 | }
|
in der main teste ich folgendermaßen:
1 | while(1)
|
2 | {
|
3 |
|
4 | if (rcsig > 30000) //30000 entspricht 1,5ms also genau hälfte
|
5 | color[0] = 255;
|
6 | else
|
7 | color[0] = 0;
|
8 |
|
9 | }
|
leider leuchtet die led garnicht. ich hab jetzt schon verschiedenes
ausprobiert aber weiß mittlerweile nicht mehr weiter.
vielleicht könnt ihr mir helfen!
viele Grüße Alex