Решил начать осваивать микроконтроллеры (далее МК) AVR. Думал что все просто раз и прошил микроконтроллера, но не так все просто как казалось на первый взгляд. В процессе прошивки контроллера возникли ряд трудностей  о которых я хочу описать в этом посте. Я сам начинающий в этом нелегком деле, поэтому если увидели ошибки или другие косяки то прошу сообщить.

В качестве среды разработки я взял Atmel Studio на мой взгляд она очень удобная и постоянно обновляется к тому же абсолютно бесплатная. Скачать ее можно с официального сайта Atmel. Тут думаю проблем никаких не возникнет, скачиваем устанавливаем запускаем и все и наслаждается кучей разных непонятных кнопочек)

Подопытным МК будет Atmega8. Для того чтобы ее прошить нужна будет ее распиновка выводов представлена ниже. Распиновку также можно посмотреть тут.  Нам нужно понимать куда подключать программатор куда подавать напряжение.

Распиновка микроконтроллера Atmega8

Далее нам необходимо определиться с программатором которым будем шить МК. Я взял USBasp программатор, самый простой программатор. Они бывают с разными разъемами, какой взять не принципиально. Главное правильно подключить выводы MOSI, MISO, RST, SCK а также питалово VCC и GND к микроконтроллеру. Также нужно установить под этот программатор драйвера, без них ПК просто не поймет что это за устройство такое мы подключили.  Ссылка на драйвера для программатора USBasp  приложена в конце статьи.

 

USBasp программатор и распиновка выводов

После того как мы выбрали программатор и МК нам нужно их соединить) Вот схема подключения программатора и микроконтроллера

Схема подключения программатора USBasp и микроконтроллера Atmega8

Создание проекта в Atmel Studio

Вывод AVCC подключать не обязательно, у меня камень прошивался спокойно и без этого провода. После того как мы подключили нашего подопытного и программатор. Приступаем к написанию программы и ее компиляции.

Запускам среду Atmel Studio и создаем новый проект.

Создание проекта в Atmel Studio

И выбираем в списке устройств наш камень Atmega8

Создание проекта в Atmel Studio, выбор микрокнтроллера

 

И пишем программу, в качестве примера возьмем код мигания светодиодом. Так же  вот есть проект мигалки на микроконтроллере с 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.

Расположение файла hex в папке проекта

Загрузка прошивки в микроконтроллер

Остается только залить этот файл в память прошиваемого микроконтроллера. Для этого я использовал программу Khazama AVR Programmer на мой взгляд очень удобная программа.

Для загрузки прошивки в МК делаем следующее:

  1. Запускаем программу и устанавливаем состояние fuse битов. Что такое фьюз биты мы говорили ранее. Для того чтобы установить их сначала нужно считать, для это жмем Command->Fuses and Lock Bits   и далее во всплывающем окне жмем Read All

Установка фьюз битов микроконтроллера

Тут выставляем нужные нам Fuse биты  Lock биты лучше пока не трогать если не знаете какой бит за что отвечает.

Нас интересуют биты CKSEL 0…3 они отвечают за выбор типа тактирования внешний кварц или внутренний RC генератор. В нашем случае частота 1 МГц и тактирование от внутреннего RC генератора. Поэтому пишем значение 0001.

 

Fuse биты CKSEL 0...3 отвечающие за настройку частоты тактирования

После того как выставили Fuse биты нажимаем кнопку Write All после чего биты установятся в МК.

Ну и последний этап это загружаем hex файл сначала в буфер программы и далее заливаем в микроконтроллер.

Запись прошивки в микроконтроллер

После загрузки прошивки, микроконтроллер автоматом запуститься и начнет мигать светодиодом, который подключен к порту  выводу порта C.

Полезные ссылки по проекту
Видео

Похожие записи

Память микроконтроллера. Виды памяти микроконтроллеров

Практически все современные микроконтроллеры имеют на своем борту 3 вида  памяти: Виды памяти микроконтроллеров память программ FLASH; оперативная память (ОЗУ) SRAM (Static RAM); ...

Светодиодная мигалка на микросхеме NE 555

Это простая схема двойного светодиодного мигающего сигнала. В качестве базовой схемы нестабильного мультивибратора используется таймер NE 555. Светодиоды включаются по очереди, частоту...

Схема полицейской мигалки на микроконтроллере

Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере...

Последовательный интерфейс I2C

Последовательный интерфейс I2C (также его обозначается как IIC) довольно популярный последовательный интерфейс. Свою популярность он получил за неплохую скорость передачи информации. В...

Последовательный периферийный интерфейс SPI

Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) — последовательный стандарт передачи данных. Предназначен для сопряжения микроконтроллеров и периферийных устройств. SPI...

Подключение кнопки к микроконтроллеру AVR

В это примере подключим и научимся обрабатывать события нажатия кнопок при помощи микроконтроллера AVR. Другими словами мониторить состояние кнопок, и при каких либо изменениях делать что...

Пишем свою первую программу на микроконтроллере AVR
  • 9
  • Во годный гайд, получилось с первого раза. Правда вот со фьюзами чуток застрял. Не понял как тактировать от внутреннего генератора.

      Staticvoid 22.04.2020 06:55

      Выставляем биты для того чтобы он тактировался от внутреннего RC генератора. Также можно от внешнего, но в этом случае нужно будет добавить резнонатор с конденсаторами.

    Roman 29.04.2020 19:48

    Вот с этим моментом не совсем понял, почему именно на 1 Мгц пишем а не 8 МГц
    #define F_CPU 1000000UL
    #endif

      Staticvoid 11.05.2020 13:23

      Можно и 8 МГц мы так частоту тактирования задаем.

    MichaelB 29.03.2021 08:02

    Вообще странно, а на фига надо другие программы и столько трудностей искать и копировать файл и т.д.?!
    Все делается двумя кликами из Атмел Студио7, в том числе загрузка программы в чип и установка фьюзов.
    Найдите кнопку с молнией и изучите что она делает.

    "Khazama AVR Programmer" на фиг не нужен если пользуете Атмел Студию.

    MichaelB 29.03.2021 08:09

    Атмега Студио и Bootloader грузит безо всякой помощи других программ. И кстати может программировать Ардуино платы без Ардуино программы, результат намного более оптимальный меньшего размера код. Кстати я использую плату Ардуино с Атмега8А кристаллом также работает как и с Амега328Р, т.к. из одной серии.

    sergeym 18.07.2021 13:42

    Здравствуйте !   В программирование я начинающий.  С помощью программатора USBASP и программы AVRdude_prog3.3 нужно прошить ATmega88, которая уже запаяна на плате эл-устройства и есть своё питание. На плате эл-устройства где запаянна ATmega88 обязательно включать для неё питание, или нет, так понял что при прошивки питание подаётся с программатора.

      Staticvoid 19.08.2021 16:46

      Добрый день! Ну как я понимаю питание подавать не обязательно, а вот минусовой провод программатора соедините с минусом платы.

Только полноправные пользователи могут оставлять комментарии. Войдите , пожалуйста.