IOT 2つの実行中のウィンドウを中断します。クロックを使用する方法はありますがラズベリーパイの上に、私はSPIを通してそれにMCP4921 DACを接続ラズベリーパイ2.</p> <p>へのjavascriptアプリケーション信号発生器のWindows IOTユニバーサルを開発しています
私がしようとしているのは、与えられた周波数、振幅、オフセットで正弦波を生成することです。私はすでにデバイスが動作していますが、正確なウェーブを生成しようとすると、10Hzの正確なsin波でさえもアプリケーションが遅くなります。
現在の波は、このように生成されます。
var Spi = Windows.Devices.Spi;
var Enumeration = Windows.Devices.Enumeration;
var frequency = 10;
var ts = 1/frequency;
var updateFreq = ts/100;
var time = 0;
var offset = 2;
var amplitude = 2;
var resolution = 4095;
var voltage = 5;
var settings = Spi.SpiConnectionSettings(0);
settings.clockFrequency = 2 * Math.pow(10, 7);
settings.mode = Spi.SpiMode.mode0;
var ags = Spi.SpiDevice.getDeviceSelector();
Enumeration.DeviceInformation.findAllAsync(ags, null).done(dis => {
Spi.SpiDevice.fromIdAsync(dis[0].id, settings).done(device => {
for (; ;) {
var value = offset + amplitude * Math.sin(2 * Math.PI * frequency * time);
var dacValue = parseInt(resolution/voltage * value);
if (dacValue > resolution) dacValue = resolution;
time += updateFreq;
if (time > 1000) time = 0;
var buffer = new Uint8Array(2);
buffer[0] = 0x30 | (dacValue >>> 8);
buffer[1] = 0xFF & dacValue;
device.write(buffer);
}
});
});
私は、私はそれが良い習慣ではないことを知って、それが再び少なくとも10ミリ実行する前のを待つにするsetIntervalを使用しようとしました。
ラズベリータイマー、クロック、またはカスタム割り込みISR機能を0.1 msごとに実行する方法はありますか?
私は既にBCM2835 DatasheetとBCM2836 Datasheetデータシートにdmaレジスタを見ました。私は、どのようにラズベリーPiのクロック割り込みを管理するための解決策を見つけることができません、ピンの中断のみ。
私はArduino Unoでそれを行う方法も知っていますが、私はラズベリーレジスタを操作する方法がわからないので、私を助けません。
ここに生成された正弦波の画像です。事前に
感謝。