1. Xin chào Khách ! Ban quản trị sẽ tiến hành nâng cấp diễn đàn từ ngày 11/8/2017 Mọi truy cập có thể bị dán đoạn, mong bạn thông cảm!
    Dismiss Notice

Cần giúp Giao Tiếp Module Cảm biến ánh sáng BH1750

Thảo luận trong 'Họ MSP430'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. suriken0911

    suriken0911 Kỹ sư

    Tham gia ngày:
    13/9/13
    Bài viết:
    689
    Đã được thích:
    189
    Điểm thành tích:
    43
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên- CTU
    Nơi ở:
    Cần Thơ
    Chào anh chị, ai đã từng làm module này với MSP430G2553 Chưa vậy ạ?? em giao tiếp hoài mà nó bị lỗi hoài:

    Em có hình về thanh ghi của BH1750 Đây:

    2015-04-29_12-45-59.

    Cái hàm đọc bh1750 em viết thế này, em dùng I2C mềm của BQ32000 Lun, vì nó set giao thức I2C.
    code:

    Mã:
    char BH1750_READ(){
    
      //===============================
      //START ADDITION
      I2C_Start();
      //SEND 0XD0
      I2C_Write(0x23);
      I2C_Start();
      I2C_Write(0x47);
      //READ
      char ret = I2C_Read();
      char ret1 = (ret && 0xf0);
      //===============================
    
      //===============================
      I2C_Start();
      I2C_Write(0x47);
      char ret2 = ret && 0x0f;
      //===============================
    
      //===============================
    
      //===============================
      I2C_Stop();
      //chuyen doi danh cho BQ32000 doc duoc duoi dan BCD.
      ret1 = (((ret1>>4)*10)+ (ret1 & 0x0f));
      ret2 = (((ret2>>4)*10)+ (ret2 & 0x0f));
      return ret1 + ret2;
      //===============================
    }
    Thư viện i2c ạ:
    Mã:
    //========================================================================
    //KHAI BAO BIEN TOAN CUC:
    char value;
    //========================================================================
    //========================================================================
    //I2C PIN CONFIG:
     
    #define SCL       BIT1  //CLOCK:
    #define SDA       BIT0 //
    #define P2        P2IN //
    #define SCL_1     P2OUT |= SCL //
    #define SCL_0     P2OUT &= ~SCL //
    #define SCLdir_1  P2DIR |= SCL //
    #define SCLdir_0  P2DIR &= ~SCL //
    #define SDA_1     P2OUT |= SDA //
    #define SDA_0     P2OUT &= ~SDA //
    #define SDAdir_1  P2DIR |=  SDA //
    #define SDAdir_0  P2DIR &= ~SDA //
    
    //==============================================================================
    //********************************************************************
    void delay(unsigned int time)
    {
        while(time--);
    }
    //==============================================================================
    
    //==============================================================================
    //START CONDITTION:
    void I2C_Start(void)// start communication
    {
      SCLdir_1;   //SCL
      SDAdir_1;   //SDA
      SCL_1;
      SDA_1;
      __no_operation();
      SDA_0;
      __no_operation();
      SCL_0;
    }
    
    //==============================================================================
    //STOP CONDITTION:
    void I2C_Stop(void)// stop communication
    {   
      SDAdir_1;// SDA out
      SDA_0;   //LOW SDA
      SCL_1;    //HIGH SCL
      __no_operation();   //no delay();
      SDA_1;     //HIGH SDA
    }
    //==============================================================================
    //==============================================================================
    //I2C WRITER:
    void I2C_Write(unsigned char datawr){
    
      SDAdir_1;     //chan SDA la chan out, de ghi data len DS1307
    
    
      for(int i=0;i<8;i++){
    
          SCL_0;        //Muc thap SCL
          //--------------------------
          if((datawr & 0x80) && 1){
        
            SDA_1;
            __no_operation();
          }
          else{
        
            SDA_0;
            __no_operation();
          }
          datawr <<= 1;
          //----------------------------
          __no_operation();
          SCL_1;
          __no_operation();
          SCL_0;
      }
        __no_operation();
        SCL_1;
        __no_operation();
        SCL_0;
        __no_operation();
    }
    //==============================================================================
    //==============================================================================
    //Ham doc data i2c
    char I2C_Read(void)// read 1 byte data
    {
      SDAdir_0;// sda
      char i, dat;
      dat = 0x00;
      //--------------------
      for(i=0;i<8;i++) // read  1 byte  data
      {
        __no_operation();
        SCL_1;
        dat <<= 1;    // Set SCL
        if(SDA & P2) dat++;
        SCL_0;     // Clear SCL
      };
      //---------------------
      SDA_1 ;
      SCL_1;
      __no_operation();
      SCL_0;
      __no_operation();
      return dat;
    }
    Cái chỗ đọc 8bit cao, xong có một ACK, xong đọc 8bit thấp, rùi có cần chuyển đổi gì k ạ??? Theo hình em gửi phía trên á...
    Mọi người giúp em!
     
    kakaricardo thích bài này.
  2. hieuyenvien

    hieuyenvien Học sinh phổ thông

    Tham gia ngày:
    22/10/14
    Bài viết:
    2
    Đã được thích:
    1
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Bạn đã giải quyết được module này chưa vậy?
     
    suriken0911 thích bài này.
  3. suriken0911

    suriken0911 Kỹ sư

    Tham gia ngày:
    13/9/13
    Bài viết:
    689
    Đã được thích:
    189
    Điểm thành tích:
    43
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên- CTU
    Nơi ở:
    Cần Thơ
    Mình giải quết em này trên adruino rùi nhé, msp430 thì mãi không ra.... dữ liệu k chính xác...
     
  4. havanmao93

    havanmao93 Học sinh phổ thông

    Tham gia ngày:
    30/10/13
    Bài viết:
    4
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    đang giải quyết con này trên STM32f4 mà vẫn chưa được
     

Chia sẻ trang này