#include <avr/io.h>
#include "backlight.h"
+#define CHANNEL OCR1C
void backlight_init_ports()
{
+
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
-
- // Default to zero duty cycle.
- OCR1C = 0x0000;
+
+ backlight_init();
}
void backlight_set(uint8_t level)
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
+ CHANNEL = 0x0;
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
}
- else
+ else if ( level == BACKLIGHT_LEVELS )
{
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
- OCR1C = level << 12 | 0x0FFF;
+ // Set the brightness
+ CHANNEL = 0xFFFF;
}
-}
-
+ else
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+ // Set the brightness
+ CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
+ }
+}
\ No newline at end of file