UARTdagi sirli RX pulslari OS X Arduino Duega ulanadi

Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3

Men ketma-ket portga bir nechta mijozlar kutubxonalari (Python, JavaScript, shuningdek IDda ichki o'rnatilgan Serial Monitor) yordamida ulanish paytida RX tarmog'idagi sakkizta sirli impulslarni ko'raman. Mantiqiy Pro 16 bilan 1MS/s ga teng bo'lgan 78-79 soniyadan.

Mystery pulses

Ushbu sakkiz zarba, 57600 baudda sharhlanadi, Firmata dasturiy ta'minotini jamlaydi. Va ular har qanday aloqada bo'ladi.

Bu Arduino 1.6.8 IDE-ning yangi versiyasini ishlatadi va bir nechta eskizlar bilan (odatiy "Blink" eskizi bularni ham ko'paytiradi).

Mening qurilmamdagi Repro qadamlar:

  1. Har qanday sketchni o'rnating
  2. Uni qo'lga olishni istasangiz, mantiqiy analizatorni ishga tushiring
  3. Seriya monitorga o'ting. Menda 57600 bod uchun tuzilgan mening yangi liniya chizig'i tugaydi, lekin muhim emas.
  4. Agar xohlasangiz, 3-qadamni yoping va takrorlang.
  5. ketma-ket portga ulanganda har gal pulslarni esda tuting

Buni tashxislash uchun barcha takliflar bormi? Buning bir ma'noda ketma-ket haydovchilar darajasiga o'xshashligi eshitiladi.

14
Nima bo'lishidan qat'i nazar, qaerdan kelib chiqayotganingizdan qat'i nazar, siz ishlayotgan dasturiy ta'minotdagi juda muhim bugni ko'rsatib, sizga yaxshilik qilgan deb hisoblang - bu uni qutqarib bo'lmaydigan holatda qoldirib chiqmasligi kerak. Dasturning mantiqiy xatomi yoki UART kodi xato bayrog'i bilan mos kelmasa?
qo'shib qo'ydi muallif rossp, manba
Resursni kuzatish uchun boshqa serial mijoz dasturini, boshqa kompyuter/operatsion tizimni, boshqa USB-serial qurilmani va boshqalarni sinash foydali bo'ladi ...
qo'shib qo'ydi muallif rossp, manba
Linuxda bitta zarba olasiz, bu 57600 da 0xF0 deb talqin etiladi
qo'shib qo'ydi muallif Majenko, manba
Ularni ajratganda ham sizni olasiz. Aloqa bodlari tezligi pulsning uzunligiga ta'sir qilmaydi. Mening shubhali shuki, u ATMega16U2-ning dasturiy ta'minotini ishlab chiqaradi (yoki biron-bir nusxada bo'lsa ham).
qo'shib qo'ydi muallif Majenko, manba
Kirish uchun tashakkur, Chris. Firmata firmware 0xF0 ni ko'rganda START_SYSEX , u 0xF7 ko'rmaguncha baytlarni qayta ishlaydi va vaqt tugashi uchun hech qanday javob yo'q. Shunday qilib, nima sodir bo'layotgani shundaki, bu impulslar 0xF0 (bu sizning dekoderatsiyadan ko'rishim mumkin), bu esa keyingi buyruqni qayta ishlashni o'chiradi, chunki 0xF7 tugatish yo'q. Menimcha, Firmata uchun qiladigan eng yaxshi narsa, eng uzun qonuniy ma'lumot paketi uchun etarlicha uzoq vaqt oralig'idan keyin vaqtni uzaytirmoqchi.
qo'shib qo'ydi muallif user19292, manba
Boshqa ketma-ket dasturlarni sinab ko'rishga kelsak, Firmata protokoli bilan o'zaro aloqada bo'lgan va bir xil xatti-harakatga keltiradigan turli xil asosiy ketma-ket ilovalardan (Python, JavaScript va Arduino IDE Serial Monitor-da o'rnatilgan) foydalanadigan bir nechta kutubxona mavjud. Mening keyingi rejam Linux mashinasida sinab ko'rish va men X X ga xos bo'lsa, umuman izolyatsiya qiladigan bir xil xatti-harakatni ko'rishim mumkinligini ko'rishdir.
qo'shib qo'ydi muallif user19292, manba
Agar ketma-ket monitorni boshlasangiz, dasturiy ta'minotni arduino modulini tiklaydi. Agar arduino modulida bootloader bo'lsa, men bu STK500 protokoli signallari deb o'ylayman.
qo'shib qo'ydi muallif Aleksandar Ivanisevic, manba
Arduino sizning kuchingizni USB dan tortib oladimi?
qo'shib qo'ydi muallif U. Laxmeshwar, manba

1 javoblar

Qisqa:

ATMEGA16U2 firmware-ga qaraganda ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) Men shuni topdiki, USB-ni taklitlangan sozlamalarni moslash/o'zgartirish ketma-ket port, USART resetted. Bu esa, Arduino Serial Monitor-ni ochganingizda ham bo'ladi (u ketma-ketlik tezligini sozlashi kerak va hokazo). Bu sizning boshoqqa sabab bo'ladi.

Uzoq:

Funksiyaga qarang:

void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)

U erda siz ba'zi satrlardan so'ng USARTni ro'yxatdan o'tkazishni nolga solib qo'yishini ko'rasiz:

/* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */
    UCSR1B = 0;
    UCSR1A = 0;
    UCSR1C = 0;

168-betda, mavjud ATMEGA16U2 ma'lumotlar sahifasida, siz UCSR1B bit 3 (TXEN1) ni o'rnatib, transmitterni normal port operatsiyasini bekor qilishni (ya'ni chiqadiganga aylantirilishini) ta'minlayotganligini topasiz. Ma'lumot sahifasini quydagicha qo'yish:

Ushbu bitni bir-biriga yozib qo'yish USART Transmitter-ga imkon beradi. Transmitter   yoqilganda TxDn pin uchun oddiy port ishini bekor qiladi. Ushbu   Transmitterni o'chirib qo'yish (TXENnni nolga yozib qo'yish) bo'lmaydi   davom etadigan va kutilayotgan translyatsiyalar tugatilishigacha samarali bo'ladi, ya'ni,   Transmit Shift Register va Transmit Tamponlar Ro'yxati bo'lmaganda   uzatiladigan ma'lumotlarni o'z ichiga oladi. O'chirishda Transmitter yo'q   TxDn portini yana bekor qilish.

Shuning uchun, UCSR1B = 0 yozish orqali TXD1 pinini bekor qilmaysiz.

ATMEGA16U2 TXD ATSAM3X8E ning RX liniyasiga ulangan. Oddiy amaliyotda, UART yoqilgan bo'lsa, u holda hech qanday ma'lumot uzatilmasa, u chiziq yuqori bo'ladi. UARTni o'chirib qo'ysangiz, ushbu chiziq 1-gachasi haydovchi emas. Boshlash kodi bu pimdagi tortish-harakatni belgilamagani uchun (va na chiqdi deb konfiguratsiya qilinmagan), pim suzuvchi kirishga aylanadi va GND yoki sizning probangizning kirish empedansi (pin va GND orasidagi masofa) sekinlik bilan mantiqiylikni 0 ga olib keladi.

Buni bekor qilish uchun muammoni hal qilishingiz kerak: 1) PIN kodini OUTPUT sifatida 1-qiymati bilan o'rnatish orqali ATMEGA16U2 firmware-ni o'zgartiring. 2) ATMEGA16U2 razryadli dasturini o'zgartiring, bu pimdagi tortish-harakatni yoqing. 3) (tavsiya etilgan) ATSAM3X8E ustidagi RX chizig'ini torting.

1
qo'shib qo'ydi