¿Cómo puedo saber si una conexión en serie está enviando bytes?

1

Tengo un Teensy conectado a un controlador de motor Pololu. Si envío bytes a través de USB (utilizando Pololu Serial Transmitter v1.3) puedo hacer que funcione (por ejemplo, 0x85 0x00 0x20 hace que el motor funcione a baja velocidad). Sin embargo, cuando intento lo mismo en mi boceto, no consigo que funcione. Esto me lleva a la conclusión de que puede haber un problema con mis cables seriales o con la propia placa de control del motor.

Así que me gustaría poder probar que la conexión serial está funcionando, ¿puedo lograr esto con un multímetro o algo así?

Mi código, en caso de que haya algún problema con eso es:

#define rxPin 10
#define txPin 9
SoftwareSerial smcSerial = SoftwareSerial(rxPin, txPin);

bucle:

smcSerial.write(0x85);
smcSerial.write((byte) 0x00);
smcSerial.write(0x20);
    
pregunta Aequitas

3 respuestas

2

Si está utilizando la configuración de velocidad en baudios automática para los sistemas de motor Pololu, primero debe enviar "un byte de indicación de velocidad en baudios", básicamente envía un 0xAA primero, y luego de cualquier encendido o reinicio. Consulte las descripciones de la configuración de serie aquí: enlace

No parece decir si el "byte de indicación" es aceptable con cada transmisión. En general, puede ser mejor configurar el sistema a una velocidad de transmisión conocida antes de tiempo, o usar el valor predeterminado (que parece ser 9600).

Para verificar físicamente la transmisión desde su controlador Teensy, también puede colocar un LED y una resistencia en la línea de transmisión (por ejemplo, con una resistencia de 500 ohmios a gnd o V +). El LED debería parpadear brevemente con cada paquete de transmisión, aunque a velocidades de transmisión más altas, los flashes serán bastante cortos (por lo tanto, si ese es un problema, realice algunas pruebas a velocidades más bajas para la verificación).

    
respondido por el Nedd
0

No puedo comentar todavía, así que estoy publicando esto como una respuesta:

¿Olvidaste smcSerial.begin(9600) en tu función setup() ?
Además, asegúrese de pasar la velocidad en baudios adecuada a begin() , 9600 es solo un ejemplo.
Y no, un multímetro no serviría de nada para solucionar este problema.

    
respondido por el Mishony
0

Mi herramienta para probar datos de serie y / o modulación de pulso es usar un osciloscopio de almacenamiento digital.

Tradicionalmente, los DSO son bastante caros. Pero recientemente han surgido algunos diseños de mano provenientes del mercado de aficionados / fabricantes que son lo suficientemente buenos como para solucionar la mayoría de las comunicaciones digitales. Google "DSO nano" y "DIY DSO".

Si incluso un DSO de grado de pasatiempo parece demasiado para gastarlo, siempre puedes usar algún software para transformar tu tarjeta de sonido en un osciloscopio. De hecho, esto es lo que he hecho. Tenga en cuenta que su tarjeta de sonido es una mierda al capturar valores de voltaje exactos porque la entrada está acoplada de forma capacitiva. Pero es bueno para capturar datos digitales en serie, lo suficiente como para que puedas decodificar los datos tú mismo.

Solo he usado XOscope en Linux pero puedes buscar en Google "software oscilloscope mac" o "software oscilloscope windows" en ti Necesito software similar en otras plataformas.

    
respondido por el slebetman

Lea otras preguntas en las etiquetas