#include <avr/io.h>
void pwm_init() {
// Setăm pinul OC1A (de ex. pinul digital 9 pe Arduino UNO) ca output
DDRB |= (1 << PB1);
// Setăm Timer1 în mod Fast PWM, cu TOP în ICR1
TCCR1A = (1 << COM1A1) | (1 << WGM11); // Clear OC1A on compare match
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10); // No prescaler
// Frecvență PWM = f_clk / (TOP + 1)
// Pentru f_clk = 16 MHz și perioadă de 250 µs => f = 4 kHz
// => TOP = (16,000,000 * 0.00025) - 1 = 3999
ICR1 = 3999;
// Duty cycle de 25% => OCR1A = 25% din 3999 = 1000
OCR1A = 1000;
}
int main(void) {
pwm_init();
while (1) {
// PWM este generat automat de hardware, nu e nevoie de cod suplimentar
}
}