Настраиваемая плата Arduino подает звуковой сигнал, и процесс зависает, пока я загружаю в нее эскиз. Почему?

8

Самое странное происходит с автономной платой Arduino, которую я спроектировал и изготовил. Плата (схемы которой приведены ниже) имеет следующие особенности:

  1. Он оснащен ATmega328P с регулятором напряжения 5 В и обычной схемой, когда он настроен как автономный контроллер.
  2. Он управляет табло с несколькими цифрами на 7 дисплеях, соединенными через разъемы справа (от JP1 до JP12).
  3. Он имеет кнопки курсора, декодированные с использованием лестницы напряжения через ANALOG_0 (A0).
  4. У этого есть Часы Реального времени, чтобы держать время, когда это выключено.
  5. Имеет модуль радиоприемника.
  6. Он имеет заголовок UART (JP17), поэтому я могу программировать плату, используя последовательный порт.
  7. Динамик подключен к цифровому контакту 3 (D3).

Схема контроллера

Я загружаю наброски на него, используя адаптер RS232-TTL, который я также построил (схемы также ниже) и кабель Serial-to-USB. При программировании плата ведет себя как плата Северино .

введите описание изображения здесь

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

avrdude: версия 5.11, составлена ​​2 сентября 2011 года в 19:38:36. Copyright (c) 2000-2005 Брайан Дин, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch

     System wide configuration file is "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf"

     Using Port                    : \\.\COM1
     Using Programmer              : arduino
     Overriding Baud Rate          : 115200

Когда я нажимаю кнопку сброса на плате, avrdude продолжает выводить свои сообщения (например, ниже), звуковой сигнал прекращается, загрузка продолжается, и эскиз успешно загружается на доску.

avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
... messages and upload continue and completes successfully.

У меня здесь нет других сообщений, но я надеюсь, что вы поняли идею.

Итак, мои вопросы:

  1. Что делает процесс загрузки паузой?
  2. Почему зуммер подает звуковой сигнал, когда процесс приостанавливается?
Рикардо
источник
1
В настройках IDE включите Verbose для загрузки. Этот журнал должен предоставить некоторое понимание или больше подсказок.
mpflaga
1
Глупый вопрос: Вы запрограммировали ATmega328p с помощью загрузчика?
Коннор Вольф
1
"отлично работает в ООН" - это полезная информация. Так что на вашей доске должна быть розетка. Если так - Вы можете определить источник более конкретно с помощью быстрого эксперимента. Для каждого из выводов ввода-вывода согните вывод, чтобы не соприкасаться. Плавающие! Как вы вставите IC в вашу розетку. В конце концов, со всеми плавающими контактами ваша схема будет исключена. А так как какая-то точка между задержкой / гудком должна прекратиться. И доложить.
mpflaga
1
@jfpoilpret Если динамик фактически является зуммером (пьезо), то индукция отсутствует, следовательно, диод не требуется. Забудь мой оригинальный комментарий.
jfpoilpret
1
Один мой друг, который много занимался электроникой в ​​молодости, однажды сказал мне: «Если это не сработает, как вы ожидаете, добавьте разделительный конденсатор». Во многих случаях я следовал этому совету с большим успехом! В вашей схеме, однако, мне неясно, где вы могли бы добавить развязывающую способность. Вы пробовали // с зуммером? Вы также можете попробовать 2 (один для низких частот, один для высоких частот): один электролитический по крайней мере 1 мкФ, один керамический 100 нФ. В худшем случае это не будет иметь никакого эффекта :-)
jfpoilpret

Ответы:

3

Что делает процесс загрузки паузой?

Ну, учитывая все комментарии, сделанные по вашему вопросу, это определенно сложно. Возможно, вы захотите попробовать добавить разделительный конденсатор, как предложено @jfpoilpret, хотя ваши схемы выглядят хорошо для меня… (возможно, попросите пересмотреть его на EE SE ).

Я бы также посоветовал вам скопировать avrdudeкоманду из вывода Arduino IDE (вы найдете ее вверху) и запустить ее в командной оболочке с более низким битрейтом:

