da sehe ich schon mal die ersten Fehler, wahrscheinlich nicht kritisch, aber das ist Prozessorspezifisch nicht ungefährlich
du verwendest die Timer1 Flags in den Timer0 Registern COM1A1 ist für Timer1 du brauchst COM0A1 für TCCR0
Die Config sagt mir Fast PWM mit OCRA als TOP und OCRB als COMPARE ... aber du hast OCR1A als Ausgang konfiguriert, was nicht geht weil du Timer 0 verwendest und obendrein das OCRA Register durch die TOP Funktion blockierst! Du musst COM0B1 setzen und OC0B auf PB1 benutzen(Glücklicherweise zufällig derselbe Pin).
Im TCCR0B Register gibt es das WGM01 Flag garnicht, das gehört da nicht hin und CS13 gehört ebenfalls nicht zum Timer0 sondern Timer1 bzw. e gibt garkein CSx3 Flag, keine ahnung wieso der das überhaupt akzeptiert.
also:
Code:
TCCR0A = (1<<COM0B1) + (1<<WGM01) + (1<<WGM00)
TCCR0B = (1<<WGM02) // + gültige CS Bits
WTF ... dein Compiler sollte dich eigentlich mit Warnings erschlagen
Du verwendest einen 8Bit Counter der bis 256 Zählen kann und fütterst ihn mit Werten wie 999 und 370? Das KANN nicht gehen
EDIT: Der Vollständigkeit ein theoretisch funktionierender Code
Code:
DDRB |= (1<<PB1);
OCR0A = 124; //siehe Rechenbeispiel in vorhergehendem Post und es gibt nur einen /8 Prescaler leider
OCR0B = 63; //ca. 50% Duty Cycle
TCCR0A = (1<<COM0B1) + (1<<WGM01) + (1<<WGM00);
TCCR0B = (1<<WGM02) + (1<<CS01); //WGM 111 (fast pwm), clear on match, set on bottom, PS /8
PPS: Sowas gibts bei mir nur ganz selten dazu, aber ich hab eh schon fast alles haarklein erklärt
PPPS: Fehler beim OCR0A REgister korrigiert ... hab die 0 nicht mitgezählt
Lesezeichen