Ethernet to I2C converter (NCD5500) to DAC ( MCP4725) communication problem

I have an Ethernet to I2C converter, PR49-35_NCD5500, connected to the MCP4725 DAC. To test I wanted to set the DAC to output the lowest voltage, and then the highest voltage.
I’m creating the messages using a C# application on Windows to send the Ethernet to I2C converter the messages.
Should the clock be constantly running on the Ethernet to I2C converter, PR49-35_NCD5500, when it’s powered up, or does the clock only operate when it’s talking to the I2C device? Is the data high, and the clock low by default?
For the DAC address we are using the following:
public const byte TEST_DAC_ADRESS = 0xC0;

// To command the MC4725 to output 0V
public const byte TEST_MSB = 0x00;
public const byte TEST_LSB = 0x00;
Converted all that to strings and sent out through Ethernet to the NCD5500:
string outbytes = msg.address + msg.lsb_command + msg.msb_command;
writer_.Write(outbytes);
That didn’t work. Then I saw this example:
//Byte 1 0xAA NCD API Header Byte
//Byte 2 0x02 NCD API Byte Count
//Byte 3 0xFE Payload Byte 1 Command Header
//Byte 4 0x21 Payload Byte 2 Test 2-Way Communications
//Byte 5 0xCB NCD API Checksum 0xAA + 0x02 + 0xFE + 0x21 = 0xCB
So I added the API wrapper
public const byte NCD_API_HEADER = 0xAA;
Is this the correct header for my devices??? (PR49-35_NCD5500)
Then for the payload
// Tried these addresses with jumper on, off, which is the address for the MPC4725?!
//public const byte TEST_DAC_ADRESS = 0xC0;
//public const byte TEST_DAC_ADRESS = 0 x60;
public class I2CMessage
{
public string header;
public string byte_count;
public string address;
public string msb_command;
public string lsb_command;
public string checksum;
static public int numBytes = 3;
}
string outbytes = msg.header+ msg.byte_count + msg.address + msg.msb_command + msg.lsb_command + msg.checksum;

and to try and set to the highest voltage
public const byte TEST_MSB = 0x0F;
public const byte TEST_LSB = 0xFF;
Nothing works.
I can see the 6 byte messages being received and transmitted by the Ethernet to I2c converter, it this right? Shouldn’t the converter be sending only the payload?

Can anybody please help?

@ryan1 can you look into this

Always start with a I2C Scan using Alpha Station, https://ncd.io/alpha
Be sure to set your network settings, Alpha should discover the device.
Once I2C Scan is complete, it should report your C0 address.
Please let me know if this works first.
Thanks,
Ryan

Hi Ryan, I can’t download software from the internet, I would have to go through an approval process and have IT install it.
Is there a manual that specifies the commands? I’m going to interface with the device programatically, so I need instructions that I can write on c#.
Can I just send a message over Ethernet with a command to discover the I2C devices?
Thanks,
Janet

Hi Janet,
The documentation can be found below, I noticed it was not linked correctly on the product page, so we will have that fixed. The Ethernet interface converts TCP/IP data to serial data, so it acts as a Ethernet to serial converter. From there, all of the byte data is the same. The software will be required to move forward with testing, learning, device configuration, and troubleshooting; however, our software does NOT require internet access to use once downloaded and installed.

Hi Ryan, thank you for your help.

After I send the following message with the wrapper to the Ethernet to I2C converter,

        int temp_checksum = 0;

        //public string header;
        //public string byte_count; // this are the data bytes in the message, NOT the total bytes
        //public string address;
        //public string msb_command;
        //public string lsb_command;
        //public string checksum;

        byte[] testmsg = new byte[I2CMessage.numBytes];

        testmsg[0] = I2CConstants.NCD_API_HEADER;  // 0xAA = 170
        testmsg[1] = (byte)3;                      // 3 byte I2C command

        testmsg[2] = I2CConstants.TEST_DAC_ADRESS;  // 0xC0 = 192 
        testmsg[3] = 0x0F; //MSB
        testmsg[4] = 0xFF; //LSB

        // Calculate checksum; it includes the header
        for (int k = 0; k < I2CMessage.numBytes - 1; k++)
        {
            temp_checksum += testmsg[k];
        }

        testmsg[5] = (byte)(temp_checksum & 0x00ff);

When we look at the clock and data lines at the output of the converter, we see the equivalent of the following pattern:

10 1111 000

We’ve tried several values and what we always see is a leading 10, then the 4 bits in the MSB, then three trailing zeroes, 000.

Any idea why this could be? We are always missing the LSB byte, and we don’t see the address byte.