avrdude -v -v -v -v -C "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf" -P COM1 -patmega328 -U… -B3 -b115200

Чем выше -Bзначение, тем ниже ваш битрейт. и -bк правильной скорости передачи данных для вашего загрузчика (вы уверены, что это 115200? чаще встречается 57600).

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

avrdude -U lfuse:r:-:i -U hfuse:r:-:i -U efuse:r:-:i

который выведет значения предохранителей. Затем, чтобы сделать значения читабельными, поместите значения в нижней части формы на сайте калькулятора предохранителей , выбрав Atmega328PMCU из выпадающего списка.

Дважды проверьте, что:

  • у вас достаточно размера для загрузчика (обычно, чем больше вы даете, тем лучше);
  • вы правильно настроили конфигурацию кристаллов для вашего дизайна (которая может быть несовместима с настройками Uno по умолчанию, установленными в Arduino IDE), проверяя, правильно ли вы настроили внешний кристалл на 16 МГц ...

Почему зуммер подает звуковой сигнал, когда процесс приостанавливается?

Это происходит потому, что когда процессор не имеет настроенного выхода, значения в регистрах находятся в неопределенном и непредсказуемом состоянии. Это означает, что обычно он сохраняет последнее значение, которое он имел перед сбросом, или изменил состояние из-за некоторой электростатической странности, или дает какой-то странный выход ШИМ из-за влияния тактовых импульсов поблизости.

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

К сожалению, у меня нет прямого ответа для вас, но в лучшем случае вы должны исследовать несколько путей. НТН

ZMO
источник
+1 Спасибо за подсказки! Очень полезный. Я попробую их все и сообщу через пару дней.
Рикардо
Просто хотел сообщить, что я исправил проблему. Смотрите мой ответ на этот вопрос. Спасибо, в любом случае!
Рикардо
3

Я наконец нашел причину проблемы: сигнал сброса с контакта 4 (DTR - Data Terminal Ready) на разъеме DB9-Female подскочил до 10 В, а затем перешел на 0 В и запускал программирование высокого напряжения на ATmega. Ниже приведен прицел, показывающий ситуацию:

Снимок прицела, показывающий скачок напряжения до 10 В

Желтая кривая - это DTRсигнал, а зеленая - это RESETсигнал на ATmega.

В соответствии с примечанием к приложению Atmel AVR042: Замечания по проектированию аппаратного обеспечения AVR следует добавить диод ESD между ATmega RESETи Vccне дать сигналу сброса вызвать режим программирования высокого напряжения, например:

Рекомендованный контактный разъем RESET для ATmegas

После добавления такого маленького сигнального диода (1N4148), как рекомендовано в приложении, я решил проблему. См. Ниже снимок, сделанный после добавления диода.

Прицел снят после фиксации платы

Теперь пик 10В исчез.

Это было сложно !! Но я никогда не мог найти то, что было неправильно без исследований и правильных инструментов. Деньги на сферу - это хорошо потраченные деньги!

Рикардо
источник
1
Это происходит потому, что в вашей строке сброса нет транслятора уровня, примененного к строке последовательных данных. Большинство используют переводчик уровня ic и запускают сброс через канал этого.
Крис Страттон
@Chris - Да, я помню, как ты говорил мне использовать второй конвертер MAX232, чтобы это исправить. Я еще раз посмотрю и посмотрю, смогу ли я исправить этот дизайн. Спасибо!!
Рикардо
1

Я не уверен, но проблема также может быть связана с функцией автоматического сброса платы преобразователя.

Я скопировал дизайн платы преобразователя из Arduino Severino, и в соответствии с его руководством для работы функции автосброса должна быть установлена ​​скорость последовательной связи 19 200 бит / с.

Убедитесь, что скорость COM-порта компьютера установлена ​​на 19200 бит / с, иначе автоматический сброс не будет работать должным образом.

Ну, я использую 115 200, так что это должно быть проблемой.

Рикардо
источник