I2C Связь с датчиком CCS Compiler - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно общаться с датчиком через I2C.Таблица данных датчика https://www.hamamatsu.com/resources/pdf/ssd/s11059-02dt_etc_kpic1082e.pdf показывает пример сообщения:

Пример таблицы данных I2C

И мой код:

#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 голосов
/ 18 декабря 2018

в опубликованном коде, последовательность ввода-вывода между микропроцессором и устройством неверна

Следующая ссылка для другого датчика, но показывает правильную последовательность I2C

Вам нужно будет настроить:

  1. адрес шины,
  2. адрес регистра,
  3. команда,
  4. и количество байтов данных

для используемого вами чипа: S11059-02DT / -03DS

Настоятельно рекомендуем использовать оператор enum или #define, чтобы получитьфиксированные значения значимых имен, чтобы читателю вашего кода (включая вас самих в будущем) было легко понять, что делает код

...