Forum: Mikrocontroller und Digitale Elektronik AVR Simulator bleibt beim setzen von OCRx stehen


von Thomas H. (thomashh)


Lesenswert?

Hallo liebe Gemeinde!

Ich habe das Problem, dass der AVR SImulator bei der Timerbehandlung 
unter bestimmten Bedingungen einfach nicht weitermacht.

Folgender Code (Auszug) funktioniert:
1
OCR2 = PINC;
2
if (OCR2 > 0)
3
  { TCCR2 = 0x69;
4
  }
5
else
6
  { TCCR2 = 0x29;
7
  }
Wenn ich nun während der Simulator läuft PINC ändere, ändert sich auch 
OCR2 und meine PWM AUsgabe wird an OC2 prima simuliert.

Nun will ich OCR2 per Tasten an INT0 und INT1 ändern können.
Dazu
1
MCUCR &= 0xF0; //Bit 0 und 2 löschen;
2
MCUCR |= 0x0A; //Bit 1 und 3 setzen - negative Flanke an den Interrupts
Die Interruptroutinen (auch wenn für das Problem nicht wirklich 
wichtig):
1
ISR( INT0_vect )      // Heizung höherstellen
2
{
3
  if (heizstufe <= 19) heizstufe += 1;
4
}
5
6
ISR( INT1_vect )      // Heizung runterstellen
7
{
8
  if (heizstufe >= 1 ) heizstufe -=1;
9
}

nun der Programmteil, in dem Einfluß auf den Timer zwecks PWM Ausgabe 
genommen werden soll.
1
  while (1)
2
  {
3
    // HeizungsPWM stellen
4
    
5
    if (heizstufe >= 1)
6
    {
7
      TCCR2 = 0x69;
8
      OCR2 = (int)255 / 20 * heizstufe;
9
    }
10
    if (heizstufe = 0)
11
    {
12
      TCCR2 = 0x29;
13
      OCR2 = 0;
14
    }
15
  }
wenn ich für die heizstufe 0 vorgebe, läft der Simulator bis zur Zeile 
OCR2=0, der Timer läuft einmal durch und der Prozessor läuft.
bei einem höheren Wert komme ich bis zur Zeile OCR2 = (int..... und dort 
bleibt alles stehen.
Das passiert auch wenn ich statt dem Cast einen hex, oder dez Wert 
übergebe. Wenn ich das Ganze an das STK500 sende, kann ich auch nicht 
feststellen, ob der Timer richtig tut. Habe eine LED auf OC2 (PWM 
Ausgang) gelegt und zwei Taster auf INT0/INT1.
Nun müsste nach spätestens 20 Tastendrücken auf INT1 die LED mal 
ausgehen.
Tut sie aber nicht und ich kann nicht unterscheiden,ob da nun die 
Interruptbehandlung faul ist, oder eben der Timer im Prozessor 
genausowenig läuft, wie im Simulator, bzw. der Proz ebenso steht.

Jemand eine Idee?

Ach ich vergaß: Ist AVR Studio 4 (6 will bei mir nicht recht) und der 
Proz ist ein ATMega32

Gruß Thomas

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.