Hi!
Ich weiß, dass das hier sicher schon öfter Thema war, aber ich kriegs mit den Beiträgen trotzdem nicht hin.
Ich habe eine Evaluierungsplatine mit einem ATmega16 drauf. An dessen PortC sind 8 LEDs fest angeschlossen (jeweils eine LED pro Pin).
Ich möchte das alle LEDs, wenn ich sie anschalte, gleichzeitig gedimmt sind. Da ich ja mit einem Timer den ich im PWM-Betrieb nutze nur einen Pin steuern kann, muss ich das mit SoftPWM machen. Ist das richtig?
Unten ist mein Code, wie ich das versucht habe mit SoftPWM zu realisieren. Problem ist, dass die LEDs scheinbar überhaupt nicht gedimmt werden, egal welchen Wert ich für OCR0 einstelle. Bei der Code-Version unten leuchten die LEDs noch nicht einmal. Geht das so gar nicht wie ich das versuche?
Vielen Dank!Code:#include <avr/io.h> #include <avr/interrupt.h> int main() { //LED-Port als Ausgang DDRC = 255; //LEDs an PORTC = 0; //Timer0 auf CTC-Betrieb setzen TCCR0 |= (1 << WGM01) | (0 << WGM00); //Vorteiler auf 1024 setzen TCCR0 |= (1 << CS02) | (0 << CS01) | (1 << CS00); //Vergleichswert für CTC-Betrieb setzen OCR0 = 200; //Compare-Match-Interrupt und Overflow-Interrupt für Timer0 aktivieren TIMSK|= (1 << OCIE0) | (1 << TOIE0); //Globale Interrupts aktivieren sei(); while(1) { } return 0; } //LEDs sind an von 255 bis OCR0: //Funktion die aufgerufen wird, wenn TCCR0 = OCR0 ISR(TIMER0_COMP_vect) { //LEDs aus PORTC = 255; } //Funktion die aufgerufen wird wenn Timer 0 wieder bei 0 anfängt ISR(TIMER0_OVF_vect) { //LEDs an PORTC = 0; }
Gruß
.patrick







Zitieren

Lesezeichen