Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3
Veo ocho pulsos misteriosos en la línea RX cuando me conecto al puerto serie usando múltiples bibliotecas de clientes (Python, JavaScript, así como el monitor serie incorporado en el IDE). Aproximadamente 78-79us cada uno, muestreado a 1MS / s con un Logic Pro 16.
Estos ocho pulsos cuando se interpretan a 57600 baudios atascarán el firmware de Firmata. Y suceden en cada conexión.
Esto está usando una nueva instalación del Arduino 1.6.8 IDE y con múltiples bocetos (el boceto normal "Blink" también reproducirá esto).
Repro pasos en mi máquina:
- Instalar cualquier boceto
- Inicie un analizador lógico si quiere atraparlo
- Vaya a Monitor de serie. Tengo el mío configurado para 57600 baudios, final de línea de Newline, pero no importa
- Si lo desea, cierre y repita el paso 3
- Tenga en cuenta los pulsos cada vez que se conecte al puerto serie
¿Alguna sugerencia para diagnosticar esto? Suena como si fuera un controlador de serie de alguna manera.
arduino-due
uart
osx
Blake Ramsdell
fuente
fuente
Respuestas:
Corto:
Mirando el firmware ATMEGA16U2 ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) Lo encuentro, cuando configuras / cambias la configuración del Puerto serie emulado USB, el USART se reinicia. Esto sucede incluso cuando abre el monitor serie Arduino (debe configurar la velocidad de serie, etc.). Esto causa tu pico.
Largo:
Mira la función:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
Allí verá que después de algunas líneas, restablece el USART, poniendo a cero sus registros:
En la página 168, de la hoja de datos ATMEGA16U2 actual, encontrará que, al configurar el bit 3 de UCSR1B (TXEN1), habilita el transmisor, anulando el funcionamiento normal del puerto (es decir, se convierte en salida). Citando la hoja de datos:
Por lo tanto, al escribir
UCSR1B = 0;
, ya no anulará el pin TXD1, que actuará como entrada.El ATMEGA16U2 TXD está conectado a la línea RX del ATSAM3X8E. En funcionamiento normal, con el UART habilitado, esa línea permanece alta si no se transmiten datos. Si deshabilita el UART, esa línea en particular ya no es un controlador para 1. Dado que el código de inicialización no establece el pull-up en ese pin (y tampoco está configurado como salida), el pin se convierte en una entrada flotante y cualquier fuga a GND o incluso la impedancia de entrada de su sonda (que está entre su pin y GND), llevará lentamente el nivel lógico a 0.
Para anular este problema, debe: 1) Modificar el firmware ATMEGA16U2, estableciendo ese PIN como SALIDA, con el valor 1. 2) Modificar el firmware ATMEGA16U2, habilitando el pull-up en ese pin. 3) (sugerido) Habilite el pull-up en la línea RX en el ATSAM3X8E.
fuente