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

标签 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 ");
        }
    }
}

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

最佳答案

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

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

您需要调整:

  1. 总线地址,
  2. 注册地址,
  3. 命令,
  4. 和数据字节数

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

强烈建议使用 enum 语句或 #define 语句为固定值赋予有意义的名称,以便读者阅读您的代码(包括将来某个日期的您自己)轻松理解代码的作用

关于c - 与传感器 CCS 编译器的 I2C 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822594/

相关文章:

rust - 为什么这个 rppal I2c 结构没有任何方法?

c - 数组未正确传递

c - 如何正确地重新初始化 C 中的循环变量?

c - 由于需要结构/union ,microC 构建失败

c - Microchip 改变了 C 语言的规则?

c - I2C读取时出现奇怪的延迟问题

c++ - 如何理解大型复杂模块, "without"编译和调试它

c - 无论输入如何,每个元音出现三次

c - PIC16F1459 I2C 主控器 24LC32 的确认问题

python - 使用 Raspberry Pi Python SMBus 乱序接收 I²C 字节