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
Tom V. schrieb: > In einem Beitrag habe ich gelesen, dass PWM mit den beiden Interrupts > anscheinend nicht funktionieren sollte, Klar funktioniert das. Aber statt "Vorladen" würde ich Mode 14 mit ICR1 als TOP nehmen. Das erleichtert auch das Festlegen des Compare-Wertes.
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;
}
Tom V. schrieb: > Würde das beispielsweise so aussehen? Kommt darauf an, was du eigentlich genau machen willst. Warum jetzt auf einmal der zweite Compare-Interrupt, statt des Overflow-Interrupts? Davon abgesehen: erst Mode setzen, dann ICR1 beschreiben.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.