Штырь сброса Atmega328 не работает после повторной записи загрузчика Arduino?

Для небольшого фона вы можете прочитать

ATmega328 с Optiboot не совместим с Arduino?

Но все же подытожу. У меня есть несколько чипов Atmega328, которые поставлялись с загрузчиком optiboot, записанным на них, которые оказались поврежденными. Чтобы заставить чипы работать, я купил и использовал USBASP и повторно записал загрузчик. Процесс работает нормально, и чипы перезагружаются и запускают мигающий скетч без проблем, но когда я вытягиваю контакт сброса на землю, чип не перезагружается и не запускает загрузчик Arduino. Пока контакт сброса удерживается на земле, скетч перестанет работать, а когда его отпустят, мигающий скетч запустится без задержки.

Если подключить контакт сброса к DTR моего USB-TTL, скетч перестанет работать при попытке загрузить скетч через Arduino IDE, а затем завершит загрузку с ошибкой отсутствия подключения. Используя USBASP, я могу перезаписать загрузчик, и он, похоже, правильно сбрасывается.

Сброс работал перед перезаписью загрузчика. Схемы сброса, которые я использую, работают на чипах atmega168, которые у меня есть.

Для загрузчиков я пробовал прошивать чип, чтобы использовать внутренние часы http://arduino.cc/en/Tutorial/ArduinoToBreadboard , а также lilypad и duemilanove, но контакт сброса по-прежнему не работает правильно.

Я также использовал программное обеспечение, поставляемое с USPASP, и прочитал биты Fuse & Lock, а предохранители High / Low выглядят нормально, не уверен насчет расширенных битов и битов блокировки.

Чип читает; Низкий = E2, высокий = DA, внешний = FD, замок = CF

board.txt читает;

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader. lock_bits = 0x0F

Ответы (2)

На AVR есть предохранитель, называемый RSTDISBL, который отключает функциональность вывода сброса и позволяет использовать его как обычный ввод-вывод. Если вы запрограммируете этот предохранитель, то сбросы, очевидно, не будут работать, и вы не сможете запрограммировать чип через ISP. Это также означает, что вы не можете депрограммировать предохранитель обычными методами.

Если это так, то вы можете депрограммировать этот предохранитель с помощью программирования высокого напряжения. Если у вас есть под рукой плата AVR Dragon, вы можете легко сделать это, подключив правильные контакты на разъеме HVSP к вашему чипу. Будьте осторожны, если вы делаете это внутри схемы, так как параметры программирования высокого напряжения используют 12 вольт, что может поджечь остальную часть вашей схемы. Лучше всего запрограммировать его исключительно на драконе через сокет ZIF или аналогичный.

Вот видео от Atmel о том, как депрограммировать предохранитель с помощью параллельного программирования высокого напряжения: http://www.youtube.com/watch?v=32CkOkpOcSc

Хотя описание RSTDISBL верно, здесь оно не применяется: если бы RSTDISBL был активен, бит 0x80 старшего байта предохранителя был бы равен 0, и он показан как 1 выше. Более того, поведение, описанное при низком уровне сброса RESET, ясно демонстрирует, что RESET включен .

Это проблема с предохранителем. Контакт сброса, вероятно, отключен неправильной настройкой предохранителя. Google "калькулятор предохранителей" для справки, или проверьте лист данных.