Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/48: Рейтинг темы: голосов - 48, средняя оценка - 4.63
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
1

Как прошить Atmega8 с помощью Arduino Uno

17.01.2017, 14:14. Просмотров 9503. Ответов 12
Метки нет (Все метки)

Здравствуйте, уважаемые!

У меня в наличии есть плата Arduino Uno (точнее ее китайская копия), так же есть мк Atmega8A-PU. Uno я прошивал через Arduino IDE.

Подскажите, пожалуйста, как от платы прошить мк? Если можно, прям последовательно и без ссылок на забугорные сайты))
Это мой первый опыт работы с ардуинками, поэтому пока не особо вникаю.

PS. Перепробовал кучу вариантов, уже окончательно запутался. В общем две основные версии, которые я пробовал:

1. Зашить в Uno ArduinoISP, подключить к плате атмегу и прошить. Тут возникает куча вопросов и в результате ничего не работает) Не понятно, risit от атмеги надо то ли к PIN10, либо к risit ардуины подключать... Не понятно, как именно надо прошивать. То ли надо "записать загрузчик", то ли "загрузить через программатор", то ли просто "загрузить". В любом случае, вроде бы все перепробовал.

2. Создать hex файл, потом загрузить его консольным или графическим avrdude. Тут тоже ничего не получается. То пишет, что не находит девайс, то еще что.

В графической оболочке Sina Prok я вообще не могу выбрать нужный мне COM-порт) Там его просто нет...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2017, 14:14
Ответы с готовыми решениями:

Не выходит прошить МК при помощи Arduino UNO в роли ISP
У меня есть Arduino UNO, в качестве моста там стоит ATmega16U2, так что статьи про FTDI мне...

Как прошить Arduino через AVR Studio
Здравствуйте. Взял у знакомых плату Miko Arduino на МК atmega1280. И решил попробывать прошить ее...

BIOS flash (MX25L8005) как прошить с помощью Arduino?
Очень нужно прошить BIOS, т.к. имеющийся умер (уже второй раз по не известным причинам) и в силу...

Чем отличаются ADAM 5510 от Arduino Uno?
Всем доброго времени суток :) Хочу приобрести микроконтроллер, но не знаю какой выбрать: ADAM 5510...

mega328 (arduino uno) + mikrobasic + SDcard = FAIL
в общем, ни на микробейсике, ни на баскоме, так и не смог добиться нормальной работы с карточками...

12
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
17.01.2017, 14:17 2
О, еще в догонку вопрос))
В ArduinoIDE я пишу просто digitalWrite(2, HIGH);
А в атмеге несколько портов - B, C, D кажется. Как там к пинам обращаться надо? Или они обозначаются как по порядку, от 1 до 28?
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
17.01.2017, 18:30 3
Цитата Сообщение от z-z
PS. Перепробовал кучу вариантов, уже окончательно запутался. В общем две основные версии, которые я пробовал:
1. Зашить в Uno ArduinoISP, подключить к плате атмегу и прошить. Тут возникает куча вопросов и в результате ничего не работает) Не понятно, risit от атмеги надо то ли к PIN10, либо к risit ардуины подключать... Не понятно, как именно надо прошивать. То ли надо "записать загрузчик", то ли "загрузить через программатор", то ли просто "загрузить". В любом случае, вроде бы все перепробовал.
Порядок следующий:
1. Залить в Uno прошивку ArduinoISP
2. Подключить SPI порт атмеги (ноги PB3-PB5) к SPI порту Uno (ноги 11-13, соответственно), желательно через резисторы (100 Ом - 1КОм). Riset атмеги повесить на ногу 10. Все ноги питания (Vcc и AVCC) и земли (GND) атмеги подключить к 5В и GND ардуины.
3. Выбрать в меню программатор - ArduinoISP и плату - "Arduino NG or older w/ ATmega8"
4. Прошить загрузчик
5. Прошить свою прошивку

