Gast
#6074171
Hallo, nach langer Zeit ohne Mikrocontroller wollte ich mal schnell ne PWM mit nem ATTINY45 über Timer0 an PB0 und PB1 erzeugen,und ich kriegs nicht hin, kann aber den Fehler nicht finden - die LEDS bleiben einfach dunkel. Mein Probeaufbau läuft, wenn ich die die Pins als Ports direkt auf eins setze, leuchten die LEDS, übers OCR0A/B-Register gehts aber nicht. Hab lange im Datenblatt alles fünffach gegengecheckt und auch im Netz recherchiert, meiner Meinung nach mache ich alles richtig, aber offensichtlich nicht.Wenn da irgendwer mal rüberschauen könnte, wäre ich sehr dankbar, ich seh es einfach nicht. Oben kurz die meine Initialisierung des Timers, darunte das komplette Programm, was so funktioniert, nur eben die PWM-Ausgabe nicht... Danke an alle helfende Augen! ****TIMER_INIT**** void init_timer0() { //timer_0, fast PWM, clear on compare match TCCR0A |= (1<<COM0A1) | (1 << COM0B1) |(1<<WGM01)|(1<<WGM00); // no prescaling TCCR0B |= (1 << CS00); } ****KOMPLETTES PROGRAMM**** #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #define button_down (!(PINB & (1 << PINB2))) #define gruen_pin PB0 #define rot_pin PB1 #define blau_pin PB4 #define poti_pin PB3 void init_timer0() { //timer_0, fastPWM, clear on compare match TCCR0A |= (1<<COM0A1) | (1 << COM0B1) |(1<<WGM01)|(1<<WGM00); // no prescaling TCCR0B |= (1 << CS00); } void rot_mode() { OCR0A = 255; OCR0B = 0; PORTB = (1 << blau_pin); } void gruen_mode() { OCR0A = 255; OCR0B = 0; PORTB |= (1 << blau_pin); } void fade_mode() { OCR0A = 100; OCR0B = 100; PORTB &= ~(1 << blau_pin); } void blink_mode() { OCR0A = 0; OCR0B = 0; } int main(void) { ////Ausgänge DDRB |= (1 << rot_pin) | (1 << gruen_pin) | (1 << blau_pin); ////Eingänge //Taster DDRB &= ~(1 << PINB2); //POTI DDRB &= ~(1 << PINB3); //interne Pullups hoch PORTB |= (1 << PB2); //Timer initialisieren init_timer0; uint8_t flag_mode = 0; while(1) { if (button_down) { while (button_down) { } flag_mode++; if (flag_mode == 4) { flag_mode = 0; } } switch(flag_mode) { case 0: rot_mode(); break; case 1: gruen_mode(); break; case 2: fade_mode(); break; case 3: blink_mode(); break; default: break; } } }