summaryrefslogtreecommitdiff
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
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>
-rw-r--r--src/attiny/ao_clock.c40
-rw-r--r--src/micropeak/ao_pins.h2
2 files changed, 36 insertions, 6 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) | /* ... */
diff --git a/src/micropeak/ao_pins.h b/src/micropeak/ao_pins.h
index 67de1a8e..cf5951df 100644
--- a/src/micropeak/ao_pins.h
+++ b/src/micropeak/ao_pins.h
@@ -32,7 +32,7 @@
#define HAS_MS5611 0
#define HAS_EEPROM 0
#define HAS_BEEP 0
-#define AVR_CLOCK 8000000UL
+#define AVR_CLOCK 250000UL
/* SPI */
#define SPI_PORT PORTB