I am trying to read a TMP100 temperature sensor. It works when I use the I2C Software emulation code SoftwareI2CBus so I know the hardware is good. When I try using I2CDevice the SCL and SDA pins just stay high. I have a Saleae Logic 16 on the pins. I see data using the software emulation but not using the I2CDevice.
Here is the code:
[color=#2d2cfa;]using[/color] System;
[color=#2d2cfa;]using[/color] System.Net;
[color=#2d2cfa;]using[/color] System.Net.Sockets;
[color=#2d2cfa;]using[/color] System.Threading;
[color=#2d2cfa;]using[/color] Microsoft.SPOT;
[color=#2d2cfa;]using[/color] Microsoft.SPOT.Hardware;
[color=#2d2cfa;]using[/color] SecretLabs.NETMF.Hardware;
[color=#2d2cfa;]using[/color] SecretLabs.NETMF.Hardware.Netduino;
namespace[color=#000000;] I2CTest[/color]
{
[color=#000000;] [/color]public[color=#000000;] [/color]class[color=#000000;] [/color][color=#34a2bb;]Program[/color]
{
[color=#2d2cfa;]public[/color] [color=#2d2cfa;]static[/color] [color=#2d2cfa;]void[/color] Main()
{
[color=#000000;] [/color]I2CDevice[color=#000000;].[/color]Configuration[color=#000000;] config = [/color][color=#2d2cfa;]new[/color][color=#000000;] [/color]I2CDevice[color=#000000;].[/color]Configuration[color=#000000;](0x48, 100);[/color]
[color=#34a2bb;]I2CDevice[/color] dev = [color=#2d2cfa;]new[/color] [color=#34a2bb;]I2CDevice[/color](config);
[color=#000000;] [/color]// Make the transactions
[color=#34a2bb;]Byte[/color][] tempData = [color=#2d2cfa;]new[/color] [color=#34a2bb;]Byte[/color][2];
[color=#2d2cfa;]var[/color] transaction = [color=#2d2cfa;]new[/color] [color=#34a2bb;]I2CDevice[/color].[color=#34a2bb;]I2CTransaction[/color][] {
[color=#34a2bb;]I2CDevice[/color].CreateWriteTransaction([color=#2d2cfa;]new[/color] [color=#34a2bb;]Byte[/color][] {0x00}),
[color=#34a2bb;]I2CDevice[/color].CreateReadTransaction(tempData)
};
[color=#34a2bb;]Int32[/color] bytesTransfered = dev.Execute(transaction, 300);
[color=#2d2cfa;]if[/color] ( bytesTransfered == 0)
{
[color=#000000;] [/color][color=#2d2cfa;]throw[/color][color=#000000;] [/color][color=#2d2cfa;]new[/color][color=#000000;] [/color][color=#34a2bb;]Exception[/color][color=#000000;]([/color]"I2C transaction failed"[color=#000000;]);[/color]
}
[color=#34a2bb;]UInt16[/color] utmp = tempData[0];
utmp <<= 8;
utmp |= tempData[1];
[color=#34a2bb;]Int16[/color] tmp = ([color=#34a2bb;]Int16[/color])utmp;
[color=#34a2bb;]Double[/color] temp = ([color=#34a2bb;]Double[/color])tmp;
temp /= ([color=#34a2bb;]Double[/color])256;
[color=#34a2bb;]Debug[/color].Print(temp.ToString() + [color=#b51f20;]" Degrees C"[/color]);
}
}
}