与传感器CCS编译器的I2C通信

时间:2018-12-17 20:33:48

标签: c pic i2c

我需要通过I2C与传感器通信。传感器的数据表https://www.hamamatsu.com/resources/pdf/ssd/s11059-02dt_etc_kpic1082e.pdf显示了通信示例:

I2C example of datasheet

我的代码:

#include <18f2550.h>
#fuses   HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#USE     delay(clock=48000000)
#use i2c(Master,Fast,sda=PIN_B0,scl=PIN_B1)

#include <usb_cdc.h>
void main() {
    i2c_start();
    i2c_write(0x54);
    i2c_write(0x00);
    i2c_write(0x89);
    i2c_write(0x54);
    i2c_write(0x00);
    i2c_write(0x09);
    i2c_stop();

    usb_cdc_init();
    usb_init();
    while(TRUE) {
        delay_ms(10);
        i2c_write(0x54);
        i2c_write(0x03);
        i2c_write(0x55);

        int8 RM = i2c_read(1);
        int8 RL = i2c_read(1);
        int8 GM = i2c_read(1);
        int8 GL = i2c_read(1);
        int8 BM = i2c_read(1);
        int8 BL = i2c_read(1);
        int8 IM = i2c_read(1);
        int8 IL = i2c_read(0);
        i2c_stop();

        usb_task();
        if (usb_enumerated()) {
            printf( usb_cdc_putc,"%d", (RM << 8) | RL );                        
            printf(usb_cdc_putc, "\f ");
        }
    }
}

我想知道我的代码是否正确。

1 个答案:

答案 0 :(得分:0)

在发布的代码中,微处理器和设备之间的I / O排序不正确

以下链接适用于其他传感器,但确实显示了正确的I2C sequence

您将需要调整:

  1. 公交地址
  2. 寄存器地址
  3. 命令
  4. 和数据字节数

针对您使用的芯片:S11059-02DT / -03DS

强烈建议使用enum语句或#define语句为固定值赋予有意义的名称,以使您的代码读者(包括将来的自己)更容易理解代码内容在做