¿Limitaciones de Arduino Voltage Pulse? (TTL)

Soy nuevo en este foro y tengo una pregunta sobre las placas basadas en EE y Arduino.

¿Las placas basadas en Arduino son capaces de producir pulsos en el rango de MICROsegundos (usecs)? Por ejemplo, me gustaría generar 1 pulso (digamos 5 voltios por 200 usecs) dado un comando arbitrario que envío al microcontrolador. Este pulso se usaría para activar un dispositivo al que está conectado. es posible?

Tengo una placa Azteeg X3 Pro (ATMEGA2560 y base RAMPS 1.4).

Idealmente, esta imagen es lo que estoy tratando de hacer.ingrese la descripción de la imagen aquí

Bueno, según esta discusión, sí, pero no puedes confiar en el lenguaje "Arduino" para eso. Y dependiendo de la frecuencia con la que desee las legumbres, es posible que no tenga mucho tiempo para hacer "otras cosas".
¿Necesita que el ancho de pulso sea exactamente 200usec? ¿Está bien si son 195 us o 205 us?
El rango no tiene que ser demasiado preciso para mí, así que está bien.

Respuestas (2)

¿Las placas basadas en Arduino son capaces de producir pulsos en el rango de MICROsegundos (usecs)?

Esto se puede lograr de varias maneras

Algunos ejemplos:

  1. Usando la función micros() .
    Esto devuelve el valor de un contador que está en unidades de microsegundos y que se incrementa cada 4 u 8 microsegundos (ver más abajo)

Ellos dicen

Devuelve el número de microsegundos desde que la placa Arduino comenzó a ejecutar el programa actual. Este número se desbordará (volverá a cero) después de aproximadamente 70 minutos. En placas Arduino de 16 MHz (por ejemplo, Duemilanove y Nano), esta función tiene una resolución de cuatro microsegundos (es decir, el valor devuelto es siempre un múltiplo de cuatro). En placas Arduino de 8 MHz (por ejemplo, LilyPad), esta función tiene una resolución de ocho microsegundos.

  1. Aquí hay una pregunta de SE EE de 2011 que debería ser útil: Arduino: ¿mejor resolución de microsegundos que micros ()? Las respuestas cubren el uso directo de los temporizadores de hardware.

  1. Puede utilizar la función delayMicroseconds() que retrasa todas las acciones durante el período definido. Si bien limitar esto puede ser útil en algunas aplicaciones simples.

  2. Puede escribir su propio bucle con tiempo conocido por bucle. Esto le permitiría realizar varias funciones simples mientras espera.

@Dave Tweed - gracias - por alguna razón asumí que usar ( & ) dentro [...] rompería el sistema, pero obviamente ese no es el caso.

Sí, Arduino es capaz de producir pulsos.

Este código funcionará para usted.

Código:

const int kPinPulse = 8; // You can select any pin of arduino
const int kPinSW = 9;    //This switch will work as command

void setup()
{
   pinMode(kPinPulse, OUTPUT);
   pinMode(kPinSW, INPUT);      
}

void loop()
{
   if(digitalRead(kPinSW) == LOW) //When Switch pressed Command Sent
   {
      digitalWrite(kPinPulse, HIGH); // start your pulse
      delayMicroseconds(200);        // It's provide your time interval of 200 microseconds
      digitalWrite(kPinPulse, LOW);  // end your pulse
      while(digitalRead(kPinSW) == LOW); 
   }     
}

NOTA: Aquí, he tomado un interruptor en el pin número 9, esto funcionará como un comando para enviar un pulso de 200 microsegundos, es decir, cuando se presione el interruptor 200uS pulsese generará.

Sólo dos comentarios. 1) esto producirá una serie de pequeños pulsos hacia tierra; ¿Por qué no esperas un comando como escribió el OP en su imagen? 2) te retrasaste 100 microsegundos. ¿Por qué, dado que el OP solicitó un intervalo de 200us? Lo sé, es realmente fácil modificarlo, pero... ¿Por qué molestarse en escribir un intervalo diferente? Como nota al margen, además, tenga en cuenta que las funciones de digitalWrite no son instantáneas. Si elimina el retraso, notará que el pulso tendrá un ancho de casi 14us (17us si agrega un retraso de 0). Entonces... Esto deberá tenerse en cuenta al recortar la función
@ frarugi87... Okk hecho edición.