Hello
can someone look at my code and figure out why the duty cycle parameter isn't working here? i'm using timer1 on the Atmega 328 with code i copied from the net https://sites.google.com/site/qeewiki/books/avr-guide/pwm-on-the-atmega328 (https://sites.google.com/site/qeewiki/books/avr-guide/pwm-on-the-atmega328)
// BLINK the yellow (line D9) LED with period 2s, brightness grows and cycles every 8 periods
#include <avr/io.h>
int x = 0;
void setup() {
// setup fast PWM, timer1 rolls over every 32 units
ICR1 = 32;
TCCR1A |= (1 << COM1A1)|(1 << WGM11);
TCCR1B |= (1 << WGM12)|(1 << WGM13);
}
void loop() {
x += 4;
OCR1A = x%32; // Duty cycle = (x mod 32)/32
DDRB |= (1 << DDB1); // set pin D9 to output
TCCR1B |= (1 << CS10); // enable timer1
delay(1000);
DDRB &= ~(1 << DDB1); // D9 = input
TCCR1B &= ~(1 << CS10); // disble timer1
delay(1000);
}
when i load and run the program, the LED goes full on, full off, 100%, 0%, with no gradation in between. OCR1A is supposed to be the duty cycle to fade the LED up and down, but it doesn't.