9

.NET Micro Framework 4.1を使用してNetduinoボードをプログラミングしており、ミリ秒よりも高い時間分解能を取得したいと考えています。これは、LEDを非常に速く点滅させて暗くしようとしているためです。

問題は、サンプルコードが数ミリ秒かかるThread.Sleep(..)を使用していることです。

問題の問題を示すhttp://netduino.com/projects/のサンプルコード:

OutputPort ledOnboard = new OutputPort(Pins.ONBOARD_LED, false);
while (true)
{
    ledOnboard.Write(true);
    Thread.Sleep(1); // << PROBLEM: Can only get as low as 1 millisecond

より高い時間分解能を使用せずに調光を達成する別の方法があるとしても、私はゲームです。

4

5 に答える 5

17

これは、より良い時間分解能を得ることについてのあなたの質問に答えませんが、LEDの明るさを変えることに関するあなたの問題を解決します。NetduinoにはPWMモジュールを使用する必要があります。

Netduinoの基本:パルス幅変調(PWM)の使用は、その使用方法に関する優れた記事です。

于 2010-12-01T02:14:30.497 に答える
8

私は過去に同様の問題を抱えており、マイクロ秒の範囲で時間を計るために次の方法を使用しました。最初の行は、1ミリ秒あたりのティック数を決定します(これを使用してからしばらく経ちましたが、1ティックは10マイクロ秒だったと思います)。2行目は、システムがオンになっている時間(ティック単位)を取得します。これがお役に立てば幸いです。

public const Int64 ticks_per_millisecond = System.TimeSpan.TicksPerMillisecond;

public static long GetCurrentTimeInTicks()
{
    return Microsoft.SPOT.Hardware.Utility.GetMachineTime().Ticks;
}
于 2010-12-12T00:35:49.870 に答える
3

スリープを使用する代わりに、タイマーを使用してイベントを発生させることができます。

タイマーのIntervalプロパティはdoubleであるため、1ミリ秒未満にすることができます。

http://msdn.microsoft.com/en-us/library/0tcs6ww8(v=VS.90).aspx

于 2010-12-01T02:07:46.323 に答える
0

Seidleroniの回答に対する彼のコメントの中で、BrainSlugs83は、「ビジーループに座って、必要なティック数が経過するのを待ちます。編集で追加した関数を参照してください」と提案しています。しかし、編集に追加された関数が表示されません。私はそれがこのようなものになると思います:

using System;
using Microsoft.SPOT.Hardware;

private static long _TicksPerMicroSecond = TimeSpan.TicksPerMillisecond/1000;

private void Wait(long microseconds)
{
    var then = Utility.GetMachineTime().Ticks;
    var ticksToWait = microseconds * _TicksPerNanoSecond;
    while (true)
    {
        var now = Utility.GetMachineTime().Ticks;
        if ((now - then) > ticksToWait) break;
    }
}
于 2014-09-18T13:11:43.017 に答える
0

あなたが考えていないかもしれない点は、あなたのコードがあなたのPCのリアルタイムクロックに基づいている.NETシステム名前空間に依存しているということです。答えはデバイスのタイマーに依存していることに注意してください。

今後は、コードで使用している情報のソースを確認することをお勧めします。これは、.NETに適しているか(基本的にPCに基づいています)、コードが実行されているデバイスです(たとえば、システム以外の名前空間を持つのはどれですか?

PWMは、DC電流を人為的に(パルス幅を変えることによって)制御するための良い方法ですが、PWM周波数を変えることは、1日の終わりの時間の関数です。

スリープのように遅延を使用するのではなく、スレッドを生成して明るさを管理することをお勧めします。スリープの使用は基本的に直線的な手続き型メソッドであり、コードは単一のスレッドを使用する場合にのみこれを実行できます。

于 2015-05-31T22:54:40.603 に答える