【问题标题】:Sending commands via I2C to PIC16F1503 using Windows 10 IoT Core使用 Windows 10 IoT Core 通过 I2C 向 PIC16F1503 发送命令
【发布时间】:2019-05-25 15:13:04
【问题描述】:

场景

我想使用 C# 与 PIC16F1503 控制器通信,同时在使用 Windows 10 IoT Core 的 Raspberry Pi 上作为 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

有人知道更多教程或新的“入口”点来与 C# 和这个 mc 相处吗?谢谢!

【问题讨论】:

  • 确保你通过new I2cConnectionSettings(I2C_Address); // set the I2C address of PIC16F1503设置了正确的I2C地址,否则你在调试时会在pic16f1503.Write(new byte[] { COMMANDO_SERVO_1 });得到“从地址未被确认”的异常。
  • @RitaHan-MSFT 是的 - 我想是的。我用指向该课程的 GitHub gist 链接更新了帖子。 gist.github.com/tscholze/825eb8904fe84db27283ffd88360b751

标签: c# i2c windows-iot-core-10


【解决方案1】:

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

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

(您正在尝试更改值类型变量: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 速度是否匹配。以及硬件管脚连接是否正确。

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多