継続して数値がでず、また右斜めに表示され、数値もラキーボードを打たないと表示されません。
i2c のaddress 構成に問題があるのでしょうか?
それともPrintのコードに?? (MP LAB X ICE とICD3でプログラミングしてます)
もしくは配線に問題が???
配線は
RGB センサー(TCS34725センサー)と PCA9306搭載 I2C用ロジックレベル変換ボードを SCLとSDAにつなげ、
5vを3.3vにするため VKLSVAN DC 3.3V 電源モジュール AMS1117-3.3Vを使いました。
RS232でPCとPICを繋げています。
https://www.switch-science.com/catalog/1522/
ちょっとした気づき、指摘などすごくありがたいです! どうかご教示ください!
よろしくおねがいいたします!
/*
* File: main.c
* Author: dt15rrh
*
* Created on 06 February 2019, 09:44
*/
#include<16F819.h>
#device adc=10 //ANALOGUE-DIGITAL-CONVERTER 10 BIT
#FUSES NOWDT,INTRC_IO,NOPUT,NOMCLR,NOBROWNOUT,NOLVP,NOWRT,NODEBUG,NOPROTECT
#use delay(clock=8000000)
#use rs232(baud=9600,xmit=PIN_B2,rcv=PIN_A1,STREAM=PC) //XMIT=TX PIN RCV=RX PIN
#use i2c(master,sda=PIN_B1,scl=PIN_B4,FORCE_HW)
// RGB Sensor=TCS34725 7 Bit Address 0x29 = 7bit+R/W bit
#define sensor_Write_address (0x52)
#define sensor_Read_address (0x53)
void int_Colour_Sensor(sLED){
output_high(sLED);
delay_ms(50);
//Configure ID
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0X29)
i2c_read(0x12|0x80); //READ ONLY BIT (ID REGISTER 0x12)
i2c_stop(); //STOP CONDITION
//Configure Status
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_read(0x13|0x80); //COMMAND BIT (0x80)
//READ ONLY BIT (STATUS REGISTER 0x13)
i2c_stop(); //STOP CONDITION
//Configure RGBC Time
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
//Configure WLong
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x0D|0x80); //COMMAND BIT (CONFIGURATION REGISTER=0x0D)
i2c_write(0x02); //ENABLE WLONG (0x02)
i2c_stop(); //STOP CONDITION
//Configure Wait Time
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
// Configure Control Register
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);
}
//FUNCTIONS
void Write_Colour_Sensor(int8 address,int8 data){
i2c_start();
i2c_write(sensor_Write_address);
i2c_write(address);
i2c_write(data);
i2c_stop();
}
//READ SENSOR
void Read_Colour_Sensor(){
i2c_start(); //MASTER TO SLAVE
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_read(1); // READ ONLY
i2c_write(0);
}
void Read_RGB(unsigned int* r, unsigned int* g, unsigned int* b){
unsigned int tmp;
i2c_start(); //MASTER TO SLAVE
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x16|0x20|0x80); //RDATAL REGISTER (0x16),AUTO INCREMENT
i2c_start(); //START CONDITIONZ
i2c_write(sensor_Read_address); //READ
tmp = i2c_read(); //RDATAL REGISTER
*r = (tmp<<8)|i2c_read(); //RDATAH REGISTER
tmp = i2c_read(); //GDATAL REGISTER
*g = (tmp<<8)|i2c_read(); //GDATAH REGISTER
tmp = i2c_read(); //BDATAL REGISTER
*b = (tmp<<8)|i2c_read(); //BDATAH REGISTER
i2c_stop(); //STOP CONDITION
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//PRINT VALUE
int main(){
unsigned int *r,*g,*b, tmp;
for(;;){
*r=fgetc(PC);
fprintf(PC,"\n%u\n",*r);
delay_ms(5);
*g=fgetc(PC);
fprintf(PC,"\n%u\n",*g);
delay_ms(5);
*b=fgetc(PC);
fprintf(PC,"\n%u\n",*b);
delay_ms(5);
}
return 0;
}
/*アドレス詳細
#define TCS34725_ADDRESS(0x29) //SLAVE ADDRESS =41
#define TCS34725_COMMAND_BIT(0x80) //SPECIFIES REGISTER ADDRESS
#define TCS34725_ENABLE(0x00) //ENABLE REGISTER
#define TCS34725_PON(0x01) //POWER ON
#define TCS34725_CONTROL(0x0F) //CONTROL REGISTER
#define TCS34725_ID(0x12) //ID REGISTER =68
#define TCS34725_STATUS(0x13) //STATUS REGISTER
#define TCS34725_CDATAL(0x14) //CLEAR LEAST BYTE
#define TCS34725_CDATAH(0x15) //CLEAR MOST BYTE
#define TCS34725_RDATAL(0x16) //RED LEAST BYTE
#define TCS34725_RDATAH(0x17) //RED MOST BYTE
#define TCS34725_GDATAL(0x18) //GREEN LEAST BYTE
#define TCS34725_GDATAH(0x19) //GREEN MOST BYTE
#define TCS34725_BDATAL(0x1A) //BLUE LEAST BYTE
#define TCS34725_BDATAH(0x1B) //BLUE MOST BYTE
*/