C言語プログラミングでRGBセンサー(TCS34725 RGB sensor)とPIC16F819を組み合わせたいのですが、
PICとセンサーとの接続は、I2Cを用いて、クロック(SCK)と信号線(SDA)の2本をセンサーとPIC間で接続することぐらいしかわかりません。
PICをマスターモードに設定し、センサーをスレーブに(0x29)スレーブアドレス
i2cから読み取り、LCD(もしくはPUTTYなどPCに)にRGBの数字をprint するにはどうすればいいのでしょうか。
コードの書く工程などを教えていただけると嬉しいです。
ご教示ください!よろしくお願いします。
センサーのdata sheetです↓↓↓
https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf
素人が書こうとした未完成で問題だらけのコードです。。。
#include<16F819.h>
#device adc=10
#FUSES NOWDT,INTRC_IO //NO WATCHDOG TIMER INTERNAL CLOCK OSCILLATOR NO CLOCKOUT
#FUSES NOPUT,NOMCLR,NOBROWNOUT,NOLVP,NOWRT,NODEBUG,NOPROTECT
#use delay(clock=8000000)
#use rs232(baud=115200,xmit=PIN_B4,rcv=PIN_A1,STREAM=LCD)
#use i2c(master,sda=PIN_B1,scl=PIN_B4,FORCE_HW)
#define sensor_Write_address (0x29) //0x52?
#define sensor_Read_address (0x2A) // 0x53?
void int_Colour_Sensor(sLED){
output_high(sLED);
delay_ms(50);
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x00|0x80); //COMMAND BIT (0x80)
i2c_write(0x13); //DATA BIT (STATUS REGISTER 0x13)
i2c_stop(); //STOP CONDITION
//+++++++++++++++++++++++++++++++++
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x01|0x80); //COMMAND BIT (ATIME, RGBC time=0x01)
i2c_write(0x00); //MAX COUNT 65535 (0x00)
i2c_stop(); //STOP CONDITION
//+++++++++++++++++++++++++++++++++
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x0D|0x80); //COMMAND BIT (CONFIGURATION REGISTER=0x0D)
i2c_write(0x00); //ENABLE WLONG (0x00)
i2c_stop(); //STOP CONDITION
//+++++++++++++++++++++++++++++++++
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x03|0x80); //COMMAND BIT (WTIME, WAIT time=0x03)
i2c_write(0x00); //MAX WAIT TIME (0x00)
i2c_stop(); //STOP CONDITION
//+++++++++++++++++++++++++++++++++
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x0F|0x80); //COMMAND BIT (CONTROL REGISTER=0x0F)
i2c_write(0x00); //AGAIN (0x00)
i2c_stop(); //STOP CONDITION
delay_ms(50);
}
void Write_Colour_Sensor(int8 address,int8 data){
i2c_start();
i2c_write(sensor_Write_address);
i2c_write(address);
i2c_write(data);
i2c_stop();
}
void Read_Colour_Sensor(){
i2c_start(); //MASTER TO SLAVE
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x12|0x80); //ID REGISTER (0x12)
i2c_start(); //START CONDITION
i2c_write(sensor_Read_address); //READ
void SetupLCD(){
fputc(control,LCD); //SET BAUD
fputc('r',LCD);
fputc(control,LCD); //SET 16 CHARACTER WIDTH
fputc(4,LCD);
fputc(control,LCD); //SET LINE LCD
fputc(6,LCD);
fputc(control,LCD); //SET TO BRIGHTEST
fputc(157,LCD);
delay_ms(200); // ALLOW BRIGHTNESS ADJUST
fputc(command.LCD); //CLEAR DISPLAY
fputc(1,LCD);
fprintf(LCD,"Display Ready");//PRINT MESSAGE
delay_ms(5000); //WAIT 5 SECONDS
fputc(command,LCD); //CLEAR DISPLAY
fputc(1,LCD);
}