Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3
Ich sehe acht mysteriöse Impulse auf der RX-Leitung, wenn ich über mehrere Client-Bibliotheken (Python, JavaScript sowie den in der IDE integrierten seriellen Monitor) eine Verbindung zum seriellen Port herstelle. Ungefähr 78-79us pro Stück, gemessen mit 1MS / s mit einem Logic Pro 16.
Diese acht Impulse stören die Firmata-Firmware, wenn sie mit 57600 Baud interpretiert werden. Und sie passieren bei jeder Verbindung.
Hierbei wird eine neue Installation der Arduino 1.6.8-IDE mit mehreren Skizzen verwendet (die normale "Blink" -Skizze gibt dies auch wieder).
Repro Schritte auf meinem Computer:
- Installieren Sie eine Skizze
- Starten Sie einen Logikanalysator, wenn Sie ihn abfangen möchten
- Wechseln Sie zu Serial Monitor. Ich habe meine für 57600 Baud, Newline Leitungsende konfiguriert, aber es spielt keine Rolle
- Wenn Sie möchten, schließen Sie und wiederholen Sie Schritt 3
- Beachten Sie die Impulse jedes Mal, wenn Sie eine Verbindung zum seriellen Port herstellen
Irgendwelche Vorschläge zur Diagnose? In gewisser Weise klingt es so, als ob es sich um einen seriellen Treiber handelt.
quelle
Antworten:
Kurz:
Betrachtet man die ATMEGA16U2-Firmware ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ), so stelle ich fest, dass beim Konfigurieren / Ändern der Einstellungen der USB emulierte serielle Schnittstelle, der USART wird zurückgesetzt. Dies geschieht auch, wenn Sie den Arduino Serial Monitor öffnen (er muss die serielle Geschwindigkeit usw. konfigurieren). Dies verursacht Ihre Spitze.
Lange:
Funktion anschauen:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
Dort sehen Sie, dass nach einigen Zeilen der USART zurückgesetzt wird, indem seine Register auf Null gesetzt werden:
Auf Seite 168 des aktuellen ATMEGA16U2-Datenblattes finden Sie, dass Sie durch Setzen von Bit 3 (TXEN1) von UCSR1B den Sender aktivieren und den normalen Port-Betrieb außer Kraft setzen (dh, er wird ausgegeben). Zitat aus dem Datenblatt:
Wenn
UCSR1B = 0;
Sie also schreiben , überschreiben Sie nicht mehr den TXD1-Pin, der als Eingang fungiert.Der ATMEGA16U2 TXD ist an die RX-Leitung des ATSAM3X8E angeschlossen. Im normalen Betrieb bleibt diese Leitung bei aktiviertem UART hoch, wenn keine Daten übertragen werden. Wenn Sie den UART deaktivieren, ist diese bestimmte Leitung kein Treiber mehr für 1. Da der Initialisierungscode das Pull-up für diesen Pin nicht festlegt (und auch nicht als Ausgang konfiguriert ist), wird der Pin zu einem potentialfreien Eingang und führt zu einer Leckage GND oder sogar die Eingangsimpedanz Ihrer Sonde (die zwischen Ihrem Pin und GND liegt) bringen den Logikpegel langsam auf 0.
Um dieses Problem zu umgehen, sollten Sie entweder: 1) die ATMEGA16U2-Firmware ändern, indem Sie diese PIN als AUSGANG mit dem Wert 1 festlegen. 2) die ATMEGA16U2-Firmware ändern, indem Sie das Pull-up auf diesen Pin aktivieren. 3) (empfohlen) Aktivieren Sie das Pull-up auf der RX-Leitung des ATSAM3X8E.
quelle