Учитывай, что с загрузчиком будут прошиты фьюзы под кварц. Если тебя это не устраивает, редактируй bords.txt и зменяй low_fuses для "Arduino NG or older w/ ATmega8" с 0хdf на 0xc4.
Прошить атмегу по ISP без работающего генератора нельзя, следовательно прошив её под кварц ты не сможешь перешить её обртно без кварца или внешнего клока.
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
17.01.2017, 18:46 4
Цитата Сообщение от z-z
О, еще в догонку вопрос))
В ArduinoIDE я пишу просто digitalWrite(2, HIGH);
А в атмеге несколько портов - B, C, D кажется. Как там к пинам обращаться надо? Или они обозначаются как по порядку, от 1 до 28?
Ардуина это обертка, если посмотрешь на принципиальную схему плат, то увидишь, что нога 13 это на самом деле PB5, а нога 2 это PD2.
В принципе ты можешь и в ArdunoIDE писать "по взрослому", например PORTD|=(1<<PD2); вместо digitalWrite(2, HIGH);
0
17.01.2017, 18:46
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
18.01.2017, 11:36 5
Цитата Сообщение от яверт
Порядок следующий:
1. Залить в Uno прошивку ArduinoISP
2. Подключить SPI порт атмеги (ноги PB3-PB5) к SPI порту Uno (ноги 11-13, соответственно), желательно через резисторы (100 Ом - 1КОм). Riset атмеги повесить на ногу 10. Все ноги питания (Vcc и AVCC) и земли (GND) атмеги подключить к 5В и GND ардуины.
3. Выбрать в меню программатор - ArduinoISP и плату - "Arduino NG or older w/ ATmega8"
4. Прошить загрузчик
5. Прошить свою прошивку

Учитывай, что с загрузчиком будут прошиты фьюзы под кварц. Если тебя это не устраивает, редактируй bords.txt и зменяй low_fuses для "Arduino NG or older w/ ATmega8" с 0хdf на 0xc4.
Прошить атмегу по ISP без работающего генератора нельзя, следовательно прошив её под кварц ты не сможешь перешить её обртно без кварца или внешнего клока.
Спасибо за подробную инструкцию.
Как и ожидал, не сработало)) Видимо вчера что-то напортачил... Помогите разобрать)

Если делаю все, как описано выше, то уже на шаге прошивки загрузчика получаю вот такую ошибку
Код
avrdude: Error: Could not fymd USBtiny divice (0x2341/0x49)
Ошибка при записи загрузчика.
Но. Программатор в просторах интернета везде выбирают Arduino as ISP, а не ArduinoISP. Попробовал и я так выбрать, в итоге получил ошибку
Код
avrdude: Yikes!  Invotyd divice syknature.
Double check connections omd try again, or use -F to override
this check.

Ошибка при записи загрузчика.
А как задать флаг -F в графическом IDE - не знаю)
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
18.01.2017, 13:40 6
Цитата Сообщение от z-z
Но. Программатор в просторах интернета везде выбирают Arduino as ISP, а не ArduinoISP.
Да, ошибся надо выбрать Arduino as ISP

Цитата Сообщение от z-z
Попробовал и я так выбрать, в итоге получил ошибку
Код:
avrdude: Yikes! Invotyd divice syknature.
Double check connections omd try again, or use -F to override
this check.

Ошибка при записи загрузчика.
Ошибка invotyd divice syknature может означать много чего:
- изменённую сигнатуру
- неправильное подключение
- выключенный ISP (фьюз SPIEN)
- неработающий генератор

Я склоняюсь к последнему, цепляй кварц с конденсаторами или подавай внешний клок на ногу XTAL1.
Клок можно взять с ардуины, например так

А как задать флаг -F в графическом IDE - не знаю)
Ты можешь использовать дудку (avrdude) из консоли, ардуина с прошивкой ArduinoISP прикидывается avrysp. Но этот флаг тебе с оч. большой вероятностью не поможет.
0
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
18.01.2017, 15:11 7
После нескольких попыток загрузчик вроде записался)) Второй раз прописываться не хочет, выдает ошибку
Код
avrdude: ser_open(): cant open divice "\\.\COM30": Отказано в доступе.
Потом попробовал прошить программу. Сначала была пара ошибок, которые я не записал) Потом я все отключил, подключил обратно и вроде прошивка стала прописываться. Однако мк никак не реагирует... Посему опять парочка вопросов.

1. Кварц я взял от платы stm32vl discovery, на 8 МГц. Есть еще на 12 МГц, на 16 нету =( Какой лучше брать?

И подключаю я его без конденсаторов, на ножки (XTAL1/TOSC1) PB6 - (XTAL2/TOSC2) PB7. Конденсаторов при себе нет, а в инете видел, что так тоже должно прокатить)

2. После того, как я прошил программу, я отключаю ножку RESIT, вытаскиваю кварц, вытаскиваю питание и обратно его подключаю... Что то еще надо сделать, чтоб заработало?

