I2C K8003
Dependencies: mbed
main.cpp
- Committer:
- eric11fr
- Date:
- 2019-02-13
- Revision:
- 0:7cbdb79aafea
File content as of revision 0:7cbdb79aafea:
#include "mbed.h" #include <I2C.h> I2C i2c(p28,p27); Serial pc(USBTX, USBRX); //Serial uart(p28, p27); char buffer[128]; DigitalOut myled(LED1); void funct_in(int adress, char *data) { i2c.read(adress,data,1); } void funct_out(int adress,char *data) { i2c.write(adress,data,1); } void can_in(int adress,char control, char *data) { i2c.write(adress, &control,1); i2c.read(adress,data,1); } void dac_out(int adress,char *data) { i2c.write(adress, data,2); } int main() { // pc.gets(buffer,4); //if(uart.readable()) { //pc.putc(uart.getc()); int adress_out=0x70;//pcf_out int adress_in=0x72;// pcf_in int adress_can=0x90;//4 can/ 1 cna 8bits int adress_dac=0x40;//dac 6bits 8 voies char x,*tab; char cmd[2]; tab=cmd; while(1) { if(pc.readable()) { if(pc.getc()=='i') { funct_in(adress_in,&x); pc.printf("in=%d",x); } if (pc.getc()=='o') {cmd[0]=pc.getc(); cmd[1]=pc.getc(); funct_out(adress_out,tab);//get binary value form labview: 0x00 to 0xFF } if (pc.getc()=='a')// frame : a<control><data> : a<0 OUT IN1 IN0 0 I CH1 CH0><D7 D6 D5 D4 D3 D2 D1 D0> { cmd[0]=0; cmd[0]|=pc.getc()-48;//channel number cmd[0]|=(pc.getc()-48)<<2;//auto iteration channel cmd[0]|=(pc.getc()-48)<<4;//input type diff/single ended cmd[0]|=(pc.getc()-48)<<6;//dac active can_in(adress_can,cmd[0],&x); pc.printf("%x ",cmd[0]); pc.printf("can=%d\n",x); } if(pc.getc()=='d')//frame : d<control><data> : d<I3 I2 I1 I0 SD SC SB SA><x x D5 D4 D3 D2 D1 D0> //SD to SA : Valid subaddresses are: 0H to 7H. The subaddresses correspond to DAC0 to DAC7 channel //I3 to I0 : 0 or F { cmd[0]=(pc.getc()-48); //DAC0 to DAC7 cmd[0]|=0x0F<<4;//0 or F >> send F //sprintf(cmd[1],"%d",pc.gets());// data to convert cmd[1]=pc.getc();// data to convert // pc.printf("%x %x\n",cmd[0],cmd[1]); dac_out(adress_dac,cmd); } } } }