Mientras utilizo un analizador lógico con voltaje analógico para probar los voltajes de los pines de salida digital en un Arduino UNO, veo la salida digital y la salida analógica esperadas (ALTAS y BAJAS para digital y de 5V a aproximadamente 0V para analógica).
Estoy usando una lógica 4 de Saleae para probar la salida digital de un Arduino y un Arduino compatible (Ruggeduino) para una salida digital simple. El Arduino parece ejecutar mi boceto muy bien y el Saleae puede leer mi pin de salida como digital y analógico. Sin embargo, en el momento en que suelto el "Ruggeduino" con el mismo boceto, mi salida digital parece no funcionar, y cuando tomo otra muestra con el Saleae, mi voltaje "analógico" muestra los altos y bajos voltajes en los que estoy Esperando, pero la salida "Digital" está sospechosamente en blanco.
¿Por qué mi analizador lógico muestra la salida digital y analógica esperada al probar el Arduino Uno, pero muestra un "Alto" constante para la salida digital pero tanto el voltaje alto como el bajo en la salida analógica cuando se prueba el Ruggeduino?
Información adicional: Dispositivos utilizados:
Editar: No estoy satisfecho con solo sentarme y esperar a que alguien responda, hice más excavaciones. Esto es lo que descubrí:
- La lógica aparece "Alta" a pesar del cambio en el voltaje, ya que parece que está atascada Alta
- El voltaje analógico de "Bajo" para los pines de salida parece ser 1.586V, que cae fuera del rango de TTL "BAJO" (y probablemente la causa del nivel lógico "atascado")
- Esto solo sucede cuando los pines están conectados a los pines de entrada descendentes que solo deben escuchar la salida digital. Una vez que retire los pines de la ecuación, el voltaje "BAJO" vuelve a caer justo por encima de 0V.
Actualmente no tengo una captura de pantalla útil para cargar, pero puedo subir mi boceto para mostrar lo que estoy intentando hacer:
void writeWiegand(String);
int outZeroPin = 6;
int outOnePin = 7;
int led = 13;
void setup() {
pinMode(outZeroPin, OUTPUT);
digitalWrite(outZeroPin, HIGH);
pinMode(outOnePin, OUTPUT);
digitalWrite(outOnePin, HIGH);
Serial.begin(9600);
delay(1000);
}
void loop() {
String code = "0001001001100101100000001011010010";
writeWiegand(code);
delay(500);
}
void writeWiegand(String code) {
for (int i = 0; i <= (code.length() - 1); i++) {
if (code.charAt(i) == '0') {
digitalWrite(outZeroPin, LOW);
//delayMicroseconds(100);
delay(100);
digitalWrite(outZeroPin, HIGH);
Serial.print(code.charAt(i));
} else {
digitalWrite(outOnePin, LOW);
//delayMicroseconds(100);
delay(100);
digitalWrite(outOnePin, HIGH);
Serial.print(code.charAt(i));
}
//delayMicroseconds(100);
delay(100);
}
digitalWrite(led, LOW);
Serial.println(" Output to Wiegand");
}
Edición 2: El dispositivo descendente es un Panel de control de acceso patentado, y los pines de entrada son los pines que se utilizan para la comunicación Wiegand con un lector de tarjetas. Dado que es de propiedad exclusiva, no estoy seguro de lo que legalmente puedo compartir. Según el fabricante, los dos pines de entrada emiten 5 V, que el lector debe tirar a tierra para enviar información a través del cable "Cero" o "Uno". El UNO R3 funciona bien para esta tarea con el mismo código anterior. Cuando acabo de bajar con el Ruggeduino, aún quedan 1.586 V, lo que me parece confuso.