I need to communicate with a sensor via I2C. The sensor's datasheet https://www.hamamatsu.com/resources/pdf/ssd/s11059-02dt_etc_kpic1082e.pdf shows an example of a communication:
And my code:
#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'd like to know if my code is allright.
in the posted code, the sequencing of I/O between the microprocessor and the device is not correct
The following link is for a different sensor, but does show the correct I2C sequence
You will need to adjust:
for the chip your using: S11059-02DT/-03DS
Strongly suggest using an enum
statement or #define
statements to give the fixed values meaningful names to make a reader of your code (including your self at some future date) an easy time understanding what the code is doing
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.