Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3
Widzę osiem tajemniczych pulsów na linii RX, kiedy łączę się z portem szeregowym za pomocą wielu bibliotek klienta (Python, JavaScript, a także wbudowanego monitora szeregowego w IDE). Około 78-79us za sztukę, próbkowane z prędkością 1MS / s za pomocą Logic Pro 16.
Te osiem impulsów interpretowanych przy prędkości 57600 bodów zablokuje oprogramowanie układowe Firmata. I zdarzają się przy każdym połączeniu.
Wykorzystuje to nową instalację Arduino 1.6.8 IDE i wiele szkiców (normalny szkic „Blink” również to odtworzy).
Kroki Repro na moim komputerze:
- Zainstaluj dowolny szkic
- Uruchom analizator logiki, jeśli chcesz go złapać
- Przejdź do Monitor szeregowy. Mam mój skonfigurowany na 57600 bodów, zakończenie linii Newline, ale to nie ma znaczenia
- Jeśli chcesz, zamknij i powtórz krok 3
- Uwaga pulsuje przy każdym podłączeniu do portu szeregowego
Wszelkie sugestie dotyczące diagnozowania tego? Wygląda na to, że w jakiś sposób jest to poziom sterownika szeregowego.
arduino-due
uart
osx
Blake Ramsdell
źródło
źródło
Odpowiedzi:
Krótki:
Patrząc na oprogramowanie układowe ATMEGA16U2 ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) stwierdzam, że podczas konfigurowania / zmiany ustawień Emulowany port szeregowy USB USART jest resetowany. Dzieje się tak nawet po otwarciu Arduino Serial Monitor (musi skonfigurować prędkość szeregową itp.). To powoduje twój skok.
Długo:
Spójrz na funkcję:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
Tam zobaczysz, że po niektórych wierszach resetuje USART, zerując swoje rejestry:
Na stronie 168 aktualnego arkusza danych ATMEGA16U2 przekonasz się, że ustawiając bit 3 UCSR1B (TXEN1), włączasz nadajnik, zastępując normalne działanie portu (tzn. Staje się on wyjściowy). Cytując arkusz danych:
Dlatego pisząc
UCSR1B = 0;
, nie zastępujesz już styku TXD1, który będzie działał jako wejście.ATMEGA16U2 TXD jest podłączony do linii RX ATSAM3X8E. W normalnej pracy, przy włączonym UART, linia ta pozostaje wysoka, jeśli żadne dane nie są przesyłane. Jeśli wyłączysz UART, ta konkretna linia nie będzie już sterownikiem do 1. Ponieważ kod inicjujący nie ustawia podciągania na tym pinie (i nie jest skonfigurowany jako wyjście), pin staje się zmiennoprzecinkowym wejściem, a wszelkie wycieki do GND, a nawet impedancja wejściowa twojej sondy (która jest pomiędzy pinem a GND), powoli doprowadzi poziom logiczny do 0.
Aby rozwiązać ten problem, należy: 1) Zmodyfikować oprogramowanie układowe ATMEGA16U2, ustawiając ten PIN jako WYJŚCIE, o wartości 1. 2) Zmodyfikować oprogramowanie układowe ATMEGA16U2, umożliwiając podciągnięcie na ten pin. 3) (sugerowane) Włącz podciąganie na linii RX w ATSAM3X8E.
źródło