Не работает reset arduino

Arduino.ru

Не грузиться скетч в ардуино и не работает кнопка reset

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Не грузиться скетч в ардуино и не работает кнопка reset

но при загрузке раза 3-4 светодиод rx игнул а поже выдал вот такую ошибку

avrdude: stk500_getsync(): not in sync: resp=0x00

я пробывал переустановить дрова менял usb и менял ide компиляторы

прошу о помощи у меня в разгаре проекта такое случилось и я незнаю что делать а заказывать новый с постой россии будет идти недели 3

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

я все же не понял как решить проблему если я не ошибаюсь то мне нужно замениь атмегу

и потом ее прошить

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Есть несколько вариантов неисправности, но скорее всего подлежит замене микроконтроллер. Подробно можно почитать здесь http://radio-blogs.ru/blog/arduino/pitanie-dlya-arduino-vostanavlivaem-a. .

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

я все же не понял как решить проблему если я не ошибаюсь то мне нужно замениь атмегу

и потом ее прошить

это примерно как сначала отрубить голову, а потом вылечить мигрень 🙂

Вы в состоянии прочитать хотя бы пару ссылок, что вам дали? на 90% подобная проблема обусловлена траблами с компортом — либо драйвер слетел, либо питания не хватает, либо контакт(кабель) плохой. Изучайте ссылки внимательнее, там сказано, как проверить разные варианты

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

не пишите ерунды, да и ссылка никаким боком к обсуждаемому вопросу

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

я все же не понял как решить проблему если я не ошибаюсь то мне нужно замениь атмегу

и потом ее прошить

это примерно как сначала отрубить голову, а потом вылечить мигрень 🙂

Вы в состоянии прочитать хотя бы пару ссылок, что вам дали? на 90% подобная проблема обусловлена траблами с компортом — либо драйвер слетел, либо питания не хватает, либо контакт(кабель) плохой. Изучайте ссылки внимательнее, там сказано, как проверить разные варианты

Источник

Arduino.ru

Не работает кнопка reset

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Доброго всем времени суток. Имеется в наличии аппартная платформа Arduino MEGA-2560(R3). В принципе плата рабочая, но почему то при нажатии кнопки reset ничего не происходит. В чём может быть проблема?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Тестером подключитесь к выводам Reset и GND и проверьте: происходит ли скачок напряжения при нажатии кнопки.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Подключился. При нажатии кнопки reset скачка напряжения не наблюдаю. 4.88 — вольта. Что это значит?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Проверьте тестером замыкает ли контакты кнопка, если да ищите обрыв дорожки или конденсатор мертвый

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Кнопка контакты не замыкает. Проверял на этой и на рабочей плате. На этой в режиме прозвонки между контактами RESET и GND тестер показывает число 1906, а при нажатии кнопки RESET ничего не изменяется. На рабочей тестер показывает единицу, а при нажатии кнопки идёт гудок. Что это значит? Битые контакты?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Если вместо кнопки — ее контакты замкнуть отверткой например — плата уходит в ресет?

Если да — не рабочая кнопка

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Замкнул контакты проводом и ресет сработал. Попробую пропаять кнопку.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Столкнулся с такой же проблемой на китайской Меге 2560 Pro. Ткнул пинцетом в контакты — reset прошёл. Уже нашёл подобную, но немного «неудобную сюда» кнопку от мыши и начал перепаивать, но в процессе отпайки кнопка разобралась и выяснилось, что контактная мембрана просто окислилась внутри, вероятно при пайке. На фото мембрана уже почищена, но если присмотреться правый нижний угол темнее. В общем: достаточно, предварительно сковырнув с наружного зацепа металический корпус, отпаять только его (средний контакт, там где их три) и кнопка с мембраной вылетят в неизвестном направлении — осторожно, не потеряйте!. Далее зачищаем мембрану и ставим всё обратно. Если кто в бронепоезде — мембрану ставим выпуклостью наружу.

