Forum: Mikrocontroller und Digitale Elektronik ISR wird nicht aufgerufen FastPWM Attiny2313


von Chris (Gast)


Lesenswert?

Ich werde gleich wahnsinnig. Ich nutze den Timer0 zur FastPWM und würde 
gerne in den ISR der entsprechenden Interrupts das Output Compare 
Register auf einen neuen Wert setzen. Leider springe ich nie in die 
ISRs. Es ist sicher irgendwas blödes, aber ich bin wohl grade 
betriebsblind. Ich habe ein Testprogramm eingefügt. In dem Testprogramm 
setze ich nicht das OCR neu, sondern einen Port Pin auf high.

int main(void)
{
  cli();
  /* OC0A is PIN PB2= PIN 14 */
  DDRB = 0xFF;
  DDRD = 0xFF;

    TCCR0A  =0;
  /* Clear OC0A on Compare Match, set OC0A at BOTTOM --> non inverting 
mode*/
  TCCR0A |= (1<<COM0A1);
  /*Fast PWM*/
  TCCR0A |= (1<<WGM00);
  TCCR0A |= (1<<WGM01);

  TCCR0B=0;
  /* clkI/O/1024 (From prescaler) */
  TCCR0B |= (1 << CS02);
  TCCR0B |= (1 << CS00);

  TIMSK=0;
  /* Timer/Counter0 Output Compare Match A Interrupt Enable */
  TIMSK |= (1 << OCIE0A);
  /* Timer/Counter0 Overflow Interrupt Enable */
  TIMSK |= (1 << TOIE0);

  /* half of the time on and half of the time off */
  OCR0A = 128;

  /*PORTD |= (1 << PORTD6);*/

  sei();
  }

  ISR(TIMER0_COMPA_vect)
  {
    PORTD |= (1 << PORTD6);
  }

  ISR(TIMER0_OVF_vect)
  {
    PORTD |= (1 << PORTD6)  ;
  }

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Und wo ist das while(1); damit der niemals die main() verlässt?
So kann das ja nix werden, weil er dann die 2k Speicher wohl schneller 
durchrennt als er die ISR aufruft und sich somit immerwieder neu 
initialisiert.

von Thomas E. (thomase)


Lesenswert?

Nach dem "sei()" in "main" werden die Interrupts abgeschaltet und der 
Controller bettet sich zur Ruhe, indem er auf der Stelle trampelt, bis 
ihm der Saft abgedreht wird oder er kaputt geht.
Wo ist deine Hauptprogrammschleife?

mfg.

von Chris (Gast)


Lesenswert?

...wusste ichs doch, dass es was blödes ist. :-)

Danke Jungs.

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.