33 lines
840 B
C
33 lines
840 B
C
#include <avr/io.h>
|
|
|
|
int main(void) {
|
|
// 1. Set PB1 (OC1A) as output
|
|
DDRB |= (1 << PB1);
|
|
|
|
// 2. Fast PWM mode (WGM13:0 = 14)
|
|
TCCR1A = (1 << COM1A1) | (1 << WGM11);
|
|
TCCR1B = (1 << WGM12) | (1 << WGM13);
|
|
|
|
// 3. Prescaler = 8 (start timer)
|
|
TCCR1B |= (1 << CS11);
|
|
|
|
// 4. Set TOP value (frequency)
|
|
ICR1 = 19999; // ~50 Hz (good for visible LED dimming demo)
|
|
|
|
// 5. Initial duty cycle
|
|
OCR1A = 0;
|
|
|
|
while (1) {
|
|
// Increase brightness
|
|
for (uint16_t i = 0; i < 2000; i++) {
|
|
OCR1A = i * 10; // increase duty
|
|
for (volatile uint32_t d = 0; d < 5000; d++); // small delay
|
|
}
|
|
|
|
// Decrease brightness
|
|
for (int16_t i = 2000; i > 0; i--) {
|
|
OCR1A = i * 10;
|
|
for (volatile uint32_t d = 0; d < 5000; d++);
|
|
}
|
|
}
|
|
} |