使用 Windows 10 IoT Core 通过 I2C 向 PIC16F1503 发送命令

Sending commands via I2C to PIC16F1503 using Windows 10 IoT Core

场景

我想使用 C# 与 PIC16F1503 控制器进行通信,而 运行 作为 Raspberry Pi 上使用 Windows 10 IoT Core 的 UWP 应用程序。

我的消息来源似乎使用 I2cDevice.FromIdAsync(...) 检测到控制器。但是,如果我尝试通过以下方式发送 "Servo1" 命令 0x01

pic16f1503.Write(new byte[] { COMMANDO_SERVO_1 });
pic16f1503.Write(data.ToArray()); 

没有任何反应。我(希望)启用 "Servo1" 与:

private void WriteConfiguration()
{
    // Create configuration mask.
    byte config = 0;

    // Enable servo 1
    config |= 1;

    // Enable servo 2
    config |= 0 << 1;

    // Enable lights
     config |= 0 << 2;

     // Light mode
     config |= 0 << 3;

    // Light on
    config |= 0 << 4;

    // Write configuration to device.
    pic16f1503.Write(new byte[] { COMMAND_CONFIG});
    pic16f1503.Write(new byte[] { config });
}

完整来源

GitHub Gist

是否有人知道进一步的教程或新的 "entry" 要点以与 C# 和此 mc 相处?谢谢!

您通过 I2C 从 Raspberry Pi 向 PIC16F1503 发送了几个字节,我通过调试您的代码得到了它们:1, 1, 1, 1-43-7-0-0, 1.

但它们似乎并不完全符合您实际要发送的内容,因为我在您的 WriteByte 函数中发现了一个问题,例如:

(您正在尝试更改 value-type 变量:byte[] data。请参阅“Passing Parameters (C# Programming Guide)”)

private void WriteByte(byte command, byte[] data)
{
    data.ToList().Insert(0, command);
    data.ToArray();
    pic16f1503.Write(data);
}

我将上面的函数编辑为:

private void WriteByte(byte command, byte[] data)
{
    var sendData = data.ToList();
    sendData.Insert(0, command);
    pic16f1503.Write(sendData.ToArray());
}

然后发送数据:0-1, 0-1, 1, 1-43-7-0-0, 0-1

打印 int 数组时出现小问题。

编辑此行:Debug.WriteLine($"PIC16F1503 - SetDegrees to {ms} start.\nData: {data}");

为了打印出正确的格式数据:

        Debug.WriteLine($"PIC16F1503 - SetDegrees to {ms} start.\n");
        Debug.WriteLine("Data: ");
        foreach (var element in data)
        {
            Debug.WriteLine(element);
        }
        Debug.WriteLine("\n");

之后您将正确的数据发送到PIC16F1503。如果仍然不工作,请检查两个设备的 I2C 速度是否匹配。以及硬件管脚连接是否正确。