Изначально я подозревал, что мне нужно будет использовать драйвер молнии, чтобы добиться нужной мне частоты прерываний. Оказывается, стандартного драйвера Inbox достаточно для того, что мне нужно.
Вот шаги, чтобы воспроизвести мою ситуацию:
Я создал простой скетч Arduino, который будет посылать импульсы с частотой 10 000 Гц.
int dataPin = 12;
void setup() {
pinMode(dataPin, OUTPUT);
}
void loop() {
int count = 0;
while (count < 400)
{
//pulse
digitalWrite(dataPin, HIGH);
digitalWrite(dataPin, LOW);
//This delay presumably makes the pulse be 10000 Hz
delayMicroseconds(100);
count++;
}
delay(5000);
}
Создал приложение UWP с простым пользовательским интерфейсом и текстовым блоком в центре страницы.
public sealed partial class MainPage : Page
{
private GpioController gpio;
private const int inputPinNumber = 17;
private GpioPin inputPin;
private int count;
private I2cController i2cController;
private SpiController spiController;
public MainPage()
{
this.InitializeComponent();
this.Setup();
}
private void Setup()
{
if (LightningProvider.IsLightningEnabled)
{
LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
}
this.gpio = GpioController.GetDefault();
this.inputPin = this.gpio.OpenPin(inputPinNumber);
if (this.inputPin.IsDriveModeSupported(GpioPinDriveMode.InputPullUp))
{
this.inputPin.SetDriveMode(GpioPinDriveMode.InputPullUp);
}
else
{
this.inputPin.SetDriveMode(GpioPinDriveMode.Input);
}
this.inputPin.ValueChanged += InputPinOnValueChanged;
}
private void InputPinOnValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
{
var task = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
if (args.Edge == GpioPinEdge.FallingEdge)
{
this.count++;
this.CountBlock.Text = this.count.ToString();
}
else
{
}
});
}
}
}
Настройте Windows IoT на использование драйвера прямого сопоставления памяти.
Следующим шагом было соединение контакта на Arduino с контактом на Pi через транзистор. Я сделал это, чтобы воспользоваться встроенным подтягивающим резистором на контактах GPIO на Pi.
Когда оба приложения запускались одновременно, я собирал только около 30 импульсов за цикл.
Вернулся к настройке Windows IoT, сбросил драйвер обратно на драйвер «Входящие» и повторно запустил оба приложения. На этот раз я не пропустил пульс.
В заключение, драйвера Inbox должно быть достаточно, чтобы дать мне до 10 кГц без каких-либо проблем.
person
Evan Nielsen
schedule
01.02.2017