UART жүйесіндегі құпиялы RX импульстары OS X Arduino Due арқылы қосылады

Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3

Мен бірнеше клиенттік кітапхананы (Python, JavaScript, сондай-ақ IDE ішіне орнатылған Serial Monitor) пайдаланып, сериялық портқа қосылсам, RX желісінде сегіз жұмбақ импульстарды көремін. Logic Pro 16 көмегімен 1МС/с-те таңдалған 78-79 дейін шамамен.

Mystery pulses

Бұл сегіз серпіліс 57600 ботта интерпретацияланған кезде Firmata микробағдарламасын жинайды. Және олар әр байланыста болады.

Бұл Arduino 1.6.8 IDE-дің жаңа қондырғысын пайдаланып, бірнеше эскиздермен (әдеттегі «Blink» эскизі де бұл ойнатады).

Менің машинамдағы репро-қадамдар:

  1. Кез-келген эскизді орнатыңыз
  2. Логикалық талдағышты оны ұстағыңыз келсе, іске қосыңыз
  3. Сериялық мониторға өтіңіз. Менде 57600 боге теңшелген, Newline желісі аяқталды, бірақ маңызды емес
  4. Қажет болса, 3-қадамды жабыңыз және қайталаңыз
  5. Сериялық портқа әр қосылған кезде импульстарды ескеріңіз

Бұл диагноз қою туралы қандай да бір ұсыныстар бар ма? Айтпақшы, бұл қандай да бір жолмен жүргізушінің деңгейіне байланысты.

14
Қайдан келмейтініне қарамастан, істеп жатқан микробағдарламада сыни қателерді көрсетіп, сізге жақсылық жасады деп ойлаңыз - бұл оны қалпына келтірмейтін күйге қоюға болмайды. Бағдарламалық логикалық қате немесе UART өңдеу коды қате жалауымен сәйкес келмей ме?
қосылды автор rossp, көзі
Дереккөзді бақылау тұрғысынан басқа сериялық клиенттік бағдарламаны, басқа компьютерді/операциялық жүйені, басқа USB-сериялық құрылғысын және т.б. көріңіз.
қосылды автор rossp, көзі
Linux-ге бір рет импульс аласыз, ол 57600-де 0xF0 ретінде түсіндіріледі
қосылды автор Majenko, көзі
Сіз ажыратқанда біреуін де аласыз. Байланыстыру жылдамдығы пульстің ұзақтығына әсер етпейді. Менің күмәнім - ол ATMega16U2-дің микробағдарламасы, ол оны жасайды (немесе қандай да бір нұсқада қандай болса да чипті).
қосылды автор Majenko, көзі
Кіріс үшін рақмет, Крис. Firmata микробағдарламасы 0xF0 START_SYSEX көрген кезде , ол байтты 0xF7 көрмейінше өңдейді, және уақытты тоқтату үшін ешқандай ереже жоқ. Мәселен, менің ойымша, бұл импульстар 0xF0 (бұл менің декодтаудан көре аласыз), ол қосымша командалық өңдеуді тоқтатады, өйткені 0xF7 аяқталмайды. Менің ойымша, Firmata үшін жасай алатын ең жақсы нәрсе, ең ұзын заңды деректер пакетіне жеткілікті ұзақ уақыт аралығынан кейін уақытты өшіруге арналған.
қосылды автор user19292, көзі
Басқа сериялық бағдарламаларды қолдануға келетін болсақ, Firmata хаттамасымен өзара әрекеттесетін және негізгі мінез-құлыққа ие әртүрлі базалық сериялық іске асыруларды (Python, JavaScript және Arduino IDE Serial Monitor) қолданатын бірнеше кітапханалар бар. Менің келесі жоспарым - бұл Linux машинасында көріңіз және сол X X-спецификасы болған жағдайда оқшаулануға болатын бірдей мінез-құлықты көре ме ба?
қосылды автор user19292, көзі
Сериялық мониторды бастағанда, бағдарламалық құрал ардуино модулін қайта орнатады. Егер Arduino модулінде жүктеуші бар болса, онда бұл STK500 протоколының сигналдары деп ойлаймын.
қосылды автор Aleksandar Ivanisevic, көзі
Arduino сіздің USB-ден қуат алып жатыр ма?
қосылды автор U. Laxmeshwar, көзі

1 жауаптар

Қысқа:

ATMEGA16U2 микробағдарламалық жасақтамасына қарап ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) Менің ойымша, USB эмуляциясындағы параметрлерді конфигурациялау/өзгерту кезінде сериялық порт, USART қалпына келтіріледі. Бұл тіпті Arduino Serial Monitor-ді ашқан кезде де болады (ол сериялық жылдамдығын конфигурациялауы керек және т.б.). Бұл сіздің шашырауыңызды тудырады.

Ұзындығы:

Функцияны қараңыз:

void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)

Кейбір сызықтардан кейін USART-ті қалпына келтіріп, тізілімін нөлдеу арқылы көресіз:

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

168-беттегі ағымдық ATMEGA16U2 деректер кестесінен UCSR1B бит 3 (TXEN1) параметрін орнату арқылы, сіз таратқышты қосып, қалыпты порт әрекетін (яғни ол шығысқа айналады) анықтайсыз. Деректер кестесін келтіру:

Бұл битаны біреуге жазу USART таратқышты қосады. Таратқыш   қосқан кезде TxDn пин үшін қалыпты порт әрекетін алдын ала анықтайды. The   Таратқышты өшіру (TXENn-ні жазу нөлге дейін) болмайды   ағымдағы және күтілмеген беру аяқталғанша, яғни,   Transmit Shift Register және Transmit Buffer Register тіркелмеген кезде   берілетін деректер болуы керек. Өшірілгенде, таратқыш жоқ болады   TxDn порты ұзақ уақытқа ауытқу.

Сондықтан, UCSR1B = 0 жаза отырып, сіз кіріс ретінде әрекет ететін TXD1 штырмасын елемейсіз.

ATMEGA16U2 TXD ATSAM3X8E RX желісіне қосылған. Қалыпты жұмыс кезінде, UART қосулы болғанда, деректер тасымалданбаған жағдайда бұл жол жоғары болады. Егер сіз UART-ды өшірсеңіз, бұл нақты жол 1-ге дейін драйвер болмайды. Инициалдау коды осы штыруға (және шығу ретінде теңшелген) орнатылмағандықтан, қалам өзгермелі кіріс болып, GND немесе сіздің зондыңыздың кіріс кедергісі (сіздің түйісіңіз және GND арасындағы), логикалық деңгейді біртіндеп 0 деңгейіне жеткізеді.

Мұны болдырмау үшін, сіз: 1) PIN кодын OUTPUT ретінде 1 мәнімен орнату арқылы ATMEGA16U2 микробағдарламасын өзгертіңіз. 2) ATMEGA16U2 микробағдарламалық жасақтамасын өзгертіңіз, сол түйреуішті көтеріңіз. 3) (ұсынылған) ATSAM3X8E құрылғысындағы RX желісінің тартылуын қосыңыз.

1
қосылды