Содержание
Решил начать осваивать микроконтроллеры (далее МК) AVR. Думал что все просто раз и прошил микроконтроллера, но не так все просто как казалось на первый взгляд. В процессе прошивки контроллера возникли ряд трудностей о которых я хочу описать в этом посте. Я сам начинающий в этом нелегком деле, поэтому если увидели ошибки или другие косяки то прошу сообщить.
В качестве среды разработки я взял Atmel Studio на мой взгляд она очень удобная и постоянно обновляется к тому же абсолютно бесплатная. Скачать ее можно с официального сайта Atmel. Тут думаю проблем никаких не возникнет, скачиваем устанавливаем запускаем и все и наслаждается кучей разных непонятных кнопочек)
Подопытным МК будет Atmega8. Для того чтобы ее прошить нужна будет ее распиновка выводов представлена ниже. Распиновку также можно посмотреть тут. Нам нужно понимать куда подключать программатор куда подавать напряжение.
Далее нам необходимо определиться с программатором которым будем шить МК. Я взял USBasp программатор, самый простой программатор. Они бывают с разными разъемами, какой взять не принципиально. Главное правильно подключить выводы MOSI, MISO, RST, SCK а также питалово VCC и GND к микроконтроллеру. Также нужно установить под этот программатор драйвера, без них ПК просто не поймет что это за устройство такое мы подключили. Ссылка на драйвера для программатора USBasp приложена в конце статьи.
После того как мы выбрали программатор и МК нам нужно их соединить) Вот схема подключения программатора и микроконтроллера
Создание проекта в Atmel Studio
Вывод AVCC подключать не обязательно, у меня камень прошивался спокойно и без этого провода. После того как мы подключили нашего подопытного и программатор. Приступаем к написанию программы и ее компиляции.
Запускам среду Atmel Studio и создаем новый проект.
И выбираем в списке устройств наш камень Atmega8
И пишем программу, в качестве примера возьмем код мигания светодиодом. Так же вот есть проект мигалки на микроконтроллере с 4-мя светодиодами.
Код программы в Atmel Studio
/*
* LED blink.c
*
* Created: 06.04.2020 21:31:26
* Author : Mudji
*/
#ifndef F_CPU
#define F_CPU 1000000UL // 1 MHz clock speed
#endif
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRC = 0xFF; //Nakes PORTC as Output
while(1) //infinite loop
{
PORTC = 0xFF; //Turns ON All LEDs
_delay_ms(1000); //1 second delay
PORTC= 0x00; //Turns OFF All LEDs
_delay_ms(1000); //1 second delay
}
}
Следует обратить внимание вот на первые 2 две сточки:
#ifndef F_CPU
#define F_CPU 1000000UL // 1 MHz clock speed
#endif
тут мы определяем частоту тактирования микроконтроллера. В нашем случаем это 1 МГц. И запоминаем это значение — оно нам еще пригодится.
Компиляция программы
Далее необходимо откомпилировать программу, для этого нажимаем Build -> Build Solution или просто нажимаем клавишу F7 . Если никаких ошибок не было то программа откомпилируется и в консоле появится сообщение что все у нас гуд нет никаких варнингов и ошибок.
И так поздравляю Вас с успешной компиляции программы. Далее нам нужно найти файл hex который появляется после компиляции программы. Его можно найти в папке с проектом, лежит он в папке , в моем случае папка проект Led blink и там в папке Debug находится наш долгожданный файл hex.
Загрузка прошивки в микроконтроллер
Остается только залить этот файл в память прошиваемого микроконтроллера. Для этого я использовал программу Khazama AVR Programmer на мой взгляд очень удобная программа.
Для загрузки прошивки в МК делаем следующее:
- Запускаем программу и устанавливаем состояние fuse битов. Что такое фьюз биты мы говорили ранее. Для того чтобы установить их сначала нужно считать, для это жмем Command->Fuses and Lock Bits и далее во всплывающем окне жмем Read All
Тут выставляем нужные нам Fuse биты Lock биты лучше пока не трогать если не знаете какой бит за что отвечает.
Нас интересуют биты CKSEL 0…3 они отвечают за выбор типа тактирования внешний кварц или внутренний RC генератор. В нашем случае частота 1 МГц и тактирование от внутреннего RC генератора. Поэтому пишем значение 0001.
После того как выставили Fuse биты нажимаем кнопку Write All после чего биты установятся в МК.
Ну и последний этап это загружаем hex файл сначала в буфер программы и далее заливаем в микроконтроллер.
После загрузки прошивки, микроконтроллер автоматом запуститься и начнет мигать светодиодом, который подключен к порту выводу порта C.
Скачать исходники
Полезные ссылки по проекту
Видео
Похожие записи
Практически все современные микроконтроллеры имеют на своем борту 3 вида памяти: Виды памяти микроконтроллеров память программ FLASH; оперативная память (ОЗУ) SRAM (Static RAM); ...
Это простая схема двойного светодиодного мигающего сигнала. В качестве базовой схемы нестабильного мультивибратора используется таймер NE 555. Светодиоды включаются по очереди, частоту...
Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере...
Последовательный интерфейс I2C (также его обозначается как IIC) довольно популярный последовательный интерфейс. Свою популярность он получил за неплохую скорость передачи информации. В...
Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) — последовательный стандарт передачи данных. Предназначен для сопряжения микроконтроллеров и периферийных устройств. SPI...
В это примере подключим и научимся обрабатывать события нажатия кнопок при помощи микроконтроллера AVR. Другими словами мониторить состояние кнопок, и при каких либо изменениях делать что...
Пишем свою первую программу на микроконтроллере AVR
Во годный гайд, получилось с первого раза. Правда вот со фьюзами чуток застрял. Не понял как тактировать от внутреннего генератора.
Выставляем биты для того чтобы он тактировался от внутреннего RC генератора. Также можно от внешнего, но в этом случае нужно будет добавить резнонатор с конденсаторами.
Вот с этим моментом не совсем понял, почему именно на 1 Мгц пишем а не 8 МГц
#define F_CPU 1000000UL
#endif
Можно и 8 МГц мы так частоту тактирования задаем.
Вообще странно, а на фига надо другие программы и столько трудностей искать и копировать файл и т.д.?!
Все делается двумя кликами из Атмел Студио7, в том числе загрузка программы в чип и установка фьюзов.
Найдите кнопку с молнией и изучите что она делает.
"Khazama AVR Programmer" на фиг не нужен если пользуете Атмел Студию.
Атмега Студио и Bootloader грузит безо всякой помощи других программ. И кстати может программировать Ардуино платы без Ардуино программы, результат намного более оптимальный меньшего размера код. Кстати я использую плату Ардуино с Атмега8А кристаллом также работает как и с Амега328Р, т.к. из одной серии.
Спасибо за информацию)
Здравствуйте ! В программирование я начинающий. С помощью программатора USBASP и программы AVRdude_prog3.3 нужно прошить ATmega88, которая уже запаяна на плате эл-устройства и есть своё питание. На плате эл-устройства где запаянна ATmega88 обязательно включать для неё питание, или нет, так понял что при прошивки питание подаётся с программатора.
Добрый день! Ну как я понимаю питание подавать не обязательно, а вот минусовой провод программатора соедините с минусом платы.
Пожалуйста, войдите в аккаунт или зарегистрируйтесь на сайте
Сообщить об ошибке
Если вы нашли ошибку в статье, или на сайте. Можете сообщить об этом воспользовавшись формой.
Спасибо! Ваше сообщение отправлено.
Администрация сайта свяжется с Вами в ближайшее время.
Скачать книгу