AVR Mega 8, Capture-Match und Overflow Interrupt für Soft PWM

OP #2624628
Hallo,

ich versuche gerade eine Soft-PWM mit dem Capture-Match und dem 
Overflow-Interrupt von Timer1 zu entwerfen. Das Programm soll zur 
Helligkeitssteuerung von LEDs verwendet werden. Die definierten Werte 
sind frei gewählt (ohne PWM-Frequenzberechnung). Im späteren Programm 
soll der Compare wert über Taster verstellbar sein.
In einem Beitrag habe ich gelesen, dass PWM mit den beiden Interrupts 
anscheinend nicht funktionieren sollte, jedoch verstehe ich das nicht. 
Ist an der Überlegung etwas falsch oder kommen sich da einfach die 
beiden Interrupts in die Quere?

#define VORLADEWERT 20000UL
#define COMPARE 50000UL

void main(void)
{
  DDRC=0xFF;
  PORTC=0x00;
        //Prescaler auf 1, Timer läuft nach Compare weiter
  TCCR1B|=(1<<CS10);
        //Interrupt für Compare Mode A frei, Timer Overflow frei
  TIMSK|=((1<<OCIE1A)|(1<<TOIE1));
  TCNT1= VORLADEWERT;
  OCR1A=COMPARE;
  sei();

  while(1);

}

ISR (TIMER1_OVF_vect)
{
  TCNT1=VORLADEWERT;
  PORTC=0x00;
}

ISR (TIMER1_COMPA_vect)
{
  PORTC=0xFF;
}

Gruß,
Tom
OP
Danke für den Tipp.
Würde das beispielsweise so aussehen?

void main(void)
{
  DDRC=0xFF;
  PORTC=0x00;

  ICR1=0x0FFF;
  OCR1A=0x00FF;
  OCR1B=0x00AFF;

//Mode 14, Prescaler 1
  TCCR1B|=((1<<WGM13)|(1<<WGM12)|(1<<CS10));
//Mode 14
  TCCR1A|=((1<<WGM11)|(0<<WGM10));
//Interrupts aktivieren
  TIMSK|=((1<<OCIE1A)|(1<<OCIE1B));

  sei();

  while(1);

}

ISR (TIMER1_COMPB_vect)
{
  PORTC=0x00;
}

ISR (TIMER1_COMPA_vect)
{
  PORTC=0xFF;
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.