Hallo!
Ich habe folgenden Code (um ein Servo anzusteuern) geschrieben (Für
AtMega88 mit AvrStudio 5.0.1038):
1 | #define F_CPU 8000000UL // 8 MHz
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <avr/interrupt.h>
|
5 |
|
6 | uint8_t servo = 0;
|
7 | uint16_t servoCounter = 0;
|
8 |
|
9 | int main(void)
|
10 | {
|
11 | DDRB = 0x0F;
|
12 | DDRD = 0xFF;
|
13 |
|
14 | TCCR0A = (1<<COM0B1)|(1<<WGM00)|(1<<WGM01);
|
15 | TCCR0B = (1<<CS01);
|
16 | TIMSK0 = (1<<OCIE0A)|(1<<TOIE0);
|
17 | OCR0A = 34;
|
18 |
|
19 | TCCR2A = (1<<COM2A1)|(1<<COM2B1)|(1<<WGM20)|(1<<WGM21);
|
20 | TCCR2B = (1<<CS21);
|
21 |
|
22 | sei();
|
23 |
|
24 | while(1)
|
25 | {
|
26 |
|
27 | }
|
28 | }
|
29 |
|
30 | ISR(TIMER0_COMPA_vect)
|
31 | {
|
32 | if(servoCounter > 5818)
|
33 | {
|
34 | servoCounter = 0;
|
35 | PORTD |= (1<<6);
|
36 | }
|
37 | else
|
38 | if(servoCounter > servo/8+28)
|
39 | PORTD &= ~(1<<6);
|
40 | servoCounter++;
|
41 | }
|
Das habe ich jetzt debbugt. Aber in der Memory-view und in der
Watch-view setzt es servoCounter immer wieder auf 0, sobald ich in den
Interrupt eintrete. Habe ich etwas falsch programmiert oder hat es
(noch) einen Fehler im debugger vom AvrStudio 5 beta?
Gruss Erdbewohner