Add BME280 humidity sensor test
[lpc82x] / apps / base / adc / main.c
1 /****************************************************************************
2  *   apps/adc/main.c
3  *
4  * ADC example
5  *
6  * Copyright 2013-2014 Nathael Pajani <nathael.pajani@ed3l.fr>
7  *
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  *************************************************************************** */
25 #include "lib/stdint.h"
26 #include "core/system.h"
27 #include "core/systick.h"
28 #include "core/pio.h"
29 #include "lib/stdio.h"
30 #include "drivers/serial.h"
31 #include "drivers/gpio.h"
32 #include "drivers/adc.h"
35 #define MODULE_VERSION    0x01
36 #define MODULE_NAME "E-Xanh Gardener"
39 #define SELECTED_FREQ  FREQ_SEL_36MHz
41 /***************************************************************************** */
42 /* Pins configuration */
43 /* pins blocks are passed to set_pins() for pins configuration.
44  * Unused pin blocks can be removed safely with the corresponding set_pins() call
45  * All pins blocks may be safelly merged in a single block for single set_pins() call..
46  */
47 const struct pio_config common_pins[] = {
48         /* UART 0 */
49         { LPC_GPIO_0_0, LPC_UART0_RX, 0 },
50         { LPC_GPIO_0_4, LPC_UART0_TX, 0 },
51         /* ADC */
52         { LPC_ADC_AD9_PIO_0_17, LPC_FIXED, 0 },
53         { LPC_ADC_AD10_PIO_0_13, LPC_FIXED, 0 },
54         ARRAY_LAST_PIO,
55 };
58 /***************************************************************************** */
59 /* This will display the integer value read on the ADC, between 0 and 1024.
60  * ADC must be initialised prior to calls to adc_display() (it means that adc_on()
61  *    must be called before using this function.
62  * adc_num is an ADC channel number (integer between 0 and 7)
63  *    use LPC_ADC_NUM(x) for channel selection.
64  * returns ADC convertion value or negative value on error.
65  */
66 int adc_display(int adc_num, int uart_num)
67 {
68         uint16_t val = 0;
69         int ret = 0;
71         ret = adc_get_value(&val, adc_num);
72         if (ret < 0) {
73                 return ret;
74         } else {
75                 uprintf(uart_num, "ADC(%d): %d (raw: 0x%04x, ret: %d)\n", adc_num, val, val, ret);
76         }
77         return val;
78 }
80 /***************************************************************************** */
81 void system_init()
82 {
83         system_set_default_power_state();
84         clock_config(SELECTED_FREQ);
85         set_pins(common_pins);
86         gpio_on();
87         /* System tick timer MUST be configured and running in order to use the sleeping
88          * functions */
89         systick_timer_on(1); /* 1ms */
90         systick_start();
91 }
93 /* Define our fault handler. */
94 void fault_info(const char* name, uint32_t len)
95 {
96         uprintf(UART0, name);
97         while (1);
98 }
102 /***************************************************************************** */
103 int main(void)
105         system_init();
106         uart_on(UART0, 115200, NULL);
108         /* ADC Setup */
109         adc_on(NULL);
110         adc_prepare_conversion_on_event((LPC_ADC_CHANNEL(9) | LPC_ADC_CHANNEL(10)),
111                                                                         LPC_ADC_START_CONV_SOFT, LPC_ADC_SEQA, 0, 0);
113         while (1) {
114                 /* ADC Test */
115                 adc_trigger_sequence_conversion(LPC_ADC_SEQA);
116                 msleep(10);
117                 adc_display(LPC_ADC_NUM(9), UART0);
118                 adc_display(LPC_ADC_NUM(10), UART0);
119         }
120         return 0;