Arduino DUE не запускает скетч без Reset'а

Тема в разделе "Arduino & Shields", создана пользователем Sencis, 25 янв 2018.

Метки:
  1. Sencis

    Sencis Гик

    Есть Arduino DUE при загрузке скетча ничего не происходит (а именно программного сброса) пока не нажмёшь в ручную кнопку сброса после этого работает нормально. Плата на CH304G информации про них мало, возможно это из за питания вроде ей необходимо 800мА на USB 500мА, также возможно вывод сброса терминала не подключен к сбросу на плате в общем не знаю что и думать кто встречался с подобной проблемой в какую сторону нужно копать?
     
  2. Sencis

    Sencis Гик

    Проблема решена так: Это думаю актуально для китайских DUE (CH304) на них есть 2а порта программный и нативный 1й хорошо работает только для записи программ при этом после её записи она не запустится и не будет выводить данные пока её в ручную не сбросить после этого она выводит данные в0й порт Serial.Print (); т.е. стандартно. Точно также инициализируется Serial.begin (скорость в бодах); И хотя рекомендуют работать через этот порт он не подходит для программ с протоколом обмена т.к. даже после выключения и включения устройства через этот порт программа на нём не стартует без нажатия сброса.
    Порт Native наоборот стартует сразу и не ждёт монитор порта (а точнее не сбрасывается при его включении) а что-бы обмениваться через него данными нужны команды: SerialUSB.begin (); и дальше: SerialUSB.print и т.д. Ну ещё пусть вас не смущает на некоторых китайских платах Native порт индикаторы RX и TX не работают.
     
    arkadyf нравится это.
  3. DIYMan

    DIYMan Гуру

    Проблема решена чтением документации, ахах :) Всё, что изложено выше - есть на офсайте.
     
  4. Sencis

    Sencis Гик

    Да но в каждой документации по своему, почитал всего по чуть и понял))). На самом деле форумы ввели в заблуждение про брак кристалла или контакты конденсатора сброса которые не распаяны на китайских платах. Да и индикаторы действительно не светились так косвенно подтверждая это.
     
  5. Sencis

    Sencis Гик

    Ещё пара заметок про Arduino DUE в моём случае она отказывалась работать в форме (Windows Form) однако прекрасно работала с разными мониторами порта. Проведя несколько тестов выяснилось что форма написана правильно и проблемы возникает только на DUE c Native портом. Для её анализа я использовал перехватчик пакетов и событий порта. Проблема заключалась в управлении потоком:
    ComDCM.fDtrControl = DTR_CONTROL_DISABLE; - Задает режим управления обменом для сигнала
    ComDCM.fRtsControl = RTS_CONTROL_DISABLE; - Задает режим управления потоком для сигнала RTS.

    Для успешного чтения и работы событий о получении данных в порт необходимо выставить параметры:

    RTS_CONTROL_HANDSHAKE
    DTR_CONTROL_HANDSHAKE

    Что сделает управление сигналом автоматически после этого порт начал принимать данные и работать события. Для формы необходимо на вкладке конструктора выбрать порт и в его свойствах прописать:

    DtrEnable true;
    RtsEnable true;

    Более подробно о работе портов на Windows можно почитать тут.
    Также замечено отсутствие метода void SerialEvent (); для Native порта. В случае с SerialUSB портом необходимо встраивать проверку в главный цикл if (SerialUSB.available()) serialUSBEvent();
    где serialUSBEvent() - Ваше событие о приёме данных.
     
    Последнее редактирование: 29 янв 2018