Arduino.ru
В этом посте я хочу рассказать как залить Bootloader и выставить Fuse для ATmega8A. По тому как сам новичек в этом деле, испытавал большие сложности в сеё деле. Инфы на просторах интернета на столько много, что она не поможет. А скорее запутает начинающего ардуинщика.
И так, господа профи.. прошу не пинать, если что не так =)
1. Arduino UNO (думаю клоны тоже подойдут)
2. «Голая» ATmega8A
Что будем делать:
1. Подключим наш камюшек к UNO
2. Зальем Arduino ISP
4. Зальем Bootloader
1. Подключите ваш камень как показано на рисунки ниже
2. После этого открываем Arduino IDE и идем в Файл — Примеры — ArduinoISP
И после этого жмем записать загрузчик
Установите программы AVR Burn-O-Mat и AVR DUDE последнию распакуйте например на работчий стол в папку avrbube.
Откройте программу Burn-O-Mat. Выбирите AVR type, у нас ATmega8
Идем Settings — AVRDUDE
AVRDUDE location указываем файл avrdude.exe который был в архиве программы AVR DUDE во второй строке указываем файл avrdude.conf который лежит тут же. Пока все. Нажимаем Ок и перезагружаем программу.
Открываем эти же настройки, у нас в списке Programmer должно появиться всекого разного. Мы выбираем ардуино. Далее ставим ком порт, тот на котором у Вас адруино. ( у меня сначало была на 9, но там почему то максимум до 8, по этому пришлось посадить на 2 порт который был свободен.) В нижней строчки, пишем тоже самое. После чего жмем Ок. В главном окне программы на потив выбранного нами AVR типа жмем Fuse. В открывшемся окне жмем Read Fuse. Если у Вас возникнет ошибка отключите ардуино от юсб и снова включите. После чего ещё раз жмем прочитать фьюсы. Если все успешно прочиталось, ставим галочки так как на картинки:
После того как поставили галочки жмем записать фьюсы (write fuses). Если сообщили об успешной записи то закрываем программу.
4. Зальем Bootloader
Отключите Вашу UNO от USB извлеките микросхему и установите на её место ATmega8A (все проводки можно удалить)
Подключаем нашу плату. Заходим в Arduino IDE. Проверьте что бы был выбран правильный ком порт и плата, как на картинки.
После этого жмем записать загрузчик
Если загрузчик записался, то могу поздравить. Теперь у Вас не камень я сердце ардуино)))
Залейте этот код:
- Войдите на сайт для отправки комментариев
А для чего нужны AVR Burn-O-Mat и AVR Dude?
1. Вроде AVR dude уже стоит у всех кто поставил arduinoIDE. В папке hardware\tools\avr\bin\
2. Для чего вообще нужен шаг » 3. Изменим FUSE»?, разве на шаге » Зальем Bootloader» у вас с помощью, все той же avrdude не будут опять перезаписаны фьюзы? Если включить File/Preferences «Show verbose output during upload», то там будет видно, как при загрузке бутлоадера происходит вызов avrdude с фьюзами. А фьюзы возмутся и файлика hardware\arduino\boards.txt
Вообщем может я не прав, но мне кажется что пункт с фьюзами можно сократить. Как из лени, так из снизить шанс «сделать ошибку».
Но — это не критика. Скорее уточнение. Безусловно вы полезное руководство написали.
А еще я не совсем понял. На картинке » Подключите ваш камень как показано на рисунки ниже» у вас показан вариант «атмега без кварца», а при загрузке бутлоадера вы выбираете плату » Arduino NG or older w/ ATmega8″, которая имет бутлоадер и кварц на 16-ть.
У вас точно » После чего светодиод (L) на плате должен маргать. =)»?
- Войдите на сайт для отправки комментариев
С шагом 3 я точно не могу знать) описал так как меня научили.
И да, в 4 пункте ошибка (вот что значит новичок))
Подключаем камень как на этой картинки (с кварцем и керамическими конденсаторами на 22 пФ) можно сразу так подключить, но можно и потом добавить кварц с конденсаторами.
И после этого жмем записать загрузчик
Только теперь можно изъять микросхему из ардуино, и поставить на неё ATmega8A.
После чего пункт 5 точно заработает. =)
Кто тут админы, можно это в первом сообщении исправить?)
- Войдите на сайт для отправки комментариев
Тогда уж и тему назовите что-то типа «Как прошить загрузчик». Где оживление то? Скейтчи можно и без загрузчика через ArduinoISP заливать.
- Войдите на сайт для отправки комментариев
Тогда уж и тему назовите что-то типа «Как прошить загрузчик». Где оживление то? Скейтчи можно и без загрузчика через ArduinoISP заливать.
Дык такие темы уже есть на форуме 🙂 А «просто прошить», так официальный туториал и содержит все нужное Arduino — ArduinoISP
И кстати это вам понятно что «нужно прошить загрузчик», и это вы будете гуглить «как прошить загрузчик». А новичку это все страшно и непонятно. Не зря он, именно как новичок, так назвал тему. И другой новичок, возможно, будет искать именно «как оживить», а не «как прошить».
Но все это «не точно», «лишние шаги», «уже было» — все второстепенно. А важно
1. Топикстартер не поленился расшаририть свой опыт. Причем постарался качественно сделать это, в меру своего понимания (со скриншотами, пошаговым объяснениям). Тут важно не запинать его энтузиазм нашей тягой к формальной правильности.
2. У новичков действительно большой тормоз дает именно «страх». И такие статьи с красивыми картинками и «я новичок вот так смог» — помогают двинутся дальше.
3. Иногда, как ни странно «новичок новичку» — может лучше объяснить чем опытный. Именно потому что опытному уже трудно стать на место чайника и понять «что же тут не ясного».
- Войдите на сайт для отправки комментариев
Согласен с уважаемым leshak, страх убить камень оч. тормозит новичков, лично для меня он стал одной из причин купить PinBoard 2. Лично мне на ней было легче прошить и фузы и загрузчик.
- Войдите на сайт для отправки комментариев
Вот, к примеру, прикольная статья именно как оживить ATmega8, если например, выставили неправильно фьюзы SPIEN или RSTDISBL без параллельного/высоковольтного программатора.
- Войдите на сайт для отправки комментариев
- Войдите на сайт для отправки комментариев
Вобсна тоже вопрос по теме:
Прошил бутлоадер через USBasp — все вроде встало — скетч в память загружается и Всё. Дальше никаких действий не происходит.. Где зарыта собака.
- Войдите на сайт для отправки комментариев
Там два файла прошивки попробуйте другой.
- Войдите на сайт для отправки комментариев
Спасибо. Сейчас попытаю счастье!
- Войдите на сайт для отправки комментариев
Да помогло! Спасибо! очевидное лежало на поверхности
- Войдите на сайт для отправки комментариев
Доброе время суток! Не дождался заказа Ардуино решил собрать сам, спаял на макетке Atmega 168PV-10PU програматор собрал по статье http://robocraft.ru/blog/arduino/50.html и пытался шить паралельным программатором из ардуины, пробовал разные виды плат в ответ такая фраза «avrdude: Expected signature for ATMEGA168 is 1E 94 06».
Перебирал варианты плат с контроллером 168, только коды разные, позже спутился до Atmega8, ответ тот же.
Странно при прописывании БутЛоадера фъюзы зашиваются, но я не увидел там ничего похожего на сигнатуру контроллера.
- Войдите на сайт для отправки комментариев
- Войдите на сайт для отправки комментариев
Что то тут не так или я просто запутался в разрыве инструкции (((
- Войдите на сайт для отправки комментариев
Ссылки не работают. Нашол AVR8-Burn на офс сайте а в ней нет в настройках «Arduino»
- Войдите на сайт для отправки комментариев
- Войдите на сайт для отправки комментариев
Друзья, объясните пожалуйста, а почему в статье 2 раза записывается загрузчик?
Пункт 2: После этого жмем записать загрузчик
Пункт 4: После этого жмем записать загрузчик
Или куда по мнению автора записывается он первый раз, а куда второй?
- Войдите на сайт для отправки комментариев
Подключаем камень как на этой картинки (с кварцем и керамическими конденсаторами на 22 пФ) можно сразу так подключить, но можно и потом добавить кварц с конденсаторами
вот вы не указали какой кварц а если я вставлю туда 8 МHz(при прошивки). А при сборке самой платы ардуино будет 16 МHz. Работать то будет delay(1000)/
- Войдите на сайт для отправки комментариев
поделюсь своим опытом тоже, раз уж все делятся
но это для многкратного испльзования. на один раз использовать любые другие способы
так как испльзую в SMD исполнении то пользуюсь таким переходником
Для тех кто использует DIP удобен такой переходник, раз в 10 дешевле
программирую через USBASP. лучше такой в котором можно менять напряжение
далее так как я использую smd сделал плату разъемом для программирования светодиодом присутствия питания и светодиодом на 13 пине, заливаю blink для тестирования
фото позже выложу
для тех кто в dip все проще. хоть припаиваетесь проводами к zip адаптеру
никакого кварца не надо (я не испльзую кварц, работаю на 8мгц внутреннего генератора, обычно хватает)
далее нужна программа extreme avr burner
устанавливаем и запускаем.
открываем прошивку, открываем вкладку фьюзы. для внутреннего генератор нужны такие фьюзы
обязательно поставить галочки write. теперь просто нажимаем кнопку сверху Write All и бутлоадер зашьется
если постоянно не получается прошить а ошибок в монтаже нет, и чип выбран правильно расскажу что делат дальше
- Войдите на сайт для отправки комментариев
Имеется плата Pinboard 1.1 с залоченной мега16 и программатор PX-400 с внешним USB-COM адаптером. Я так понимаю, этого более, чем достаточно, чтобы прошить любой контроллер.
Также имеются в наличии две Atmega8-16PU в DIP корпусах. Кварцев любых наковырять из старых компьютерных плат тоже не проблема. Помогите сделать ардуинку на базе этих корпусов!
Премудростей обратных и прямых фьюзов я так и не понял. Собственно, в процессе экспериментов залочил нафиг мегу16. Теперь уже страшно за это браться. Кстати, на пинборде ещё есть встроенный FT BB Prog. Уже голова идёт кругом от этого «разнообразия».
- Войдите на сайт для отправки комментариев
Имеется плата Pinboard 1.1 с залоченной мега16 и программатор PX-400 с внешним USB-COM адаптером. Я так понимаю, этого более, чем достаточно, чтобы прошить любой контроллер.
Также имеются в наличии две Atmega8-16PU в DIP корпусах. Кварцев любых наковырять из старых компьютерных плат тоже не проблема. Помогите сделать ардуинку на базе этих корпусов!
Премудростей обратных и прямых фьюзов я так и не понял. Собственно, в процессе экспериментов залочил нафиг мегу16. Теперь уже страшно за это браться. Кстати, на пинборде ещё есть встроенный FT BB Prog. Уже голова идёт кругом от этого «разнообразия».
мегу16-ю похороните, как павшую от рук врага, для меги8-й для кого тема написана?
- Войдите на сайт для отправки комментариев
насчет фьюзов не подскажу. нужно интевертировать или нет. тут в первую очередь зависит в какой программу будете прошивать.
мне понравилась программа для вашего программатора Avr-Osp II. фьюзы и галочками проставляются, а можно просто ввести 16ричные числа
и сначала перед тем как шить считывайте фьюзы. сразу будет понятно инверсные или нет.
залоченную можно разлочить (точно не помню, в инете найдете) любым программатором, все выводы как обычно, только reset подается не на микроконтроллер, а на базу транзистора, с помощью которого увеличивается напряжение на reset до 12В кажется. и можете зашить свои фьюзы
- Войдите на сайт для отправки комментариев
Atmega8-16PU — это мега 8 или 16?
- Войдите на сайт для отправки комментариев
Atmega8-16PU — это мега 8 или 16?
- Войдите на сайт для отправки комментариев
Расскажите, плиз, как в неё зашить ардуиновский бутлоадер имеющимся у меня оборудованием? Есть кварцы на 8,12 и 16МГц. Реально из этих двух Мег8 собрать пару ардуинок?
- Войдите на сайт для отправки комментариев
- Войдите на сайт для отправки комментариев
Мой опыт клонирования Ардуино Уно р3! на чип Atmega 328 PU!!
Собираем схему как в первом посту.
Подключаем, загружаем скетч Arduino ISP
Далее открываем блокнотом avrdude.conf
находим строчку # ATmega328P
и правим сигнатуру signature = 0x1e 0x95 0x0f;
на signature = 0x1e 0x95 0x14;
выбираем плату Arduino Uno
программатор Arduino as ISP и жмем Загрузить загрузчик, ждем когда прошьет.
Отключаем Ардуинку, вынимаем МК и ставим ту что прошили, возвращаем сигнатуру в файле avrdude.conf на signature = 0x1e 0x95 0x0f;
все готова, теперь можно включать Ардуинку и загружать свои скетчи, проверено все работает.
Так же можно создать свое устройство просто скопировав секции и заменить сигнатуры и фьюзы для конкретного чипа. Но так как это я буду делать не часто то решил именно таким способом так сказать на лету.
- Войдите на сайт для отправки комментариев
Доброго дня!
Попытался прошить сей контроллер(atmega8L), установленный на макетку, воспользовавшись Arduino Uno c Atmega328P и ArduinoIDE 1.0.5
Перед этим долго курил форумы, промимо этого форума:
2. Соответсвующие статьи о прошивке с помощью платы ардуино на arduino.cc
Все останавливается на попытке прошить загрузчик. До заливки какого-либо скетча не дошло, т.е. atmega328 не выдергивал. Ресет atmega8L соединен с пин10, как написано. (а вообще-то.. если честно, как правильно обращаться с ресетом — не понял, пишут очень много — выдернуть-вставить руками, прокинуть через 10ком на *5в и проч. — пробовал все это в разных комбинациях)
Сначала пробовал просто, не мудрствуя, воспользоваться пунктом Arduino NG or older on /w Atmega8
Потом пробовал залить те файлы с бутлоадером и boards.txt, которые рекомендованы по первой ссылке.
Потом менял туда и обратно avrdude с родного на тот, который рекомендован по первой ссылке.
Потом вернул исходный avrdude и добавил бутлоадер и кусочек в boards.txt вот отсюда
(как понял, отличается от NG только частотой кварца)
avrdude: Device signature = 0x000000
Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
(было в какой-то момент
avrdude: stk500_getsync(): not in sync: resp=0x00
но в этом случае, скорее всего ресет я неправильно подключил)
Так понимаю, что причины могут быть разными. Но, честно говоря, уже готов сдаться — что делать не знаю. Все пишут, что справились с проблемой. Я- пока нет.
Может, кто-то что-то посоветует? Простое решение — что-то поправить? atmega8l и atmega8 чем-то отличаются, кроме частоты кварца? Плохой чип? С Arduino Uno что-то связано? В общем, я в растерянности, уже два дня убил. Заранее спасибо.
- Войдите на сайт для отправки комментариев
а вы кварц с конденсаторами для меги 8 ставили?
- Войдите на сайт для отправки комментариев
Кварц не ставил, подсоединял по схеме без кварца. Кстати, я нечетко написал, прошиваю не 8, а 8L.
- Войдите на сайт для отправки комментариев
хорошо какие фьюзы зашили?
- Войдите на сайт для отправки комментариев
Руками ничего не менял.
Стоят в boards.txt:
Последний отчет о работе avrdude:
C:\Program Files (x86)\Arduino\hardware/tools/avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega8 -cstk500v1 -P\\.\COM3 -b19200 -e -Ulock:w:0x3F:m -Uhfuse:w:0xca:m -Ulfuse:w:0xdf:m
avrdude: Version 5.11, compiled on Sep 2 2011 at 19:38:36
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is «C:\Program Files (x86)\Arduino\hardware/tools/avr/etc/avrdude.conf»
Using Port : \\.\COM3
Using Programmer : stk500v1
Overriding Baud Rate : 19200
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
AVR Part : ATMEGA8
Chip Erase delay : 10000 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 4 20 128 0 no 512 4 0 9000 9000 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
———— —- —— —— —- —— —— —- —— —— —— ———
flash 33 10 64 0 yes 8192 64 128 4500 4500 0xff 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
———— —- —— —— —- —— —— —- —— —— —— ———
lfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
———— —- —— —— —- —— —— —- —— —— —— ———
hfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
———— —- —— —— —- —— —— —- —— —— —— ———
lock 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
———— —- —— —— —- —— —— —- —— —— —— ———
calibration 0 0 0 0 no 4 0 0 0 0 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
———— —- —— —— —- —— —— —- —— —— —— ———
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
avrdude: Send: A [41] . [80] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [02]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [81] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [01]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [82] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [12]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [98] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
avrdude: Send: A [41] . [84] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [85] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [86] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [87] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [89] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: Send: A [41] . [81] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [01]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [82] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [12]
avrdude: Recv: . [10]
avrdude: Send: B [42] p [70] . [00] . [00] . [01] . [01] . [01] . [01] . [02] . [ff] . [00] . [ff] . [ff] . [00] @ [40] . [02] . [00] . [00] . [00] [20] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: Send: E [45] . [05] . [04] . [d7] . [c2] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: Send: P [50] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: AVR device initialized and ready to accept instructions
Reading | avrdude: Send: V [56] 0 [30] . [00] . [00] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: V [56] 0 [30] . [00] . [01] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
################avrdude: Send: V [56] 0 [30] . [00] . [02] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
################################## | 100% 0.06s
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
avrdude: Send: Q [51] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
Как прошить atmega8a pu
Далеко не во всех проектах целесообразно использовать Ардуинку целиком, иногда достаточно всего нескольких выводов микроконтроллера, да и интегрировать её в схему не всегда удобно. В таких случаях разумно совместить простоту и удобство среды программирования Arduino IDE и дешевизну и малый размер «голого» микроконтроллера, тем более, что прошивать такие МК можно непосредственно с помощью Ардуинки.
В семействе AVR огромное множество микроконтроллеров на любой вкус. Для стандарт tinyAVR ( ATtiny xxx) характерны небольшое количество флеш-памяти (до 16 килобайт) и количество линий ввода-вывода в совокупности с низким энергопотреблением, а для стандарта megaAVR ( ATmega xxx) доступно уже до 256 килобайт памяти и до сотни портов ввода-вывода (зависит от модели МК), так же доступна расширенная система команд и периферийных устройств. Сегодня будем прошивать ATmega8 , цифра 8 в названии говорит нам о том, что у этого микроконтроллера 8 килобайт встроенной памяти. На картинке ниже расписаны выводы микроконтроллера в DIP корпусе. Кстати у ATmega48/88/168/328 выводы расположены аналогичным образом.
- Ground (8 и 22 ноги) — земля, минус питания.
- VCC (7 нога) — + питания.
- Crystal (9 и 10 ноги) — сюда подключается кварцевый резонатор нужной частоты, в случае если МК настроен на работу от внешнего генератора.
- AVCC (20 нога) — это + питание для аналоговой части МК, их разделяют с VCC в случаях когда необходимо получать сильно точные значения, питания подают отфильтрованное от помех и т.п. На практике для рядовых задач просто соединяют эту ногу с VCC.
- AREF (21 нога) — на эту ногу можно подавать опорное напряжение отличное от пяти вольт питания микроконтроллера, например если есть необходимость измерять напряжение в пределах 3 вольт.
- RESET — сброс настроек, перезагрузка МК. Кратковременная подача логического ноля на этот вывод приведет к перезапуску прошивки, так же необходим для перезаписи.
- Остальные выводы — это порты ввода вывода такие же как и на плате Ардуино, их можно использовать по своему усмотрению.
Для прошивки нашего микроконтроллера понадобятся его порты последовательного периферийного интерфейса (SPI — Serial Peripheral Interface) — это синхронный протокол последовательной передачи данных, используемый для связи микроконтроллера с одним или несколькими периферийными устройствами. В нашем случае это выводы:
- 17 вывод — MOSI (Master Out Slave In) — линия для передачи данных от ведущего устройства (Master) к ведомым (Slave)
- 18 вывод — MISO (Master In Slave Out) — линия для передачи данных от ведомого устройства (Slave) к ведущему (Master)
- 19 вывод — SCK (Serial Clock) — тактовые импульсы, генерируемые ведущим устройством (Master) для синхронизации процесса передачи данных
В первую очередь необходимо из ардуинки сделать программатор, в этом нет ничего сложного, нужно просто загрузить в неё код из готового примера «ArduinoISP».
После его загрузки в плату (кстати я буду использовать Arduino UNO для наглядности, но это не принципиально, можно и другую) в меню Инструменты — >>Программатор необходимо выбрать «Arduino as ISP» .
Дальнейшие действия по подключению МК к Ардуинке описаны в комментариях к коду который мы в неё загрузили, а именно подключаем следующие пины:
- 17 нога микроконтроллера (MOSI) к 11 пину платы Ардуино
- 18 нога микроконтроллера (MISO) к 12 пину
- 19 нога микроконтроллера (SCK) к 13 пину
- 1 нога (RESET) к 10 пину платы Ардуино
- 8 ногу к GND
- 7 ногу к +5V
Дополнительно подключим на нулевой цифровой выход ATmega8 (вторая ножка микросхемы) светодиод через токоограничивающий резистор на 220 Ом, для наглядного подтверждения того, что микроконтроллер работает.
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat — shows the programmer is running
// 8: Error — Lights up if something goes wrong (use red if that makes sense)
// 7: Programming — In communication with the slave
Как видно из описания примера «Arduino ISP» к 7, 8 и 9-му пинам платы Ардуино можно подключить информационные светодиоды (через резисторы) отображающие ход работы программатора, но это по желанию.
Теперь почти всё готово, осталось только сообщить среде программирования, что именно мы собираемся прошивать. Для этого нужно добавить нашу ATmega8 в среду разработки Arduino IDE, тоесть нужно установить так называемое ядро, или как оно называется в самой IDE – плату.
MiniCore – ядро для поддержки микроконтроллеров ATmega328, ATmega168, ATmega88, ATmega48 и ATmega8, для его установки нажимаем Файл —>> Настройки и в открывшемся окне ищем строчку: «Дополнительные ссылки для менеджера плат:» , в это поле необходимо ввести ссылку:
Далее заходим в Инструменты —>> Плата —>> Менеджер плат находим и устанавливаем нужное ядро.
После всех манипуляций в менеджере плат должно появиться следующее:
В качестве платы выбираем нашу ATmega8, параметр «Clock:» устанавливаем «Internal 8 MHz», так МК будет работать от внутреннего генератора.
Все готово! Теперь подключаем плату Ардуино к компьютеру и не забыв выбрать нужный COM порт, выбираем в меню «Инструменты» пункт «Записать загрузчик» .
Теперь МК знает от какого генератора и на какой частоте ему работать, можно загружать в него свои программы. Для примера загрузим классическую мигалку, только поменяем порт вывода на нулевой (вторая нога МК), именно к нему по схеме мы подключили светодиод.
Загружать нужно не кнопкой как обычно, а через меню Скетч —>> Загрузить через программатор , если все сделано правильно, то светодиод начнет мигать.
В Arduino IDE можно прошить ATmega8 и без установки дополнительных плат, выбрав в качестве платы «Arduino NG or older» и в качестве процессора «aTmega8». Но в таком случае не будет возможности выбора от какого генератора (внешнего или внутреннего) и на какой частоте будет работать МК, а работать он будет от внешнего генератора на частоте 16 MGz, и перезаписать его настройки в дальнейшем без подключения кварцевого резонатора к выводам 9 и 10 будет невозможно, будьте внимательны!
Ну и напоследок приведу ссылки на ядра для работы с микроконтроллерами серии ATtiny, устанавливаются они аналогично MiniCore:
Микроконтроллеры AVR для начинающих — 3
В предыдущей части статьи я рассказывал про прошивку МК с помощью программы PonyProg, теперь расскажу как прошить с помощью CodeVision AVR (далее CVAVR). Честно говоря, работа в программе не сильно отличается от PonyProg.
Для начала можете микроконтроллер поставить в панельку программатора, и подключить его к LPT порту, затем подавайте питание.
Запускаем программу CVAVR
1) Сначала нам нужно настроить порт, заходим в меню Settings -> Programmer.
Откроется окошко, все настройки выставляем как на рисунке ниже
2) Нажимаем ОК, далее заходим в меню Tools -> Chip Programmer
Откроется следующее окно:
Ничего лишнего в этом окошке не трогаем, галочки не ставим и ничего не переключаем.
3) Выбираем нужный нам микроконтроллер из выпадающего меню, я выбрал ATmega8. Если у вас в названии микроконтроллера после ATmegaX стоит буква, к примеру V или L, то в списке выбирайте такой же МК, с такой же буквой.
4) Теперь нам нужно открыть файл прошивки, в этом окошке нажимаем File -> Load FLASH
5) Откроется окно, где нужно будет выбрать файл прошивки с расширением .hex, кстати, не забудьте внизу из выпадающего меню «Тип файлов» выбрать этот тип файла.
6) Файл EEPROM выбираем точно так-же, для этого нажимаем меню File -> Load EEPROM, расширение этого файла .eep, если к вашему проекту такой файл не прилагается, значит нужно прошивать только FLASH т.е. .hex.
Имейте ввиду, что процессы прошивки программы, фьюзов
и ПЗУ (EEPROM) это самостоятельные отдельные процедуры.
И рекомендуется шить сначала программу, затем ПЗУ, затем фьюзы, в принципе что у нас и происходит, когда мы загружаем все файлы для прошивки, и выставляем фьюзы в окошке.
7) Итак, файлы прошивки мы загрузили, теперь нам нужно выставить фьюзы, для моего проекта фьюзы следующие: BOOTSZ1, BOOTSZ0, SUT1, CKSEL3, CKSEL2, выставляем их.
8) Затем ставим галочку Program Fuse Bit(s), если вы не поставите галочку – фьюзы не будут записываться.
Чтобы проверить, видит ли наша программа программатор, подключенный к LPT порту, нажимаем кнопку Reset Chip, на программаторе должны мигнуть светодиоды чтения/записи. Если светодиоды не мигают, значит нам нужно проделать операции после пункта 6, описанные в предыдущей части статьи.
9) Теперь можно прошить МК, нажимаем кнопку Program All, и начнется процесс прошивки.
Если вы загружали только файл прошивки FLASH, .hex, то по ходу прошивки программа предложит загрузить файл EEPROM, жмем NO, т.е. НЕТ.
После чего пробегут еще 2 полоски и процесс прошивки завершится
Во время прошивки МК нельзя выключать или перезагружать ПК!
Теперь можете проверить МК, поставив его в панельку вашего устройства. Если вы хотите записать другую прошивку на этот же МК, новую прошивку можно записать поверх старой, или же стереть сначала старую, потом записать новую, как вам удобнее, разницы особой нету.
11) Чтобы стереть данные с МК нажимаем Program -> Erase Chip.
В данной программе можно считать данные FLASH или EEPROM с МК, или просмотреть Lock биты, установленные Fuse биты. Все это в меню Read (считать).
Решение некоторых проблем с AVR
C разными программаторами, и с разными программами возникают разные ошибки, но некоторые ошибки между собой очень похожи, и устраняются одинаково. Во первых микроконтроллеры подключайте строго к указанным выводам: RESET, VCC, GND, MOSI, MISO, SCK. Если спутаете вывода, или забудете припаять один из контактов, МК не прошьется. Случайно МК в панельку можно поставить спутав вывода, т.е. задом на перед, от этого МК не сгорит, но и не прошьется конечно тоже. Напомню еще раз, что у некоторых МК, например в ATmega 64 и 128 вывода MOSI и MISO не применяются для ISP программирования, вместо них вывода MOSI подключают к ножке PE0, a MISO к PE1. Напряжение питания не должно быть ниже чем нужно, иначе МК не будет программироваться, программы будут выдавать ошибки о том, что не могут обнаружить МК.
Записывать левые программы, например программу, предназначенную для ATmega8 в ATmega48 нельзя. Бывает, что вы запрограммировали МК и файлы прошивки удалили с компьютера, а найти прошивку чтобы прошить другой МК не можете найти. В таких случаях просто считываете программу с микроконтроллера, например с помощью CVAVR и сохраняете его на ПК, затем этой прошивкой прошиваете другой МК.
Если вы случайно запрограммировали какой то фьюз, после чего МК залочился, вспомните, что это был за фьюз, некоторые МК с неправильно зашитыми фьюзами удается восстановить, есть несколько способов как это сделать. На К155ЛА3 можно собрать генератор чтобы восстановить МК с запрограммированным RSTDSBL, если вы выставили фьюзы на работу от внешнего генератора, подавая сигнал на вывод XTAL1 некоторые умудряются таким способом восстановить МК. Также фьюзами можно выставить тактирование от внешней RC цепочки. В таком случае придется собрать RC цепочку, чтобы опять запустить МК. Ещё есть фьюзы DWEN, SPIEN. установив которые, вы отключите возможность пользоваться ISP программатором, тут поможет только параллельный программатор, другие программаторы (к примеру тритон) или приборы, которые встречаются на просторах интернета: например этот, или ATmega Fusebit Doctor, данный прибор я собирал, но почему то он не заработал должным образом, плата все еще валяется где то в ящике, как нибудь снова надо взяться за него. Честно говоря, у меня до сих пор валяются три залоченных микроконтроллера, две меги48 и одна мега8, однажды мегу 8ю, которая перестала определяться в программаторе PonyProg (работает через COM порт) я восстановил собрав программатор STK200. Притом знаете ли, свой первый купленный микроконтроллер я прошил с первого раза, и он до сих пор работает у меня в лабораторном блоке питания.
Романов А.С Опубликована: 2012 г. 0 2
Atmega8A в корпусе TQFP-32 прошивка через Arduino ISP
12.JPG» />
- Цена: $0,99
Многие радиолюбители, начинали знакомство с микроконтроллерами через Arduino. Большинству пользователей mysku известно про этот электронный конструктор и удобную платформу для быстрой разработки электронных устройств, поэтому особо останавливаться на достоинствах и недостатках самой платформы я не буду.
В обзоре будет описана возможность использования Arduino в качестве программатора далее по тексту Arduino ISP. Кому интересно, прошу под кат.
Наигравшись с различными модулями к Arduino, у меня возникло желание создать полноценное устройство, которое будет полезно в повседневной жизни.
Случайно наткнувшись в интернете на проект Эмулятор домофонных ключей iButton/Cyfral/Metacom — ibutton от ClusterM, решил попытаться его повторить.
Прочитав описание проекта, были сформулированы основные для меня проблемы или как принято говорить подводные камни:
— Создание печатной платы;
— Прошивка микроконтроллера Atmega8A в корпусе TQFP-32.
До этого я не вытравил ни одной платы и прошивал только встроенный в Arduino микроконтроллер в корпусе DIP.
Atmega8 в корпусе TQFP-32 помимо достоинств, таких как более низкая цена и меньший размер по сравнению с DIP, имеет и недостаток — это неудобство прошивки микроконтроллера и более сложный монтаж на плату.
Устранить первый недостаток можно различными способами:
— Приобрести переходник TQFP32 TO DIP32, который имеет механизм зажима. Стоимость около 1 тыс. рублей;
— Приобрести переходник TQFP32 TO DIP32, который не имеет механизма зажима, рассчитан на припаивание микроконтроллера. Стоимость около 100 рублей за 5 штук;
— Сделать печатную плату-переходник TQFP32 TO DIP32 своими руками;
— Припаять тонкие провода к нужным ножкам и отпаять после прошивки.
Выбрав предпоследний вариант, чтобы не ждать еще месяц доставки, я приступил к созданию печатной платы по методу ЛУТ. Информации и роликов в интернете о данном методе очень много и каждый без труда сможет повторить его дома. Вытравив плату в хлорном железе и припаяв штырьки, получился вот такой переходник:
Исходные файлы для Sprint Layout, можно скачать здесь.
Припаиваем Atmega8 феном или паяльником. Можно «прихватить», только 8 ножек, которые участвуют в прошивке. Не рекомендую использовать различные зажимы или «колхозить» с прищепками.
Подключаем Arduino Uno к компьютеру по USB и загружаем скетч Arduino ISP. Компилируем и прошиваем Arduino Uno. В комментариях, есть подсказка по подключению для прошивки через Arduino ISP, нам потребуются пины MOSI, MISO, RESET, GND, GND, VCC, VCC, SCK.
Общая схема подключения будет выглядеть следующим образом:
Для прошивки будем использовать консольную утилиту avrdude:
где -p m8 — Прошиваемый микроконтроллер в нашем случаи Atmega8;
-P USB15 — Имя порта, под которым опеределяется программатор Arduino ISP;
-с arduino — Тип программатора;
-b 19200 — Скорость USB порта;
-U flash:w:main.hex — Прошивка;
-U lfuse:w:0xE4:m -U hfuse:w:0xDA:m — Фьюзы.
После успешной прошивки, можно дополнительно сравнить код на flash с исходным hex файлом:
Если у Вас нет в наличии Arduino, то в качестве дешевого программатора, можно использовать USBasp. Его стоимость порядка 100 руб.
В заключении, продемонстрирую фотографии устройства, которое я собрал по проекту ClusterM.
Особенности:
— Эмуляция iButton/Cyfral/Metacom;
— Считывание iButton/Cyfral;
— Синхронизация базы ключей с компьютером по USB;
— Компактный размер платы;
— Низкое энергопотребление, автор проекта сообщал, что от одного комплекта батареек устройство работает около года;