From 4c6cb2e5c4748502cbd26d3bd38e490ebead197f Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 15 Jan 2016 20:27:22 +0100 Subject: turn modem voltage divider off during sleep needs hw revision >= git commit 71f427bd100963b1aafb545bfca319c50e1c48cd --- src/main.cc | 12 +++++++++--- src/modem.cc | 14 ++++++++++++-- src/modem.h | 3 ++- src/system.cc | 9 +++++++-- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main.cc b/src/main.cc index eb523ce..03cdabd 100644 --- a/src/main.cc +++ b/src/main.cc @@ -33,8 +33,14 @@ int main (void) // raise timer interrupt on counter overflow (-> interrupt frequency = ~4kHz) TIMSK0 = _BV(TOIE0); - disp[0] = 0xff; - disp[1] = 0xaa; + disp[0] = 0x01; + disp[1] = 0x02; + disp[2] = 0x04; + disp[3] = 0x08; + disp[4] = 0x10; + disp[5] = 0x20; + disp[6] = 0x40; + disp[7] = 0x80; #if 0 // smile! @@ -72,7 +78,7 @@ int main (void) disp[31] = 0x00; #endif - modem.init(); + modem.enable(); sei(); diff --git a/src/modem.cc b/src/modem.cc index cb3a6ee..2eae685 100644 --- a/src/modem.cc +++ b/src/modem.cc @@ -28,7 +28,7 @@ uint8_t Modem::buffer_available() { * Store 1 byte in ringbuffer */ static inline void modem_buffer_put(const uint8_t c) { - if (modem.buffer_available() != MODEM_BUFFER_SIZE) { + if (modem.buffer_available() != MODEM_BUFFER_SIZE) { modem_buffer[modem_buffer_head++ % MODEM_BUFFER_SIZE] = c; } } @@ -83,7 +83,11 @@ ISR(PCINT3_vect) { /* * Start the modem by enabling Pin Change Interrupts & Timer */ -void Modem::init() { +void Modem::enable() { + /* Enable R1 */ + DDRA |= _BV(PA3); + PORTA |= _BV(PA3); + /* Modem pin as input */ MODEM_DDR &= ~_BV(MODEM_PIN); @@ -94,3 +98,9 @@ void Modem::init() { /* Timer: TCCR1: CS10 and CS11 bits: 8MHz clock with Prescaler 64 = 125kHz timer clock */ TCCR1B = _BV(CS11) | _BV(CS10); } + +void Modem::disable() +{ + PORTA &= ~_BV(PA3); + DDRA &= ~_BV(PA3); +} diff --git a/src/modem.h b/src/modem.h index 9c629a5..a37d7d8 100644 --- a/src/modem.h +++ b/src/modem.h @@ -27,7 +27,8 @@ class Modem { Modem() {}; uint8_t buffer_available(void); uint8_t buffer_get(void); - void init(void); + void enable(void); + void disable(void); }; extern Modem modem; diff --git a/src/system.cc b/src/system.cc index 9aaa62b..b98e687 100644 --- a/src/system.cc +++ b/src/system.cc @@ -34,6 +34,8 @@ void System::loop() // turn off display to indicate we're about to shut down display.turn_off(); + modem.disable(); + // wait until both buttons are released while (!((PINC & _BV(PC3)) && (PINC & _BV(PC7)))) ; @@ -57,6 +59,9 @@ void System::loop() // turn on display display.turn_on(); + // ... and modem + modem.enable(); + want_shutdown = 0; } } @@ -64,9 +69,9 @@ void System::loop() want_shutdown = 0; } - if (modem.buffer_available()) { + while (modem.buffer_available()) { disp[i++] = modem.buffer_get(); - if (i == 7) + if (i == 8) i = 0; } } -- cgit v1.2.3