Hallo Leute,
Ich hab neulich angefangen, mit Mikrocontrollern zu experimentieren und hab mir nen Atmega 16 gekauft... Zusätzlich benutze ich das Buch von Elektor "AVR Hardware und C-Programmierung in der Praxis". Ich habe jetzt angefangen mit PWM zu arbeiten. Allerdings schaffe ich es nicht, dass sich der OCR0 Wert verändert. Ich habe folgendes Programm:
Der Sinn ist, eine LED zu faden... also von dunkel bis hell. Aber es klappt nicht. Der Wert von OCR0 verändert sich nicht.Code:#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> uint8_t wert; void delay_ms(uint16_t ms) { for(uint16_t t=0; t<=ms; t++) _delay_ms(1); } // Timer/Counter0 Overflow ISR (TIMER0_OVF_vect) { PORTD |= (1 << PD0); // PD0 ein } // Timer/Counter0 Compare Match ISR (TIMER0_COMP_vect) // Wenn OCR0 Wert erreicht wird { PORTD &= ~(1 << PD0); // PD0 aus } void main(void) { DDRD |= (1 << DDD0) | (1 << DDD1) ; // PORTB als Ausgang wert = 10; TIMSK |= (1 << TOIE0) | (1 << OCIE0); // IRQ bei Überlauf + Compare Match OCR0 = wert; // Vergleichswert 128 einstellen sei(); // IRQs enable PORTD |= (1 << PD0); // PB0 TCCR0 |= (1 << CS02); // Prescaler: 1/1024 (CS1=0 per default) (1 << CS00) | while (1); // endlos { delay_ms(100); if(wert >= 240) wert = 10; else wert++; OCR0 = wert; } return 0; }
Vielen Dank schonmal im voraus.
MfG
RP6fahrer







Zitieren

Lesezeichen