summaryrefslogtreecommitdiff
path: root/src/attiny
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-10-30 19:41:08 -0700
committerKeith Packard <keithp@keithp.com>2012-10-30 19:41:08 -0700
commit371da0c909098092db7b596496df9d58eed43703 (patch)
tree7ce136fb4dda67bba32c5d5141673902311f6324 /src/attiny
parente8a4a00a5bb333d4ee9601d53242a82dfe0372c2 (diff)
altos/micropeak: Clock micropeak at 250kHz to save power
This reduces average current consumption from 2mA to .4mA. This makes the battery last longer, but also gets the current under something that the typical CR1025 battery can support. Would be nice to reduce current even further; cheap CR1025 batteries still seem to fade a bit at this current level. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/attiny')
-rw-r--r--src/attiny/ao_clock.c40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/attiny/ao_clock.c b/src/attiny/ao_clock.c
index a381b47f..b40f59d4 100644
--- a/src/attiny/ao_clock.c
+++ b/src/attiny/ao_clock.c
@@ -39,12 +39,45 @@ ao_time(void)
return r;
}
+#if AVR_CLOCK == 8000000UL
+#define AO_CLKPS 0 /* divide by 1 */
+#define AO_CS 10 /* prescale by 512 */
+#endif
+#if AVR_CLOCK == 4000000UL
+#define AO_CLKPS 1 /* divide by 2 */
+#define AO_CS 9 /* prescale by 256 */
+#endif
+#if AVR_CLOCK == 2000000UL
+#define AO_CLKPS 2 /* divide by 4 */
+#define AO_CS 8 /* prescale by 128 */
+#endif
+#if AVR_CLOCK == 1000000UL
+#define AO_CLKPS 3 /* divide by 8 */
+#define AO_CS 7 /* prescale by 64 */
+#endif
+#if AVR_CLOCK == 500000UL
+#define AO_CLKPS 4 /* divide by 16 */
+#define AO_CS 6 /* prescale by 32 */
+#endif
+#if AVR_CLOCK == 250000UL
+#define AO_CLKPS 5 /* divide by 32 */
+#define AO_CS 5 /* prescale by 16 */
+#endif
+#if AVR_CLOCK == 125000UL
+#define AO_CLKPS 6 /* divide by 64 */
+#define AO_CS 4 /* prescale by 32 */
+#endif
+#if AVR_CLOCK == 62500UL
+#define AO_CLKPS 7 /* divide by 128 */
+#define AO_CS 4 /* prescale by 32 */
+#endif
+
void
ao_timer_init(void)
{
cli();
CLKPR = (1 << CLKPCE);
- CLKPR = 0;
+ CLKPR = (AO_CLKPS << CLKPS0);
sei();
/* Overall division ratio is 512 * 125,
@@ -55,10 +88,7 @@ ao_timer_init(void)
(0 << PWM1A) | /* Not PWM mode */
(0 << COM1A0) | /* Don't change output pins */
(0 << COM1A1) | /* ... */
- (1 << CS13) | /* Prescale by 512 */
- (0 << CS12) | /* ... */
- (1 << CS11) | /* ... */
- (0 << CS10)); /* ... */
+ (AO_CS << CS10)); /* Prescale */
GTCCR = ((0 << PWM1B) | /* Not PWM mode */
(0 << COM1B1) | /* Don't change output pins */
(0 << COM1B0) | /* ... */