我尝试MAX7219与树莓派3运行UWP应用程序集成。 MAX7219连接到跟随管脚:
天然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无毒运行,并通过shiftOut
功能用于GPIO端口。
现在,我跑过来树莓派项目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管理)的LED指示灯闪烁在混乱的方式。 基础上的芯片的数据表我认为,这个问题是 - 覆盆子处理器的频率。
虽然Arduino的具有大约50兆赫运行时,Rasbpery裨3 1.4 GHz的运行。如TCL,总胆固醇等的值分别在上Arduino的接受范围内,可以是大约微秒一些事情,但它覆盆子可以是1或2纳秒。
接下来的问题是 - 我不能插入文字之间足够短暂停,最小的停顿可以是毫秒,而我的东西太多了SPI标准:
_clock_pin.Write(GpioPinValue.High);
Task.Delay(-1).Wait(1);
_clock_pin.Write(GpioPinValue.Low);
另一个问题,我运行与Visual Studio 2015年的项目,所以我不能使用的NuGet库,RaspberrySharp等。 有什么可以解决?
上有树莓派3两种本地SPI接口,您可以使用SPI1:
使用SPI1的代码示例:
// Use chip select line CS0
var settings = new SpiConnectionSettings(0);
// Set clock to 10MHz
settings.ClockFrequency = 10000000;
// Get a selector string that will return our wanted SPI controller
string aqs = SpiDevice.GetDeviceSelector("SPI1");
// Find the SPI bus controller devices with our selector string
var dis = await DeviceInformation.FindAllAsync(aqs);
// Create an SpiDevice with our selected bus controller and Spi settings
using (SpiDevice device = await SpiDevice.FromIdAsync(dis[0].Id, settings))
{
byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
device.Write(writeBuf);
}