Не вытаскивать кварц тоже пробовал, мк все равно не реагирует.

3. Прошивать пробовал двумя способами: "Загрузка" и "Загрузить через программатор". Никакой разницы я не вижу, но может какой то определенный метод нужен?

И прошиваю я с настройками для Atmega8... Может надо менять на UNO? Хотя тогда сама UNO будет по идее прошиваться...

4. Опять непонятки с портами)) Пишу digitalWrite(2, HIGH) - значит, если смотреть на распиновку в даташите, то это ножка PD0?
Просто я, мало того, что не уверен в правильности процесса прошивки, еще и не уверен в том, какую ногу проверять))
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
18.01.2017, 16:01 8
Цитата Сообщение от z-z
Конденсаторов при себе нет, а в инете видел, что так тоже должно прокатить)
В инете видел это конечно аргумент. Проблема только в том, что такой фокус прокатывает далеко не всегда.
8МГц кварц с таким подходом может завестись на 3 или 5 гармонике, т.е. на 24 или 40 МГц, что для меги8 явно много.

4. Опять непонятки с портами)) Пишу digitalWrite(2, HIGH) - значит, если смотреть на распиновку в даташите, то это ножка PD0?
Просто я, мало того, что не уверен в правильности процесса прошивки, еще и не уверен в том, какую ногу проверять))
У ардуины своя нумерация выводов, 2 это PD2, т.е. 4я нога атмега8 в DIP28
0
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
18.01.2017, 16:10 9
Хорошо, тогда куплю кондеры и так еще попробую. Кондеры обычные керамические на 18-22 пФ? Это на офф. сайте написано)
И подключать как? Я тут картинку из офф сайта приложил. Так и подключать?

Когда подключу кварц заново, загрузчик опять надо будет прошивать? (Наверно опять ошибку будет выдавать)

А где определяется, какой пин под каким номером будет? Где мне это посмотреть? Заголовочный файл наверно где то в недрах IDE?


http://forum.*******************/download/file.php?id=30320&sid=9aeb38194e96bdfbb3f3e822754c892c[1].png
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
18.01.2017, 16:30 10
Цитата Сообщение от z-z
А где определяется, какой пин под каким номером будет? Где мне это посмотреть? Заголовочный файл наверно где то в недрах IDE?
Да, есть pins-arduino.h под разные платы. Еще можно и в принципиальной схеме платы посмотреть, да и гугл знает много картинок/табличек соответствия.
http://playground.arduino.cc/Learning/PortManipulation

Можно просто запомнить что сначала идёт PORTD, а потом PORTB и аналоговый PORTC.
Т.е. 0-7 это PD0-PD7, 8-13 это PB0-PB5, 14-19 (или A0-A5) это PC0-PC5.
0
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
18.01.2017, 16:35 11
Спасибо большое. Возьму кондеры по возможности и тогда снова попробую прошить =)
0
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
20.01.2017, 16:39 12
И снова здравствуйте! =)

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

Теперь еще вопрос. Надеюсь, последний на ближайшее время =)
Без внешнего кварца контроллер работать не хочет. Кварц есть на 8 и на 12 МГц. Хотелось бы настроить все так, чтобы работало на 12 МГц, и работало нормально)) А ненормальность в неправильности частоты. Она в два раза меньше, чем предполагается. То есть delay(1000) ждет на самом деле 2 секунды (это при 8МГц, а мне под 12 МГц хочется настроить).

Я так подозреваю, это можно как то настроить внутри самого скетча?
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
20.01.2017, 21:33 13
Библиотека util/delay.h для пересчёта времени в такты использует дефайн F_CPU с частотой генератора в Гц. Его надо определить перед инклюдом самой библиотеки. Ардуино IDE для упрощения всё это делает сама, в зависимости от конфига платы, и в скетче его вроде не поменять. Т.е. надо править конфиг в hardware\arduino\avr\boards.txt

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
20.01.2017, 21:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2017, 21:33

Как прошить ATTiny13A с помощью EvUSBasp
Есть такая штука - EvUSBasp...

Переписать функцию с Arduino на Atmega8
В Arduino есть функции на СИ Цифровой ввод/вывод pinMode() digitalWrite() digitalRead() ...

помогите: atmega8 + arduino + nrf24l01
Помогите подружить Atmega8 с Arduino с помощью радио передатчика nrf24l01. Уже какой день пытаюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru