基于LPC1343与三轴加速度传感器的震动报警装置

2014-02-08 11:30 来源:电子信息网 作者:蒲公英


代码示例:

这里使用LPC1343的IO模拟LIS3LV02DL的spi时序。


//--------------传感器接口定义---------------
#define MOSI_H GPIOSetValue( 3, 2, 1 )   //使用的是接口P3.2
#define MOSI_L GPIOSetValue( 3, 2, 0 )
#define SCLK_H GPIOSetValue( 2, 11, 1 )  //使用的是接口P2.11
#define SCLK_L GPIOSetValue( 2, 11, 0 )    
#define SSEL_H GPIOSetValue( 0, 2, 1 )   //使用的是接口P0.2
#define SSEL_L GPIOSetValue( 0, 2, 0 )   
#define MISO_VALUE GPIOReadValue(0,8)    //使用的是接口P0.8

void delay(int i){
    while(i--);
}

char  spi_comm(unsigned char outgoing_byte)//模拟LIS3LV02DL时序
{
    char incoming_byte, x;
    SCLK_H; //Pull SPI clock high
    delay(100);
    for(x = 0 ; x < 8 ; x++)
    {
        SCLK_L; //Pull SPI clock low
        delay(100);
        if(outgoing_byte & 0x80)
        MOSI_H; //Pull SPI data out high
        else
        MOSI_L; //Pull SPI data out low
        outgoing_byte = outgoing_byte << 1; 
        SCLK_H; //Pull SPI clock high
        delay(100);
        incoming_byte = incoming_byte << 1; 
        incoming_byte = incoming_byte | MISO_VALUE; //获取加速度传感器的输入数据
    }  
    return(incoming_byte);
}

char read_register(unsigned char register_name)// 读LIS3LV02DL寄存器
{
    char in_byte; 
    register_name |= 0x80; //Set D7 to 1 for read mode
    SSEL_L; //Select LIS
    in_byte = spi_comm(register_name); //SPI read 6-bit register from LIS
in_byte = spi_comm(0x00); 
    SSEL_H; 
    return(in_byte);
}

//Sends a write command to LIS
void write_register(unsigned char register_name, unsigned char register_value)//写LIS3LV02DL寄存器
{
    unsigned char in_byte; 
    register_name &= 0x3f; //Clear D7 to 0 for write mode
    SSEL_L; //Select LIS
    in_byte = spi_comm(register_name); //SPI read 6-bit register from LIS 
    in_byte = spi_comm(register_value); 
    SSEL_H;
}

static void setupHardware(void) {//硬件初始化
      /* Config CLKOUT, mostly used for debugging. */
      CLKOUT_Setup( CLKOUTCLK_SRC_MAIN_CLK );
      LPC_IOCON->IO0_1 &= ~0x07;
      LPC_IOCON->IO0_1 |= 0x01;    /* CLK OUT */

      /* Enable AHB clock to the GPIO domain. */
      LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);

      /* Set port for LED to output */
      GPIOSetDir( SYS_LED_PORT, SYS_LED_BIT, 1 ); //配置系统LED
      GPIOSetDir( LED_PORT, LED_BIT, 1 );

//------------for sensor---------------
      GPIOSetDir( 3, 2, 1 ); //mosi  //配置LIS3LV02DL接口
      GPIOSetDir( 0, 8, 0 ); //miso
      GPIOSetDir( 2, 11, 1 ); //sclk
      GPIOSetDir( 0, 2, 1 ); //ssel

      UARTInit(9600);//初始化串口

    
sensor_data1 = read_register(0x0f);//读取期间ID,应该反馈3A
     UARTSendchar(sensor_data1); //从串口可以看到打印0x3A

     write_register(LIS3L_CTRL_REG1,0xD7);  //设置采样率,160khz,正常工作模式
     write_register(LIS3L_CTRL_REG2,0x44);  //读取完高字节后数据更新,确保数据传输正确,

}

void vUserTask1(void *pvParameters) {//闪灯任务
    while (1) {
       if (sys_led_state == LED_OFF) {
           GPIOSetValue( SYS_LED_PORT, SYS_LED_BIT, LED_ON );
           sys_led_state = LED_ON;
       } else {
           GPIOSetValue( SYS_LED_PORT, SYS_LED_BIT, LED_OFF );
           sys_led_state = LED_OFF;
       }
       vTaskDelay(10);
    }
}
void vUserTask2(void *pvParameters) {//加速度传感器监测任务
    while (1) {
           sensor_data1 = read_register(LIS3L_OUTZ_L);
           sensor_data1 = read_register(LIS3L_OUTX_H);
           UARTSendchar(sensor_data1); //打印X轴的高字节
           if(sensor_data1>0x00)        //判断是否报警,阈值可以根据实际调节
           iState = 1;
           vTaskDelay(10) ;
    }
}

void vUserTask3(void *pvParameters) {//Beep报警任务
    while (1) {
    if(iState == 1){
       GPIOSetValue( 2, 0, 0 );
       iState = 0;
    }
    else
       GPIOSetValue( 2, 0, 1 );
       vTaskDelay(10) ;
    }
}
int main(void) {
    setupHardware(); //初始化硬件系统

//建立3个任务
    xTaskCreate( vUserTask1, ( signed portCHAR * ) "Sys_led", USERTASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
    xTaskCreate( vUserTask2, ( signed portCHAR * ) "Sensor", USERTASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
    xTaskCreate( vUserTask3, ( signed portCHAR * ) "Beep", USERTASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );

    vTaskStartScheduler(); //开始任务调度
    return 1;
}


< 1 2 3 4 5 > 
加速度传感器 LPC1343

相关阅读

暂无数据

一周热门