ARMEBS4  revision-26.06.2015
light_sensor.c
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////
2 /// \file heivs/light_sensor.c
3 /// \brief ARMEBS4 light sensor access functions
4 /// \author Pascal Sartoretti / Marc Pignat
5 //////////////////////////////////////////////////////////////////////////////////
6 #include "heivs/light_sensor.h"
7 #include "stm32/stm32f4xx_rcc.h"
8 #include "heivs/stm32_gpio.h"
9 #include "stm32/stm32f4xx_adc.h"
10 
11 //////////////////////////////////////////////////////////////////////////////////
12 /// \brief Initialise ADC to measure light sensor
13 //////////////////////////////////////////////////////////////////////////////////
15 {
16  ADC_InitTypeDef ADC_init_structure;
17  GPIO_InitTypeDef GPIO_initStructre; //Structure for analog input pin
18  //Clock configuration
19  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);//The ADC1 is connected the APB2 peripheral bus thus we will use its clock source
20  RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIOCEN,ENABLE);//Clock for the ADC port!! Do not forget about this one ;)
21  //Analog pin configuration
22  GPIO_initStructre.GPIO_Pin = GPIO_Pin_3;//The pin PC3 is connected to the potentiometer
23  GPIO_initStructre.GPIO_Mode = GPIO_Mode_AN; //Set it as analog
24  GPIO_initStructre.GPIO_PuPd = GPIO_PuPd_NOPULL; //We don't need any pull up or pull down
25  GPIO_Init(GPIOC,&GPIO_initStructre);//Affecting the port with the initialization structure configuration
26  //ADC structure configuration
27  ADC_DeInit();
28  ADC_init_structure.ADC_DataAlign = ADC_DataAlign_Right;//data converted will be shifted to right
29  ADC_init_structure.ADC_Resolution = ADC_Resolution_12b;//Input voltage is converted into a 12bit number giving a maximum value of 4096
30  ADC_init_structure.ADC_ContinuousConvMode = ENABLE; //the conversion is continuous, the input data is converted more than once
31  ADC_init_structure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;// conversion is synchronous with TIM1 and CC1 (actually I'm not sure about this one :/)
32  ADC_init_structure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//no trigger for conversion
33  ADC_init_structure.ADC_NbrOfConversion = 1;//I think this one is clear :p
34  ADC_init_structure.ADC_ScanConvMode = DISABLE;//The scan is configured in one channel
35  ADC_Init(ADC2,&ADC_init_structure);//Initialize ADC with the previous configuration
36  //Enable ADC conversion
37  ADC_Cmd(ADC2,ENABLE);
38  //Select the channel to be read from
39  ADC_RegularChannelConfig(ADC2,ADC_Channel_13,1,ADC_SampleTime_144Cycles);
40 }
41 
42 //////////////////////////////////////////////////////////////////////////////////
43 /// \brief Measure the light_sensor value
44 /// \return Measured value between 0 to 4095
45 /// Higher is the value when lower is the light
46 //////////////////////////////////////////////////////////////////////////////////
47 uint32_t light_sensor_value(void)
48 {
49 #define NB_SAMPLE 16
50  uint32_t result=0;
51  uint8_t i;
52  // just an average because ADC is very poor
53  for(i=0;i<NB_SAMPLE;i++)
54  {
55  ADC_SoftwareStartConv(ADC2);
56  while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC));
57  result += ADC_GetConversionValue(ADC2);
58  }
59  return result / NB_SAMPLE;
60 }
This file contains all the functions prototypes for the RCC firmware library.
uint32_t ADC_ExternalTrigConv
Definition: stm32f4xx_adc.h:62
ADC Init structure definition.
Definition: stm32f4xx_adc.h:47
void light_sensor_init(void)
Initialise ADC to measure light sensor.
Definition: light_sensor.c:14
FunctionalState ADC_ContinuousConvMode
Definition: stm32f4xx_adc.h:55
This file contains all the functions prototypes for the ADC firmware library.
uint32_t ADC_DataAlign
Definition: stm32f4xx_adc.h:66
GPIO Init structure definition.
ARMEBS4 light_sensor access functions.
board specific defines
uint8_t ADC_NbrOfConversion
Definition: stm32f4xx_adc.h:69
uint32_t light_sensor_value(void)
Measure the light_sensor value.
Definition: light_sensor.c:47
GPIOMode_TypeDef GPIO_Mode
FunctionalState ADC_ScanConvMode
Definition: stm32f4xx_adc.h:51
uint32_t ADC_Resolution
Definition: stm32f4xx_adc.h:49
GPIOPuPd_TypeDef GPIO_PuPd
uint32_t ADC_ExternalTrigConvEdge
Definition: stm32f4xx_adc.h:58