lib to set the address of the MCP4728
Dependents: MCP4728setaddrProg mbedSerialInterface_talkback2 MCP4728test mbedSerialInterface_sequencer
Diff: MCP4728setaddr.cpp
- Revision:
- 1:1ba04e54bd3c
- Parent:
- 0:19560a1deb3c
--- a/MCP4728setaddr.cpp Mon Dec 12 17:37:03 2016 +0000 +++ b/MCP4728setaddr.cpp Wed Dec 14 10:58:49 2016 +0000 @@ -36,26 +36,28 @@ -int MPC4728_address_set::readaddress(char* address, char *eepromaddr , char *regaddr ) { +int MPC4728_address_set::readaddress(char& address, char& eepromaddr , char& regaddr ) { *LDAC=ldac1; start_scl_cnt(18);// 1+9+8 faling edges - *address=0x0C; // not allowed value + address=0x0C; // not allowed value char cmd = MCP4728_readaddresscmd; int i2cresult=i2cd->write(0, &cmd, 1,true ); //1 byte don't send stop if ( i2cresult ) { // <> 0 //i2cd->abort_transfer ( ); i2cd->stop(); - *address=0xFF; + address=0xFF; return i2cresult ; } - i2cresult=i2cd->read(MCP4728_baseaddr, &cmd, 1,false ); - if ( i2cresult) *address=0xFE; + i2cresult=i2cd->read(MCP4728_baseaddr+4, &cmd, 1,false ); // +4 because it could conflicts with the MCP4725 what is set to 0xC1 + if ( i2cresult) address=0xFE; else { - *address=cmd; - *regaddr= cmd >>1; - *regaddr= *regaddr& 0x7; - *eepromaddr = cmd>>5; - *eepromaddr = *eepromaddr & 0x7 ; + address=cmd; + regaddr= cmd ; + regaddr = regaddr >>1; + regaddr= regaddr & 0x7; + eepromaddr = cmd; + eepromaddr = eepromaddr >> 5; + eepromaddr = eepromaddr & 0x7 ; } *LDAC=ldac1; return i2cresult ; @@ -64,16 +66,18 @@ int MPC4728_address_set::setaddress(char currentaddress, char newaddress ){ // both address *LDAC=ldac1; - char oldaddr=0x7 & currentaddress;oldaddr=oldaddr<<1; + char oldaddr=0x7 & currentaddress; char newaddr=0x7 & newaddress; newaddr= newaddr<<2; - char address=MCP4728_baseaddr | oldaddr;oldaddr=oldaddr<<1; - const char cmdtype= 0x60; // 0x011000000 0x011AAA0 + oldaddr=oldaddr<<1; + char address=MCP4728_baseaddr | oldaddr; + oldaddr=oldaddr<<1; + const char cmdtype= 0x60; // 0x011000000 0x011A AA01 char data[3] ; data[0]= cmdtype | oldaddr | 1; //0x011OOO01 data[1]= cmdtype | newaddr | 2; //0x011NNN10 data[2]= cmdtype | newaddr | 3; //0x011NNN11 - printf( "cmd %x %x data %x %x %x \n\r", newaddress, newaddr,(int)data[0],(int)data[1],(int)data[2]); + printf( "cmd %x %x %x data %x %x %x \n\r", (int)newaddress, (int)newaddr,(int) oldaddr,(int)data[0],(int)data[1],(int)data[2]); start_scl_cnt(18);//1+ 9+8 faling edges int i2cresult=i2cd->write(address, data, 3,false ); //3 bytes sent and stop *LDAC=ldac1;