Оказалось делов на пять минут и не надо заморачиваться с поиском кнопки.

Источник

Arduino.ru

Не работает сброс Arduino Pro Mini во время прошивки

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Всем доброго времени суток!

Читайте также:  Лада приора не работает отопитель салона

Столкнулся с проблемой: не прошивается Arduino Pro Mini (ATmega328P, 5V, 16MHz). Использую UART переходник на чипе cp2104, где предусмотрен вывод DTR. Подключаю так: DTR -> DTR, 5V -> VCC, TXD -> RXI, RXD -> TXO, GND -> GND. Во время прошивки на ножке DTR переходника сигнал падает с 5V до очень низкого, однако сброс ардуинки это не вызывает. Если DTR с переходника напрямую воткнуть в RST — то плата во время прошивки просто отключается (т.к. на DTR логический 0). Попадать в нужный момент нажатием reset в ручную сложно, однако если попасть, всё прекрасно прошивается. В чём может быть проблема — ума не приложу. На ардуинке ножка DTR через конденсатор подключена выводом к RST пину. Настройки Arduino IDE: Плата «Arduino Pro or Pro Mini», Процессор «ATmega328p (5V, 16MHz)», Программатор «AVRISP mkII». Буду рад любым идеям =)

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

На ардуинке ножка DTR через конденсатор подключена выводом к RST пину

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Во время прошивки на ножке DTR переходника сигнал падает с 5V до очень низкого, однако сброс ардуинки это не вызывает.

А если замерять после конденсатора, например на ножке RST? Возможно на плате где-то непропай.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Это не я подключил, он там с магазина уже впаян (маленький smd конденсатор).

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А если замерять после конденсатора, например на ножке RST? Возможно на плате где-то непропай.

Стабильно 5V (от RST к земле). По идее конденсатор должен на мгновение дать 0, что бы ардуинка сбросилась. Скорее всего этот интервал нельзя засечь на вольтметре, а осциллографа у меня нет.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Спасибо за совет, гляну.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Конечно, это жесткий костыль, но при наличии второй ардуинки можно обойтись подобным скетчем в ней

А пин А0 подключить к пину RST изучаемой платы. И данные вывести на плоттер. Если будет бросок к низкому уровню, его можно будет увидеть. Если не проморгать ))

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Как выяснилось, я вчера затупил, пока описывал проблему. Уровень DTR ножки на переходнике держится в районе 3.44V, при прошивке падает почти в 0. Я решил проверить: взял ногу DTR у ардуинки и сунул в 5V, ничего не происходило, и затем резко ткнул в землю — и да, ардуинка перезагрузилась. Она отлично перезагружается, если на её DTR ножке менять напряжение с 5V на 0 (и наоборот). Проделал то же самое, только вместо 5V взял провод на 3.3V (напряжение как у DTR на переходнике) — ничего не происходит. Почему ардуинка не перезагружается от скачка с 3.44V в 0 — не знаю. Что делать?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Конечно, это жесткий костыль, но при наличии второй ардуинки можно обойтись подобным скетчем в ней

А пин А0 подключить к пину RST изучаемой платы. И данные вывести на плоттер. Если будет бросок к низкому уровню, его можно будет увидеть. Если не проморгать ))

Спасибо за ответ, однако, скорее всего скачек происходит, не хватает только напряжения.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Как вариант — как следует осмотрите переходник, может быть там где-то сопля на пайке висит

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Переключить переходник на 5В. Обычно там есть либо место для впайки перемычки, либо отверстия, куда можно впаять ножки для джампера. А у некоторых на выходе есть 3.3, 5 и Vcc, так там надо Vcc соединить с чем нужно. Вы же не показали нам что у Вас за переходник, так что конкретнее — сами разбирайтесь.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Переключить переходник на 5В. Обычно там есть либо место для впайки перемычки, либо отверстия, куда можно впаять ножки для джампера. А у некоторых на выходе есть 3.3, 5 и Vcc, так там надо Vcc соединить с чем нужно. Вы же не показали нам что у Вас за переходник, так что конкретнее — сами разбирайтесь.

