Hallo,
ich möchte mithilfe des Timer1 einen Pin ein- und ausschalten, immer
dann, wenn der Zähler 200 überschreitet.
Ich verwende einen Attiny45 (Fuses: (low)E2 (high)DF (extended)FF) mit
der "neuesten" Winavr-Version, avrdude 5.10, und dem angehängten
makefile.
Dieser Code funktioniert:
1 | #include <avr/io.h>
|
2 |
|
3 | int main(void)
|
4 | {
|
5 |
|
6 | DDRB |= (1 << PB0)
|
7 |
|
8 | TCCR1 |= (1 << CS10) | (1 << CS11) | (1 << CS13);
|
9 |
|
10 | while(1)
|
11 | {
|
12 | asm volatile("NOP");
|
13 | if(TCNT1 > 200)
|
14 | {
|
15 | PORTB ^= (1 << PB0);
|
16 | TCNT1=0;
|
17 | }
|
18 | }
|
19 | }
|
Bei diesem Code schaltet PB0 nicht! Die if-Klammer wird nie ausgeführt.
1 | #include <avr/io.h>
|
2 |
|
3 | int main(void)
|
4 | {
|
5 |
|
6 | DDRB |= (1 << PB0);
|
7 |
|
8 | TCCR1 |= (1 << CS10) | (1 << CS11) | (1 << CS13);
|
9 |
|
10 | while(1)
|
11 | {
|
12 | if(TCNT1 > 200)
|
13 | {
|
14 | PORTB ^= (1 << PB0);
|
15 | TCNT1=0;
|
16 | }
|
17 | }
|
18 | }
|
woran kann das liegen?
danke im voraus,
adrian