This is a driver to control the SD20 20 Channel I2C to Servo Driver Chip from www.robot-electronics.co.uk (http://www.robot-electronics.co.uk/htm/sd20tech.htm). This driver will allow a servo channel to be started up, stopped and the duty cycle altered in standard mode. No attempt to include the extended mode is included.

Revision:
6:973d6a66dbf7
Parent:
5:eba9f639154c
diff -r eba9f639154c -r 973d6a66dbf7 SD20.cpp
--- a/SD20.cpp	Thu Feb 25 20:26:24 2016 +0000
+++ b/SD20.cpp	Fri Mar 04 23:04:28 2016 +0000
@@ -31,17 +31,21 @@
     _bus -> frequency(BUS_FREQ);
 }
 
-int SD20::UpdateChannel(char *newDutyCycle)
+int SD20::UpdateChannel(char channelReg, char channelSpeed)
 {
         // Output new duty cycle to SD20, return 0 if successful, 1 if unsuccessful
-        if(_bus -> write(SD20_ADDRESS,newDutyCycle,OUT_BUF_LEN))
+        updateDutyCycle[0] = channelReg;
+        updateDutyCycle[1] = channelSpeed;
+        
+        if(_bus -> write(SD20_ADDRESS,updateDutyCycle,2))
         {
-            printf("I2C Failed to write\r\n");
+//            printf("I2C Failed to write\r\n");
             return 1;
         }
         else
         {
-//            printf("Reg: 0x%02x Data: 0x%02x\r\n",*newDutyCycle,*(newDutyCycle+1));
+//            updateDutyCycle = *(updateDutyCycle+1)
+            printf("Reg: 0x%02x Data: 0x%02x\r\n",*updateDutyCycle,*(updateDutyCycle+1));
             return 0;
         }
 }
@@ -51,10 +55,10 @@
         // Startup a new channel, return 0 if successful, 1 if unsuccessful
         if(Start == CHANNEL_START)
         {
-            char newDutyCycle[] = {ServoChannel,CHANNEL_START};
-            if(_bus -> write(SD20_ADDRESS,newDutyCycle,OUT_BUF_LEN))
+            char startDutyCycle[] = {ServoChannel,CHANNEL_START};
+            if(_bus -> write(SD20_ADDRESS,startDutyCycle,OUT_BUF_LEN))
             {
-                printf("I2C Failed to write\r\n");
+//                printf("I2C Failed to write\r\n");
                 return 1;
             }
             else
@@ -67,10 +71,10 @@
         // Stop channel, return 0 if successful, 1 if unsuccessful
         else
         {
-           char newDutyCycle[] = {ServoChannel,CHANNEL_STOP};
-            if(_bus -> write(SD20_ADDRESS,newDutyCycle,OUT_BUF_LEN))
+           char stopDutyCycle[] = {ServoChannel,CHANNEL_STOP};
+            if(_bus -> write(SD20_ADDRESS,stopDutyCycle,OUT_BUF_LEN))
             {
-                printf("I2C Failed to write\r\n");
+//                printf("I2C Failed to write\r\n");
                 return 1;
             }
             else
@@ -86,7 +90,7 @@
         char outputBuf[] = {STD_ETD_MODE_CTRL,STD_MODE};
         if(_bus -> write(SD20_ADDRESS,outputBuf,OUT_BUF_LEN))
         {
-            printf("I2C Failed to write\r\n");
+//            printf("I2C Failed to write\r\n");
             return 1;
         }
         else