Джамперов не видно. Отверстий для пайки много, однако это скорее всего не то, что нужно. Переходник у меня CP2104. У людей сразу «из коробки» всё работает.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Нет, с таким я не работал 🙁

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

В любом случае, спасибо за помощь =)

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Переходник у меня CP2104.

Фото действительно вашего переходника или нечто похожее? Потому что то что вы написали в #1

как то не очень стыкуется с картинкой. На плате видно что сигнал DTR приходит на гребенку через конденсатор. Плюс на самой ардуинке кондер распаян .

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Читайте также:  Battletoads не работает контроллер

Действительно, на мой не похож. Вот мой + ардуинка.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

а фото ардуинки с другой стороны можно? Что-то есть большие сомнения в надежности пайки проводов на ардуине.

Зачем вообще вы припаиваете провода прямо к плате? Почему не впаять штатные гребенки, чтобы подключатся к переходнику проводами с наконечниками из комплекта??

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Что-то есть большие сомнения в надежности пайки проводов на ардуине.

Вот зачем вы так со мной?) Припаял очень хорошо, зубами не вырвать, хотя на фото сильно не видно.

Зачем вообще вы припаиваете провода прямо к плате? Почему не впаять штатные гребенки, чтобы подключатся к переходнику проводами с наконечниками из комплекта??

Потому что я их потом не выпаяю. К тому же мне не нужны вообще боковые пины, только A4, A5 и питание. В готовом устройстве гребенки будут мешать. Провода у меня припаяны отдельные, и соединяются они со штатными проводами от переходника за кадром.

Проблема в том, что для сброса ардуины нужно 5V, а у меня из DTR идёт 3.44V. Провёл так же опыт, в котором сам подключил к RST на ардуине кондер в 0.1мкФ. Эффект тот же: от 5-ти вольт сбрасывается, от 3.44 — нет. Так же 3 штуки воткнул параллельно по 0.1мкФ — не помогло. Может как-то можно понизить напряжение сброса ардуинки? Или единственный выход — коммутировать с помощью 3.44V сигнал 5V на DTR с помощью какого-нибудь транзистора? Или в чём может быть проблема, если оно у всех работает, а у меня нет? Буду рад любым идеям)

Источник

Arduino watchdog или автоматический RESET в случае зависания


Речь пойдет о том, как держать Arduino всегда в работоспособном состоянии. Механизм watchdog встроен в контроллеры Atmega, но, к сожалению, не всякий загрузчик (bootloader) Arduino правильно обрабатывает эту функцию. Попробуем разобраться с этой проблемой.

Итак, что такое watchdog? Простыми словами — это встроенный таймер на определенное время (до 8 сек в зависимости от чипа), который можно запустить программно. Как только таймер «дотикает» до нуля, контроллер подает правильный сигнал сброса (RESET) и всё устройство уходит в hard перезагрузку. Самое главное, что этот таймер можно сбрасывать в начальное состояние также программным способом.

  • Правильный сигнал сброса — достаточный по длительности для того, чтобы контроллер начал перегружаться. Иногда есть соблазн подключить к RST входу какой-либо цифровой выход Arduino и устанавливать его в 0 когда надо перегрузиться. Это плохой подход к решению проблемы, т.к. такого сигнала может быть недостаточно по времени, хотя и не исключено, что в некоторых случаях это тоже будет работать..
  • hard перезагрузка это самая настоящая перезагрузка, которая происходит при нажатии на кнопку RESET. Дело в том, что есть еще понятие soft перезагрузки — это программный переход на 0-вой адрес. В принципе, это тоже полезная вещь, но с помощью нее невозможно перегрузить зависший контроллер Ethernet или взглюкнувший LCD.

