Я пытаюсь интегрировать max7219 с приложением UWP, работающим на Raspberry Pi 3.
max7219, подключенным к следующим контактам:
- 40 (GPIO21) - Часы
- 38 (GPIO20) - Данные
- 36 (GPIO16) - CS
Собственные порты SPI: 19, 21, 23, 24, 26 заняты сенсорной панелью.
Я не сделалнашел, как настроить .NET Windows.Devices.SerialCommunication.SerialDevice
для использования портов GPIO, поэтому я портировал shiftOut
из Arduino следующим образом:
private void shiftOut(BitOrder aBitOrder, byte val)
{
if (aBitOrder == BitOrder.LSBFIRST) {
for (byte i = 0; i < 8; i++)
{
GpioPinValue __val = (val & (1 << i)) == 0x0 ?
GpioPinValue.Low :
GpioPinValue.High;
_data_pin.Write(__val);
}
} else {
for (byte i = 0; i < 8; i++)
{
GpioPinValue __val = (val & (1 << (7 - i))) == 0x0 ?
GpioPinValue.Low :
GpioPinValue.High;
_data_pin.Write(__val);
}
}
_clock_pin.Write(GpioPinValue.High);
_clock_pin.Write(GpioPinValue.Low);
}
В прошлом проект работал на Arduino Avr и использовал порты GPIO через *Функция 1018 *.
Теперь я запускаю проект на Raspberry Pi 3. Я предоставляю следующие данные для чипа:
{ 0x01, 0x01, 0x01, 0x01, 0x01, 0x1, 0x01, 0x01 },
{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
{ 0x01, 0x01, 0x01, 0x01, 0x01, 0x1, 0x01, 0x01 }
, но светодиоды на циферблате (который управляется max7219) хаотично мерцают .
Основываясь на спецификации чипа, я думаю, что проблема - частота процессора Raspberry.
В то время как Arduino работает с частотой приблизительно 50 МГц, Rasbpery Pi 3 работает с частотой 1,4 ГГц.Значения, такие как Tcl, Tch и т. Д. Находились в диапазоне приемлемости на Arduino, может быть, что-то около микросекунды, но на Raspberry это может быть 1 или 2 наносекунды.
Следующая проблема - я не могувставьте достаточно короткую паузу между записями, минимальная пауза может составлять миллисекунду, и я считаю, что это слишком много для стандартов SPI:
_clock_pin.Write(GpioPinValue.High);
Task.Delay(-1).Wait(1);
_clock_pin.Write(GpioPinValue.Low);
Другая проблема, я запускаю проект с Visual Studio 2015, поэтому я могуне использовать библиотеки Nuget как RaspberrySharp и др.
Какое может быть решение?