From fd4aebdf7f78b86871f82f9cb75604ce56555495 Mon Sep 17 00:00:00 2001 From: joxe Date: Tue, 2 Feb 2010 20:59:45 +0000 Subject: [PATCH] refactored some ADC code into sky-sensors and made it possible to turn off sensors to save energy --- platform/sky/Makefile.sky | 4 +- platform/sky/dev/battery-sensor.c | 23 ++------ platform/sky/dev/light-sensor.c | 19 ++----- platform/sky/dev/sky-sensors.c | 95 +++++++++++++++++++++++++++++++ platform/sky/dev/sky-sensors.h | 46 +++++++++++++++ 5 files changed, 152 insertions(+), 35 deletions(-) create mode 100644 platform/sky/dev/sky-sensors.c create mode 100644 platform/sky/dev/sky-sensors.h diff --git a/platform/sky/Makefile.sky b/platform/sky/Makefile.sky index d95a5410f..5cfcb72a5 100644 --- a/platform/sky/Makefile.sky +++ b/platform/sky/Makefile.sky @@ -1,10 +1,10 @@ -# $Id: Makefile.sky,v 1.34 2010/01/14 22:26:38 nifi Exp $ +# $Id: Makefile.sky,v 1.35 2010/02/02 20:59:45 joxe Exp $ ARCH=msp430.c leds.c watchdog.c spi.c ds2411.c \ xmem.c i2c.c sht11.c light-sensor.c acc-sensor.c battery-sensor.c \ cc2420.c cc2420-aes.c cc2420-arch.c cc2420-arch-sfd.c sht11-sensor.c \ - node-id.c sensors.c button-sensor.c cfs-coffee.c \ + node-id.c sensors.c button-sensor.c cfs-coffee.c sky-sensors.c\ radio-sensor.c uart1.c uip-ipchksum.c \ checkpoint-arch.c #slip.c slip_uart1.c diff --git a/platform/sky/dev/battery-sensor.c b/platform/sky/dev/battery-sensor.c index 292ef5131..726900e91 100644 --- a/platform/sky/dev/battery-sensor.c +++ b/platform/sky/dev/battery-sensor.c @@ -26,14 +26,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: battery-sensor.c,v 1.7 2010/01/15 21:37:15 nifi Exp $ + * $Id: battery-sensor.c,v 1.8 2010/02/02 20:59:45 joxe Exp $ * * ----------------------------------------------------------------- * * Author : Adam Dunkels, Joakim Eriksson, Niclas Finne * Created : 2005-11-01 - * Updated : $Date: 2010/01/15 21:37:15 $ - * $Revision: 1.7 $ + * Updated : $Date: 2010/02/02 20:59:45 $ + * $Revision: 1.8 $ */ #include "dev/battery-sensor.h" @@ -45,25 +45,11 @@ static uint8_t active; static void activate(void) { - /* This assumes that some other sensor system already did setup the ADC */ - /* (in the case of the sky platform it is sensors_light_init that does it) */ - - P6SEL |= 0x80; - P6DIR = 0xff; - P6OUT = 0x00; - - /* stop converting immediately */ - ADC12CTL0 &= ~ENC; - ADC12CTL1 &= ~CONSEQ_3; - /* Configure ADC12_2 to sample channel 11 (voltage) and use */ /* the Vref+ as reference (SREF_1) since it is a stable reference */ ADC12MCTL2 = (INCH_11 + SREF_1); - ADC12CTL1 |= CONSEQ_3; - ADC12CTL0 |= ENC | ADC12SC; - - /* Irq_adc12_activate(&battery_sensor, 6, (INCH_11 + SREF_1)); */ + sky_sensors_activate(0x80); active = 1; } @@ -71,6 +57,7 @@ activate(void) static void deactivate(void) { + sky_sensors_deactivate(0x80); active = 0; } /*---------------------------------------------------------------------------*/ diff --git a/platform/sky/dev/light-sensor.c b/platform/sky/dev/light-sensor.c index d14b6e820..e84a11836 100644 --- a/platform/sky/dev/light-sensor.c +++ b/platform/sky/dev/light-sensor.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: light-sensor.c,v 1.3 2010/01/14 20:23:02 adamdunkels Exp $ + * @(#)$Id: light-sensor.c,v 1.4 2010/02/02 20:59:45 joxe Exp $ */ #include @@ -37,6 +37,7 @@ #include "contiki.h" #include "lib/sensors.h" +#include "sky-sensors.h" #include "dev/light-sensor.h" const struct sensors_sensor light_sensor; @@ -48,21 +49,10 @@ const struct sensors_sensor light_sensor; static void light_sensor_init(void) { - P6SEL |= 0x30; - P6DIR = 0xff; - P6OUT = 0x00; - - /* Set up the ADC. */ - ADC12CTL0 = REF2_5V + SHT0_6 + SHT1_6 + MSC; // Setup ADC12, ref., sampling time - ADC12CTL1 = SHP + CONSEQ_3 + CSTARTADD_0; // Use sampling timer, repeat-sequenc-of-channels - ADC12MCTL0 = (INCH_4 + SREF_0); // photodiode 1 (P64) ADC12MCTL1 = (INCH_5 + SREF_0); // photodiode 2 (P65) - ADC12CTL0 |= ADC12ON + REFON; - - ADC12CTL0 |= ENC; // enable conversion - ADC12CTL0 |= ADC12SC; // sample & convert + sky_sensors_activate(0x30); } /*---------------------------------------------------------------------------*/ static int @@ -103,8 +93,7 @@ configure(int type, int c) light_sensor_init(); } } else { - /* shut down sensing */ - ADC12CTL0 = 0; + sky_sensors_deactivate(0x30); } } return 0; diff --git a/platform/sky/dev/sky-sensors.c b/platform/sky/dev/sky-sensors.c new file mode 100644 index 000000000..02fefded4 --- /dev/null +++ b/platform/sky/dev/sky-sensors.c @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2010, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * $Id: sky-sensors.c,v 1.1 2010/02/02 20:59:45 joxe Exp $ + * + * ----------------------------------------------------------------- + * + * Author : Joakim Eriksson + * Created : 2010-02-02 + * Updated : $Date: 2010/02/02 20:59:45 $ + * $Revision: 1.1 $ + */ +#include + +#include +#include "contiki.h" + +static uint8_t adc_on; +/*---------------------------------------------------------------------------*/ +void +sky_sensors_activate(uint8_t type) +{ + uint8_t pre = adc_on; + + adc_on |= type; + P6SEL |= type; + + if(pre == 0 && adc_on > 0) { + P6DIR = 0xff; + P6OUT = 0x00; + + /* if nothing was started before, start up the ADC system */ + /* Set up the ADC. */ + ADC12CTL0 = REF2_5V + SHT0_6 + SHT1_6 + MSC; /* Setup ADC12, ref., sampling time */ + ADC12CTL1 = SHP + CONSEQ_3 + CSTARTADD_0; /* Use sampling timer, repeat-sequenc-of-channels */ + /* convert up to MEM4 */ + ADC12MCTL4 |= EOS; + + ADC12CTL0 |= ADC12ON + REFON; + ADC12CTL0 |= ENC; /* enable conversion */ + ADC12CTL0 |= ADC12SC; /* sample & convert */ + } +} +/*---------------------------------------------------------------------------*/ +void +sky_sensors_deactivate(uint8_t type) +{ + adc_on &= ~type; + + if(adc_on == 0) { + /* stop converting immediately, turn off reference voltage, etc. */ + /* wait for conversion to stop */ + + ADC12CTL0 &= ~ENC; + /* need to remove CONSEQ_3 if not EOS is configured */ + ADC12CTL1 &= ~CONSEQ_3; + + while(ADC12CTL1 & ADC12BUSY); + + ADC12CTL0 = 0; + ADC12CTL1 = 0; + + P6DIR = 0x00; + P6OUT = 0x00; + P6SEL = 0x00; + } +} +/*---------------------------------------------------------------------------*/ diff --git a/platform/sky/dev/sky-sensors.h b/platform/sky/dev/sky-sensors.h new file mode 100644 index 000000000..0ec18905d --- /dev/null +++ b/platform/sky/dev/sky-sensors.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2010, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * $Id: sky-sensors.h,v 1.1 2010/02/02 20:59:45 joxe Exp $ + * + * ----------------------------------------------------------------- + * + * Author : Joakim Eriksson + * Created : 2010-02-02 + * Updated : $Date: 2010/02/02 20:59:45 $ + * $Revision: 1.1 $ + */ + +#ifndef __SKY_SENSORS_H__ +#define __SKY_SENSORS_H__ + +void sky_sensors_activate(uint8_t); +void sky_sensors_deactivate(uint8_t); + +#endif /* __SKY_SENSORS_H__ */