Короче говоря, встроенный watchdog это как раз то, что нужно и без дополнительных схем, пайки и соединений.

Функции Watchdog

Чтобы использовать функции Watchdog нужно подключить к проекту стандартную библиотеку:

Теперь нам доступны следующие три функции:

1. Запуск таймера watchdog:

Таймер будет считать ровно столько, сколько указано в константе. По истечении этого времени произойдет перезагрузка.

2. Сброс таймера watchdog:

Думаю, понятно для чего нужна эта функция — пока вы вызываете ее, контроллер не сбросится. Как только система зависнет и эта функция вызываться перестанет, то по истечении заданного периода произойдет перезагрузка.

3. Отключение watchdog:

Отключение таймера watchdog.

Собственно, на этом можно было бы и закончить наше повествование о watchdog… но дело в том, что все это работает только в Arduino Uno, а на Arduino Mega, Mini и Nano все это работает ровно наоборот, т.е. не работает совсем 🙂

Почему watchdog не работает на большинстве современных плат Arduino

Дело в том, что после перезагрузки, которая была вызвана watchdog, контроллеры последних выпусков оставляют включенным watchdog на минимальный период, т.е. 15ms. Это нужно для того, чтобы программа как-то узнавала, что предыдущая перезагрузка была по watchdog. Поэтому первоочередная задача загрузчика (или вашей программы, если она запускается первой) — сохранить информацию о том, что перезагрузка была «неожиданной» и сразу же выключить watchdog. Если этого не сделать, то система уйдет в bootloop, т.е. будет вечно перегружаться.

Как известно, в Arduino есть специальный загрузчик, который выполняется в первую очередь после перезагрузки системы. И, к огромному сожалению, стандартный загрузчик не сбрасывает watchdog! Таким образом, система заходит в жестокий bootloop (состояние «crazy led», при котором светодиод на 13-м пине мигает как сумасшедший).

Пути решения проблемы

Если посмотреть на исходники стандартного загрузчика (они есть в поставке платформы), то код отключения watchdog есть (!), но этот код вынесен под условную компиляцию и, по всей видимости, стандартный загрузчик скомпилирован без поддержки watchdog. По крайней мере в пакете платформы версии 1.5.2 (последней на момент написание статьи) дело обстоит именно так.

Читайте также:  Не работает прицепное устройство

Для решения проблемы я даже прочитал man-ы самой платформы (:) и вроде бы там описана эта проблема и даже приведен код, который должен сделать всех счастливыми:

Здесь описывается функция get_mcusr(), которая должна вызываться сразу после сброса. Это достигается макросом «__attribute__((section(«.init3″)))». Я пробовал прописывать эту функцию во все секции, которые только возможно — да, она действительно запускается до функции setup() из скетча, но, к сожалению, гораздо позже 15ms (минимальная константа watchdog) после сброса…

Короче говоря, как я ни рыл интернет в поисках легкого решения проблемы, так ничего найдено не было. Я нашел только один способ заставить watchdog работать — перепрошить загрузчик… чем мы сейчас и займемся.

Проверка работоспособности watchdog

Прежде чем что-то прошивать, нужно проверить — вдруг ваша Arduino поддерживает watchdog. Для этого я написал небольшой скетч для теста. Просто залейте его, откройте монитор порта и смотрите, что будет происходить.

После перезагрузки (или подключения монитора к порту) встроенный светодиод мигнет, сигнализируя о том, что запустился загрузчик. Далее в секции setup происходит включение watchdog с таймером на 8 сек. После этого светодиод отсчитает нам это время и должна произойти перезагрузка.

Далее начинается самое интересное — если перезагрузка произошла и все повторяется в такой же последовательности, то вы имеете на руках Arduino, в которой загрузчик правильно обрабатывает watchdog. Если же после перезагрузки светодиод на 13-м пине начинает бесконечно мигать, то значит загрузчик не поддерживает watchdog. Здесь даже кнопка сброса не поможет. Для последующей прошивки нужно плату отключать от питания и после включения успеть прошить до первой перезагрузки.

