lib to set the address of the MCP4728

Dependents:   MCP4728setaddrProg mbedSerialInterface_talkback2 MCP4728test mbedSerialInterface_sequencer

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;