Сброс при включении с Arduino Uno не происходит. Можно ли это исправить?

Когда Arduino Uno включена, выходной контакт DTR микросхемы USB может быть (фактически) низким в течение некоторого времени. Это означает, что конденсатор C5 подключен от вывода сброса 328p к земле. Таким образом, при подаче питания контакт сброса остается низким в течение десятков миллисекунд после подачи питания (пока C5 заряжается).

Таким образом, когда запускается 328p, причиной сброса (регистра MCU) всегда является «внешний сброс», а не «сброс при включении питания», даже при включении питания.

Это можно исправить удалением C5, или открытием перемычки "reset en", но тогда чип никогда не сбрасывается при падении DTR,...то есть загрузка отключается.

Есть ли решение, позволяющее выполнять POR и внешний сброс загрузчика? Спасибо!

, 👍5

Обсуждение

Не используйте Arduino с '328p., @Majenko

Проблема не в 328p, а в схеме сброса, связанной с DTR. Если, например, микросхема USB запитана с выводами HIGH, конденсатор не должен заряжаться при включении питания. К сожалению, похоже, что микросхема USB на Uno включается с низким или тройным состоянием на выводе DTR. Это приводит к тому, что 328p сообщает, что он получил «внешний сброс», даже при включении питания., @user69795

Я знаю, в чем проблема. И ответ заключается в использовании Arduino, который не использует этот чип. Выберите один с ATMega32U4. У него нет системы сброса DTR., @Majenko

Я подключаю 2n2222 к контакту заземления и контакту res. затем, если отправить 5 В или ВЫСОКИЙ контакт с любого контакта резистором 1 кОм, Arduino перезапустится ..., @user58927

Пользователь 58927: и таким образом можно сбросить чип командой вывода. Однако вопрос заключается в том, что сброс при включении питания Arduino рассматривается чипом как «внешний сброс», а не как «сброс при включении питания»., @user69795


2 ответа


2

См. схему «DTR-сброс» Arduino Uno ниже.

После включения питания, когда DTR имеет низкий уровень (поскольку поступает скетч), задний фронт вызывает отрицательный импульс на внешнем выводе сброса 328P длительностью ок. 3 мс (см. здесь). Ширина этого импульса сброса не зависит от времени, в течение которого DTR остается низким.

Во время включения питания на выводе сброса 328P низкий уровень, пока конденсатор C5 не будет достаточно заряжен. Сколько времени это займет, зависит главным образом от поведения Vcc при запуске. Когда DTR низкий, конденсатор заряжается быстрее, потому что RN2D (от конденсатора C5 до земли) зашунтирован.

Но главное, что сброс при включении питания и внешний сброс имеют одинаковый эффект (см. техпаспорт): когда повышение напряжения проходит определенный порог, запускается таймер, и по истечении его времени выполнение программы начинается с 0x0000 или по адресу сброса загрузки (в зависимости от настройки фьюзов). Таким образом, при включении питания нет смысла различать сброс при включении питания и внешний сброс.

Схема сброса DTR Arduino Uno

,

Спасибо за ваш ответ. Однако есть причина различать сброс при включении питания и внешний сброс. Загрузчик Optiboot для Arduino сразу запустит пользователя на POR. При внешнем сбросе он будет ждать и искать данные загрузки через последовательный порт. Таким образом, с текущим аппаратным обеспечением Arduino UNO эту функцию «мгновенного запуска» в загрузчике использовать нельзя., @user69795


2

Я ответил на свой вопрос.
Я добавил подтягивающий резистор на линию DTR к VCC. Теперь конденсатор C5 не нужно заряжать при включении питания: обе стороны конденсатора начинаются с напряжения VCC. Таким образом, 328p распознает включение питания как «сброс при включении», а не как «внешний сброс», и мой скетч запускается примерно через 75 миллисекунд после включения. В принципе, моя схема похожа на схему PimV, но с резистором RN2D на VCC, а не на землю. По крайней мере, для Uno это исправление работает. Я подозреваю, что это связано с тем, что микросхема USB (mega16u) находится в состоянии сброса, а его контакты находятся в тройном состоянии некоторое время после включения питания.

,

Выпадающее меню RN2D находится в [официальной схеме Arduino Uno Rev. 3](https://content.arduino.cc/assets/UNO-TH_Rev3e_sch.pdf)., @Edgar Bonet

Спасибо. Я не смотрел на Rev 3. Неудивительно, что этот узел остается низким при включении питания., @user69795