Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3
Saya melihat delapan pulsa misterius pada jalur RX ketika saya terhubung ke port serial menggunakan beberapa pustaka klien (Python, JavaScript, serta Monitor Seri terintegrasi di dalam IDE). Tentang 78-79 us masing-masing, sampel pada 1MS / s dengan Logic Pro 16.
Delapan pulsa ini bila ditafsirkan pada 57600 baud akan macet pada firmware Firmata. Dan itu terjadi pada setiap koneksi.
Ini menggunakan instalasi baru Arduino 1.6.8 IDE dan dengan beberapa sketsa (sketsa "Blink" yang normal akan mereproduksi ini juga).
Langkah repro di mesin saya:
- Pasang sketsa apa saja
- Mulai penganalisis logika jika Anda ingin menangkapnya
- Pergi ke Serial Monitor. Tambang saya telah dikonfigurasi untuk 57600 baud, akhir baris Newline, tetapi itu tidak masalah
- Jika Anda mau, tutup dan ulangi langkah 3
- Catatan pulsa setiap kali Anda terhubung ke port serial
Ada saran untuk mendiagnosis ini? Kedengarannya seperti level driver serial dalam beberapa cara.
arduino-due
uart
osx
Blake Ramsdell
sumber
sumber
Jawaban:
Pendek:
Melihat firmware ATMEGA16U2 ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) Saya menemukan itu, ketika Anda mengkonfigurasi / mengubah pengaturan pengaturan Port serial USB yang diemulasi, USART diatur ulang. Ini terjadi bahkan ketika Anda membuka Arduino Serial Monitor (harus mengkonfigurasi kecepatan serial, dll.). Ini menyebabkan lonjakan Anda.
Panjang:
Lihat fungsinya:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
Di sana Anda akan melihat bahwa setelah beberapa baris, itu me-reset USART, dengan memusatkan registernya:
Pada halaman 168, dari lembar data ATMEGA16U2 saat ini, Anda akan menemukan bahwa, dengan mengatur bit 3 UCSR1B (TXEN1), Anda mengaktifkan pemancar, mengesampingkan operasi port normal (yaitu menjadi output). Mengutip lembar data:
Oleh karena itu, dengan menulis
UCSR1B = 0;
Anda tidak lagi menimpa pin TXD1, yang akan bertindak sebagai input.ATMEGA16U2 TXD terhubung ke jalur RX ATSAM3X8E. Dalam operasi normal, dengan UART diaktifkan, saluran itu tetap tinggi jika tidak ada data yang dikirim. Jika Anda menonaktifkan UART, baris tertentu tidak lagi menjadi driver 1. Karena kode inisialisasi tidak mengatur pull-up pada pin tersebut (dan tidak dikonfigurasi sebagai output), pin tersebut menjadi input mengambang, dan setiap kebocoran ke GND atau bahkan impedansi input dari probe Anda (yang berada di antara pin Anda dan GND), perlahan akan membawa tingkat logika ke 0.
Untuk mengatasi masalah ini, Anda harus: 1) Memodifikasi firmware ATMEGA16U2, dengan menetapkan PIN sebagai OUTPUT, dengan nilai 1. 2) Memodifikasi firmware ATMEGA16U2, dengan mengaktifkan penarik pada pin tersebut. 3) (disarankan) Mengaktifkan pull-up pada garis RX pada ATSAM3X8E.
sumber