[Linux项目实践] 物联网单板测试之任务四:光敏电阻

原创 2012年03月31日 15:15:13

完成单板代码

/*任务4:通过光敏电阻读取光强数值*/

步骤:

4.1、查找电路图(FS_11C14 V3.0.pdf)找到光敏电阻的接口

4.2、这个IC没有使用过,查找这个光敏电阻的IC资料ISL29003.pdf

由光敏电阻的电路资料可知,光敏电阻的 SDASCL分别连接到MCU中的I2C总线控制器

4.3、首先初始化I2C总线:

uint32_t I2CInit( uint32_t I2cMode, uint32_t slaveAddr )

{

  /* It seems to be bit0 is for I2C, different from

  UM. To be retested along with SSP reset. SSP and I2C

  reset are overlapped, a known bug, for now, both SSP 

  and I2C use bit 0 for reset enable. Once the problem

  is fixed, change to "#if 1". */

#if 1

  LPC_SYSCON->PRESETCTRL |= (0x1<<1);

#else

  LPC_SYSCON->PRESETCTRL |= (0x1<<0);

#endif

  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<5);

  LPC_IOCON->PIO0_4 &= ~0x3F; /*  I2C I/O config */

  LPC_IOCON->PIO0_4 |= 0x01; /* I2C SCL */

  LPC_IOCON->PIO0_5 &= ~0x3F;

  LPC_IOCON->PIO0_5 |= 0x01; /* I2C SDA */

  /*--- Clear flags ---*/

  LPC_I2C->CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;    

  /*--- Reset registers ---*/

#if FAST_MODE_PLUS

  LPC_IOCON->PIO0_4 |= (0x1<<9);

  LPC_IOCON->PIO0_5 |= (0x1<<9);

  LPC_I2C->SCLL   = I2SCLL_HS_SCLL;

  LPC_I2C->SCLH   = I2SCLH_HS_SCLH;

#else

  LPC_I2C->SCLL   = I2SCLL_SCLL;

  LPC_I2C->SCLH   = I2SCLH_SCLH;

#endif

  if ( I2cMode == I2CSLAVE )

  {

LPC_I2C->ADR0 = slaveAddr;

  }    

  /* Enable the I2C Interrupt */

  NVIC_EnableIRQ(I2C_IRQn);

  LPC_I2C->CONSET = I2CONSET_I2EN;

  return( TRUE );

}

4.4、光敏电阻的初始化管脚

4.5、对管脚进行初始化

void light_init (void)

{

    /* nothing to initialize. light_enable enables the sensor */

    //add by terry

    GPIOSetDir(PORT0, 7, 1);      //set the light pio0_7 output

    GPIOSetValue(PORT0, 7, 0); //set the light pio0_7 high 

}

4.6、设置光敏电阻的敏感度

void light_setRange(light_range_t newRange)

{

    uint8_t ctrl = readControlReg();

    /* clear range */

    ctrl &= ~(3 << 2);

    ctrl |= CTRL_GAIN(newRange);

    I2CMasterBuffer[0] = ADDR_CTRL;

    I2CMasterBuffer[1] = ctrl;

    I2CWrite(LIGHT_I2C_ADDR, I2CMasterBuffer, 2);

    switch(newRange) {

    case LIGHT_RANGE_1000:

        range = RANGE_K1;

        break;

    case LIGHT_RANGE_4000:

        range = RANGE_K2;

        break;

    case LIGHT_RANGE_16000:

        range = RANGE_K3;

        break;

    case LIGHT_RANGE_64000:

        range = RANGE_K4;

        break;

    }

}

4.7、读取光敏电阻的感光值

uint32_t light_read(void)

{

    uint32_t data = 0;

    uint8_t buf[1];

    buf[0] = ADDR_LSB_SENSOR;

    I2CWrite(LIGHT_I2C_ADDR, buf, 1);

    I2CRead(LIGHT_I2C_ADDR, buf, 1);

    data = buf[0];

    buf[0] = ADDR_MSB_SENSOR;

    I2CWrite(LIGHT_I2C_ADDR, buf, 1);

    I2CRead(LIGHT_I2C_ADDR, buf, 1);

    data = (buf[0] << 8 | data);

    /* Rext = 100k */

    /* E = (range(k) * DATA)  / 2^n */

    //return (range*data / width);

data *= range;

data /= width;

return data;

}

4.8、测试方法

void Light_Test(void)

{

  char buf[24];

  uint32_t lux;

  //set a title

  OLED_ClearScreen();

  OLED_DisStrLine(0, 0, "Light");

  printf("\r\nLight\r\n");

  

  I2CInit(I2CMASTER, 0);                   

  light_init();

  

  light_enable()    //add here

  light_setRange(LIGHT_RANGE_4000);

  while(1)

  {

    lux = light_read();

    snprintf(buf, 20, "%d    ", lux);

    OLED_DisStrLine(2, 0, (uint8_t *)buf);

printf("%d ", lux);

delay_ms(300);

    if(KEY_Read() == KEY_ESC)

  break;

  }

}

4.9、编译烧录验证可以实现实时读取感光值

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[Linux项目实践] 物联网单板测试之任务五:ZigBee Module之Fuction

完成单板代码 /*任务5:ZigBee无线模块应用*/ ZigBee Module传递信息到主机2440: 1、头文件 #include  #include  #include  ...

[Linux项目实践] 物联网单板测试之任务六:Accelerometer重力加速计

完成单板代码(部分IIC基代码共用之前博文) /*任务6:Accelerometer重力加速计*/ Axis3_Test(); /******************************...

[Linux项目实践] 物联网单板测试之任务二:操作风扇

完成单板代码 /*任务2:关风扇*/ 步骤: 2.1、查找电路图(FS_11C14 V3.0.pdf)找到风扇接口 由上图可知,控制风扇的开关为:FAN_SW,那么继续查找FAN_SW是连...

[Linux项目实践] 物联网单板测试之任务七:RFID之RFID_Test

完成单板代码 /*任务7:RFID应用*/ RFID_Test() /************************************************************...

[Linux项目实践] 物联网单板测试之任务三:OLED菜单控制LED

完成单板代码 /*任务3:通过OLED菜单显示选项控制LED灯*/ 步骤: 3.1、分析代码上下文可知,这是一个在OLED显示的菜单中通过LED选项来进行LED灯的控制 3.2、代码不会写,怎...

[Linux项目实践] 物联网单板测试之任务五:ZigBee Module之ZigBee_Test

完成单板代码 /*任务5:ZigBee无线模块应用*/ 分析ZigBee_Test: /*****************************************************...

[Linux项目实践] 物联网单板测试之任务一:实现流水灯

完成单板代码 /*任务1:实现流水灯*/ 步骤: 1.1、找到单板电路图(FS_11C14 V3.0.pdf)上要实现的流水灯的LED灯,即LED1、LED2 1.2、找到LED1、L...

[Linux项目实践] 物联网单板测试之任务五:ZigBee Module之Transfer

完成单板代码 /*任务5:ZigBee无线模块应用*/ ZigBee Module传递信息过程: 1、从节点单板信息结构体: typedef struct {     uint8_t t...

[Linux项目实践] 物联网单板测试:LPC11C14 IIC_Init

I2CInit IIC初始化步骤: 1、复位外设:LPC_SYSCON->PRESETCTRL |= (0x1 2、时钟使能:LPC_SYSCON->SYSAHBCLKCTRL |= (1 3...

[Linux项目实践] 物联网单板测试:OLED Dis_Menu

Dis_Menu(menu);       //display the menu content /*************************************************...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)