Forum: Mikrocontroller und Digitale Elektronik Debuggingfehler AvrStudio 5?


von Raphael F. (erdbewohner)


Lesenswert?

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

von 123gast (Gast)


Lesenswert?

Versuchs mal mit volatile...

von Raphael F. (erdbewohner)


Lesenswert?

nein, das geht nicht. Auch in der disassembly ansicht finde ich nicht 
heraus, warum die variable immer wieder auf null gesetzt wird.
Aber das Debugging hat noch ein paar andere Macken (schon in der 4-er 
version). Ich versuche es jetzt halt gleich ohne.
Danke Trotzdem
Erdbewohner

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.