Hallo,
ich brauche eine präzise Wartefunkion. Daher habe ich folgendes gemacht:
1 | uint8_t t = 0;
|
2 |
|
3 | void ton(void)
|
4 | {
|
5 | TCCR1B = (1<<CS11) | (1<<WGM12);
|
6 | OCR1A = 200;
|
7 |
|
8 | }
|
9 |
|
10 |
|
11 | ISR (TIMER1_COMPA_vect)
|
12 | {
|
13 | t++;
|
14 |
|
15 | }
|
16 |
|
17 | void warte(uint16_t delay)
|
18 | {
|
19 | ton();
|
20 | while(t<delay){}
|
21 | TCCR1B = 0;
|
22 | t=0;
|
23 |
|
24 |
|
25 | }
|
Warum funktioniert das nicht?
Ich habe mit einem Logicanalyser festellen können, dass der
Interrupthandler zwar immer wieder aufgerufen wird, und auch t wird
immer wieder mit 1 addiert, aber das problem ist, dass er die
whileschleife immer als wahr anssieht, so wie es mir scheint.
Wäre nett wenn jemand mal drübersehen könnte.
Gruß