Загрузчик на ATmega328p (3.3V/8MHz), чувак не закончит свое дело

Привет и спасибо, что прочитали мой вопрос!

Мне нужно, чтобы мои проекты были как можно меньше. И навыки, и оборудование имеют значение. Поэтому я не могу использовать для них пакет DIP, и я выбрал пакет TQFP. Суть в том, чтобы запрограммировать TQFP ATmega328P с помощью внешней платы без пайки, которая подключается к Arduino UNO. Как то не надо постоянно проверять соединение и все такое. Экран представляет собой толстый Arduino Pro Mini со всеми доступными опциями (3,3 В / 5 В, 8 МГц / 16 МГц, можно подключить Sparkfun FTDI, ...), как показано ниже:

Как видите, я инженер Gymetrics, но не инженер-электронщик и не программист... На самом деле я допустил некоторые ошибки, разрабатывая его с контактами SS, соединенными вместе, а не с выводом Arduino UNO для сброса. вывод мишени и добавил конденсатор не в то место. Мне удалось подключить контакт 10 Arduino к контакту сброса цели на другом шилде и вынуть этот конденсатор. При заказе одного вы получаете их как минимум десятки...

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

Поскольку я впервые записываю загрузчик в ATmega328P, я не уверен в том, что делаю. Итак, я попытался записать загрузчик в Arduino Pro Mini, он отлично работает. Я счастлив в одном: я знаю, как следовать пошаговой процедуре!

Микроконтроллер, который я использую (ATmega328P), такой же, как и в Arduino Pro Mini, поэтому конфигурация в Arduino IDE такая же. Однако, когда работа выполняется легко с помощью Arduino Pro Mini, она не работает с моей платой. Вот что показывает ошибка IDE:

