Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3
Estou vendo oito pulsos misteriosos na linha RX quando me conecto à porta serial usando várias bibliotecas cliente (Python, JavaScript, bem como o Serial Monitor interno no IDE). Aproximadamente 78-79us cada, amostrados a 1MS / s com um Logic Pro 16.
Esses oito pulsos, quando interpretados em 57600 baud, atolam o firmware Firmata. E eles acontecem em todas as conexões.
Isso está usando uma nova instalação do IDE do Arduino 1.6.8 e com vários esboços (o esboço "Blink" normal também reproduzirá isso).
O Repro está na minha máquina
- Instale qualquer esboço
- Inicie um analisador lógico se você quiser capturá-lo
- Vá para o Monitor serial. Eu tenho o meu configurado para 57600 baud, final de linha Newline, mas isso não importa
- Se desejar, feche e repita a etapa 3
- Observe pulsos sempre que você se conectar à porta serial
Alguma sugestão para diagnosticar isso? Parece que é o nível de driver serial de alguma forma.
arduino-due
uart
osx
Blake Ramsdell
fonte
fonte
Respostas:
Curto:
Observando o firmware do ATMEGA16U2 ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) Acho que, quando você define / altera as configurações do Porta serial emulada USB, o USART é redefinido. Isso acontece mesmo quando você abre o Arduino Serial Monitor (ele deve configurar a velocidade serial, etc.). Isso causa seu pico.
Grandes:
Veja a função:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
Lá você verá que, após algumas linhas, ele redefine o USART, zerando seus registros:
Na página 168, da folha de dados atual do ATMEGA16U2, você encontrará que, configurando o bit 3 do UCSR1B (TXEN1), você habilita o transmissor, substituindo a operação normal da porta (ou seja, ela se torna saída). Citando a folha de dados:
Portanto, ao escrever,
UCSR1B = 0;
você não substitui mais o pino TXD1, que atuará como entrada.O ATMEGA16U2 TXD está conectado à linha RX do ATSAM3X8E. Em operação normal, com o UART ativado, essa linha permanece alta se nenhum dado estiver sendo transmitido. Se você desabilitar o UART, essa linha específica não será mais um driver para 1. Como o código de inicialização não define o pull-up naquele pino (e nem está configurado como saída), o pino se torna uma entrada flutuante e qualquer vazamento para O GND ou mesmo a impedância de entrada da sua sonda (que fica entre o pino e o GND), trará lentamente o nível lógico para 0.
Para substituir esse problema, você deve: 1) Modificar o firmware do ATMEGA16U2, configurando esse PIN como OUTPUT, com o valor 1. 2) Modificar o firmware do ATMEGA16U2, ativando o pull-up nesse pino. 3) (sugerido) Habilite o pull-up na linha RX no ATSAM3X8E.
fonte