Отправка команд через I2C на PIC16F1503 с помощью Windows 10 IoT Core - PullRequest
1 голос
/ 25 мая 2019

Сценарий

Я хочу обмениваться данными с контроллером PIC16F1503 с использованием C # во время работы в качестве приложения UWP на Raspberry Pi с использованием Windows 10 IoT Core.

Кажетсячто мой источник обнаруживает контроллер, используя 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?Спасибо!

1 Ответ

2 голосов
/ 30 мая 2019

Вы отправляете несколько байтов из Raspberry Pi в PIC16F1503 через I2C, а я получаю их путем отладки вашего кода: 1, 1, 1, 1-43-7-0-0, 1.

Но, похоже, они не все соответствуют тому, что вы хотите отправить, потому что я обнаружил проблему в вашей функции WriteByte, например:

(Вы пытаетесь изменить переменную типа значения: byte[] data. См. " Передача параметров (Руководство по программированию в C #) ")

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 или нет. И подключение аппаратных контактов правильное или нет.

...