summaryrefslogtreecommitdiff
path: root/pcr-controller/pwm.c
diff options
context:
space:
mode:
Diffstat (limited to 'pcr-controller/pwm.c')
-rw-r--r--pcr-controller/pwm.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/pcr-controller/pwm.c b/pcr-controller/pwm.c
index 918d37b..a4e3863 100644
--- a/pcr-controller/pwm.c
+++ b/pcr-controller/pwm.c
@@ -11,19 +11,23 @@ void pwm_init(void)
TCCR1A = 0;
TCNT1 = 0;
OCR1A = 0;
- TCCR1A = (1<<COM1A1) | (1<<WGM10);
- TCCR1B = (1<<WGM12);
+ TCCR1A = (1<<WGM10); //Fast PWM, 8-bit
+ TCCR1B = (1<<WGM12); //Fast PWM, 8-bit
+ //TCCR1A |= (1<<COM1A1) // Clear OCnA/OCnB/OCnC on compare match when up-counting. Set OCnA/OCnB/OCnC on compare match when downcounting.
}
inline void pwm_on(void)
{
- TCCR1B = (TCCR1A & 0xF8) | (1<<CS10);
+ TCCR1A |= (1<<COM1A1); // Clear OCnA/OCnB/OCnC on compare match when up-counting. Set OCnA/OCnB/OCnC on compare match when downcounting.
+ TCCR1B = (TCCR1B & 0xF8) | (1<<CS10); // enable timer clock, no prescaling
}
inline void pwm_off(void)
{
- TCCR1B = (TCCR1A & 0xF8);
+ TCCR1A &= ~((1<<COM1A1) | (1<<COM1A0)); //normal port operation
+ TCCR1B = (TCCR1B & 0xF8); //no clock source, timer stopped
TCNT1 = 0;
+ PORTB &= ~ (1 << PB5); //set pin to LOW (otherwise it will remain in state since last pwm toggle)
}
void pwm_set(uint8_t val)