resolución de tiempo mayor uso de .NET Micro Framework a bordo Netduino (para la regulación de un LED)?

StackOverflow https://stackoverflow.com/questions/4320572

Pregunta

Estoy programando un href="http://netduino.com/" rel="nofollow"> Netduino bordo utilizando .NET Micro Framework 4.1 y desea obtener una resolución de tiempo superior a milisegundos. Esto se debe a que estoy tratando de atenuar un LED parpadeante por lo que realmente rápido.

El problema es que el código de ejemplo utiliza Thread.Sleep (..) que toma un número de milisegundos.

http://netduino.com/projects/ que muestra el tema en cuestión:

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

Incluso si no hay otra manera de lograr oscurecimiento al no utilizar una resolución de tiempo mayor, estoy juego.

¿Fue útil?

Solución

Esto no responde a su pregunta acerca de cómo obtener una mejor resolución de tiempo, pero no soluciona el problema con el cambio de la luminosidad en una LED . Usted debe utilizar el PWM módulo para el Netduino.

Netduino Fundamentos: El uso de modulación por ancho de pulso ( PWM) es un gran artículo sobre cómo usarlo.

Otros consejos

he tenido un problema similar en el pasado y se utiliza el método siguiente para el tiempo en el rango de microsegundos. La primera línea determina el número de garrapatas están en una milésima de segundo (su sido un tiempo desde que he utilizado esto, pero creo que la garrapata 1 fue de 10 microsegundos). La segunda línea se hace la cantidad de tiempo que el sistema ha sido activado (en las garrapatas). Espero que esto ayude.

public const Int64 ticks_per_millisecond = System.TimeSpan.TicksPerMillisecond;

public static long GetCurrentTimeInTicks()
{
    return Microsoft.SPOT.Hardware.Utility.GetMachineTime().Ticks;
}

Se puede utilizar un temporizador para provocar un evento en lugar de utilizar el sueño.

La propiedad Interval en un temporizador es un doble para que pueda tener menos de un milisegundo en él.

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

En su comentario a respuesta de Seidleroni BrainSlugs83 sugiere "sentarse en un bucle ocupado y esperar a que el número deseado de las garrapatas a transcurrido. Véase la función I añadido en la edición". Pero no puedo ver la función añadida a la edición. Lo que supongo que sería algo como esto:

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;
    }
}

Un punto que no podría estar pensando es que su código se basa en el espacio de nombres de sistema .NET, que se basa en el reloj de tiempo real en su PC. Tenga en cuenta que las respuestas se basan en el temporizador en el dispositivo.

En el futuro, yo sugeriría que se tome un momento para calificar la fuente de la información que está utilizando en su código - es que .NET adecuada (que se basa fundamentalmente en su PC), o el dispositivo es el código que se ejecuta en (que tendrá un espacio de nombres distinto del sistema, por ejemplo)?

PWM es una forma buena para controlar la corriente DC artificialmente (mediante la variación de la anchura de pulso), pero variando la frecuencia PWM todavía será una función del tiempo al final del día.

En lugar de usar .... retrasos como el sueño .... es posible que desee generar un hilo y tienen que gestionar el brillo. Utilizando el sueño sigue siendo básicamente un método procedimental línea recta y su código sólo será capaz de hacer esto una cosa si se utiliza un solo hilo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top