Я протестировал 4 вида плат и только загрузчик в Arduino Uno сработал так как надо:

Watchdog не поддерживается загрузчиком:
Watchdog поддерживается загрузчиком:

Как легче всего прошить новый загрузчик?

Прошивать загрузчик в Arduino можно с помощью отдельных программаторов, а можно собрать свой программатор с помощью той же самой Arduino. Т.е. любую плату Arduino можно превратить в программатор, залив туда специальный скетч.

Я не буду в этой статье описывать все премудрости создания программатора на основе Arduino, т.к. эта тема довольно подробно описана в интернете. В качестве программатора я использовал Arduino Uno. Как известно, прошивка производится через отдельный разъем ICSP, который есть почти на всех платах. В случае прошивки Arduino Pro Mini, у которого нет IСSP, подключение производится непосредственно к выводам.


Где взять загрузчик, который поддерживает watchdog?

Эта глава напоминает танцы с бубном и скорее всего можно сделать все как-то проще, но, увы, у меня по-другому не получилось.

Рекомендуется использовать загрузчики из пакета optiboot. В принципе, эти загрузчики идут в инсталляции самой платформы Arduino, но лучше скачать и установить последнюю версию optiboot отсюда. Установка заключается в двух шагах (возможно, это можно сделать как-то по-другому):

  1. Папка bootloaders\optiboot перезаписывается в C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\optiboot
  2. Файл boards.txt дописывается к файлу C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt

Естественно, папка установки платформы Arduino у вас может быть другой.

Далее перегружается среда разработки и в меню Сервис/Плата можно наблюдать новые платы с пометкой [optiboot]. К сожалению, при выборе этих плат происходят какие-то непонятные ошибки компиляции и появляются всякие другие странности… поэтому делаем еще проще. Открываем в любом текстовом редакторе файл C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt и меняем следующие строчки:

Для Arduino Nano:
menu.cpu.nano.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Для Arduino Mini:
menu.cpu.mini.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Следующая проблема в том, что загрузчика optiboot для платы Arduino Mega не существует в природе, т.к. в Mega больше памяти и используется другой протокол. Поэтому мы используем стандартный, но модифицированный загрузчик, который качаем отсюда. Файл переименовываем в stk500boot_v2_mega2560_2.hex и записываем в папку C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\stk500v2.

Далее меняем в уже знакомом файле boards.txt следующую строчку:
mega2560.bootloader.file=stk500v2/stk500boot_v2_mega2560_2.hex

Не пугайтесь, что файл модифицированной прошивки для Mega в 2 раза меньше стандартного — так вроде бы должно быть.

Процесс прошивки

После всех изменений можно прошивать загрузчики, выбирая в меню плат обычные платы (не [optiboot]!). В этом случае прошиваться будут именно те файлы hex, которые мы указали в файле board.txt.
Процесс прошивки может не стартовать и выдаваться ошибка:

Для решения этой проблемы откройте скетч программатора и в секции setup выберите другую скорость последовательного порта.
Во время заливки в Arduino Mega может появляться ошибка, которую следует игнорировать:

Заключительные манипуляции

Загрузчики optiboot имеют еще одну особенность — они увеличивают скорость загрузки скетчей, поэтому при использовании плат с optiboot нужно внести соответствующие изменения в boards.txt:

Для Arduino Nano:
menu.cpu.nano.atmega328.upload.speed=115200
Для Arduino Mini:
menu.cpu.mini.atmega328.upload.speed=115200

Предыдущую скорость порта лучше тоже запомнить, т.к. ее нужно будет использовать на платах со стандартными загрузчиками. Если такие изменения не сделать, то процессе заливки скетчей будет выдаваться ошибка, типа такой:

Источник

Оцените статью