Add timer interrupt + PWM work
This commit is contained in:
33
PWM-generator/main.c
Normal file
33
PWM-generator/main.c
Normal file
@@ -0,0 +1,33 @@
|
||||
#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++);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user