Arduino : 1.8.12 (Windows 10), Carte : "Arduino Pro or Pro Mini, ATmega328P (3.3V, 8 MHz)"

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files 
(x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -PCOM7 -b19200 -e - 
Ulock:w:0x3F:m -Uefuse:w:0xFD:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m 

 avrdude: Version 6.3-20190619
     Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
     Copyright (c) 2007-2014 Joerg Wunsch

     System wide configuration file is "C:\Program Files 
 (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

     Using Port                    : COM7
     Using Programmer              : stk500v1
     Overriding Baud Rate          : 19200
     AVR Part                      : ATmega328P
     Chip Erase delay              : 9000 us
     PAGEL                         : PD7
     BS2                           : PC2
     RESET disposition             : dedicated
     RETRY pulse                   : SCK
     serial program mode           : yes
     parallel program mode         : yes
     Timeout                       : 200
     StabDelay                     : 100
     CmdexeDelay                   : 25
     SyncLoops                     : 32
     ByteDelay                     : 0
     PollIndex                     : 3
     PollValue                     : 0x53
     Memory Detail                 :

                              Block Poll               Page                       Polled
       Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
       ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
       eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
       flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
       lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
       hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
       efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
       lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
       calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

     Programmer Type : STK500
     Description     : Atmel STK500 Version 1.x firmware
     Hardware Version: 2
     Firmware Version: 1.18
     Topcard         : Unknown
     Vtarget         : 0.0 V
     Varef           : 0.0 V
     Oscillator      : Off
     SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: erasing chip
avrdude: reading input file "0x3F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x3F:
avrdude: load data lock data from input file 0x3F:
avrdude: input file 0x3F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: reading input file "0xFD"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xFD:
avrdude: load data efuse data from input file 0xFD:
avrdude: input file 0xFD contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xDA"
avrdude: writing hfuse (1 bytes):

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files         (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -PCOM7 -b19200 -    Uflash:w:C:\Program Files     (x86)\Arduino\hardware\arduino\avr/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex:i -    Ulock:w:0x0F:m 
Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDA:
avrdude: load data hfuse data from input file 0xDA:
avrdude: input file 0xDA contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.03s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude done.  Thank you.


avrdude: Version 6.3-20190619
     Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
     Copyright (c) 2007-2014 Joerg Wunsch

     System wide configuration file is "C:\Program Files     (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

     Using Port                    : COM7
     Using Programmer              : stk500v1
     Overriding Baud Rate          : 19200
     AVR Part                      : ATmega328P
     Chip Erase delay              : 9000 us
     PAGEL                         : PD7
     BS2                           : PC2
     RESET disposition             : dedicated
     RETRY pulse                   : SCK
     serial program mode           : yes
     parallel program mode         : yes
     Timeout                       : 200
     StabDelay                     : 100
     CmdexeDelay                   : 25
     SyncLoops                     : 32
     ByteDelay                     : 0
     PollIndex                     : 3
     PollValue                     : 0x53
     Memory Detail                 :

                              Block Poll               Page                       Polled
       Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
       ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
       eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
       flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
       lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
       hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
       efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
       lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
       calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

     Programmer Type : STK500
     Description     : Atmel STK500 Version 1.x firmware
     Hardware Version: 2
     Firmware Version: 1.18
     Topcard         : Unknown
     Vtarget         : 0.0 V
     Varef           : 0.0 V
     Oscillator      : Off
     SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Erreur lors de la gravure de la séquence d'initialisation.
Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
     Double check connections and try again, or use -F to override
     this check.


avrdude done.  Thank you.

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

Что мне делать? Я собираюсь попробовать припаять ATmega328P напрямую, чтобы увидеть, не проблема ли это в сокете, но я не думаю, что это так, поскольку он работает в первом сообщении.

Спасибо!

ОБНОВЛЕНО

Интерфейс программирования:

UNO               Target

10                RST
11                MOSI
12                MISO
13                SCK

, 👍0

Обсуждение

Каковы ваши соединения интерфейса программирования? Pro Mini часто требуется контакт DTR для программирования., @hcheung

Я не использую контакт DTR на Pro Mini для записи загрузчика. Я напрямую подключаю сброс pro mini (цель) к 10-му контакту UNO., @Hugo Vernier-Lambert

Просто попробуйте. DTR гарантирует наличие короткого одиночного импульса, в то время как синхронизация для сброса может не работать, а также может иметь эффект многократного дребезга. Когда я программирую Pro Mini, сброс никогда не работает, в отличие от DTR., @hcheung

С контактом DTR вместо контакта сброса я каждый раз получаю неправильную подпись устройства, но это лучше, чем ничего. Он больше никогда не читает 0x000000, но некоторые случайные байты: 0x0000FF или 0x000007 или 0x00FF00, @Hugo Vernier-Lambert

В первый раз предохранители все еще находятся в заводских настройках по умолчанию. То есть; внутренний осциллятор. После установки фьюзов на указанные вами значения микросхема использует внешний кристалл. Тот факт, что вы не получили ответа, может указывать на проблему с кристаллом (или нагрузочными конденсаторами). Глядя на вашу плату, кажется, что вы добавили возможность менять кристаллы, перемещая перемычки. Однако на картинке нет перемычек., @Gerben

Я использую перемычки, но чтобы вы не запутались в них, глядя на картинку, я их все убрал. У меня есть перемычки с обеих сторон кристалла 8 МГц, когда я пишу это сообщение. Так ты думаешь, мне стоит попробовать запрограммировать его без кристаллов? а ты внутренний?, @Hugo Vernier-Lambert

Нагрузочные конденсаторы имеют емкость 22 мкФ в соответствии с рекомендациями из таблицы данных и схемой Pro Mini., @Hugo Vernier-Lambert

Это определенно выглядит так, как будто он не может синхронизироваться после установки предохранителей. Я бы предположил, что кварцевые схемы очень чувствительны и, возможно, сами перемычки мешают этому. Вы можете попробовать соединить перемычки припоем (в нижней части), чтобы обойти их. Также поможет использование осциллографа с щупом, установленным на 10X, чтобы проверить, действительно ли колеблется кварц., @Majenko

Итак, у меня нет ни рабочего датчика 10X, ни датчика 100X, он почему-то сломался. Я ослепну на этом, извините. Я думаю, вы правы в том месте, где перемычки могут мешать кристаллу. Я припаял к кристаллу 8 МГц, потому что именно его я буду в основном использовать в будущем для энергопотребления. В результате он по-прежнему не работает с 4 uC, которые я использую. Попробую с другим, к которому никогда не прикасался, но на этот счет особой надежды нет., @Hugo Vernier-Lambert

@ HugoVernier-Lambert 22 мкФ, ты действительно это имел в виду?, @Wirewrap

@Wirewrap aïe ... Спасибо, я думаю, проблема может быть в этом. Я снова сделал полную схему и хотел поставить 22 пФ, но поставил 22 мкФ ... ну, я поменяю ее и посмотрю, произойдет ли волшебство! Еще раз спасибо, что указали на это!, @Hugo Vernier-Lambert


1 ответ


Лучший ответ:

1

Проблема решена, я установил два слишком больших конденсатора на контакты XTAL, из-за чего кристалл не мог резонировать.

Спасибо @Wirewrap за обнаружение ошибки

,