Найти тему
Исходный Код

Первая программа

Оглавление

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

Предисловие

В мире есть множество микроконтроллеров. Каждый из них по своему уникален. У одних больше портов, у других больше памяти, у третьих больше выходов и так далее. В качестве своего первого микроконтроллера я выбрал ATmega8A.

Mикроконтроллер ATmega8A
Mикроконтроллер ATmega8A

Общие характеристики микроконтроллера ATmega8A

ATmega8A имеет:

Память: 8 КБ внутренней флэш-памяти для программного кода и 1 КБ статической оперативной памяти (SRAM) для хранения данных.

Частота: может работать на частоте от 1 до 16 МГц.

Периферийные устройства: микроконтроллер оборудован разнообразными периферийными устройствами, включая аналогово-цифровые преобразователи (ADC), таймеры/счетчики, интерфейсы UART (USART), SPI и I2C для связи со внешними устройствами.

Напряжение питания: может работать при напряжении питания от 2,7 В до 5,5 В, что делает его гибким в выборе источника питания.

Низкое энергопотребление: ATmega8A обладает различными способами снижения энергопотребления, что полезно для батарейных устройств.

Размер корпуса: микроконтроллер доступен в разных корпусах (включая DIP и SMD) что облегчает его использование в разных проектах.

Программирование

Писать код я буду в программе "Atmel Studio 6.2", для того чтобы загрузить код в микроконтроллер вам нужен будет программатор (я использую USBASP V2.0) и программа, которая передаст код в программатор (я использую "AVRDUDE_PROG 3.3"). Если нету программатора или микроконтроллера, можно использовать "Proteus".

И так, как я говорил в начале мы напишем простую мигалку. На выходе PORTB 0 (PB0) будет мигать светодиод с интервалом в 1 секунду. Первым делом нам нужно создать проект, открываем Atmel Studio, в верхнем левом углу File->New->Project. В открытом окне выбираем "GCC Executable Project", дальше вводим название на английском (по умолчанию стоит GccApplication1) и выбираем место сохранения проекта. После жмем OK. В открывшемся окне ищем ATmega8A и, выбрав его, жмем ОК.

Перед вами откроется проект из которого нужно удалить все то, что написано зеленым цветом. Далее в самом верху мы пишем #define F_CPU 1000000 и на следующей строчке #include <util/delay.h>. В итоге получаем основу для всех следующих программ.

выглядеть должно вот так
выглядеть должно вот так

Разберем что тут написано.

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

Библиотека <avr/io.h> - это основная библиотека, <util/delay.h> - библиотека задержек для которой нужна рабочая чистота микроконтроллера, задаваемая строчкой кода #define F_CPU 1000000 в герцах (в данном случае 1 000 000 герц или 1 МГц).

Перед надписью while(1) мы будем производить всю настройку микроконтроллера. (определять порты, вводить переменные, писать функции и т.д.). В фигурных скобках функции while() мы будем работать с выводами микроконтроллера (это основное тело программы).

Первым делом настраиваем PORTB на выход (по умолчанию все порты настроены на вход. Если порт настроен на выход то он будет отдавать информацию, а если на вход - принимать), для этого у регистра DDRB настраиваем первый бит на 1, в двоичной системе исчисления это будет выглядеть 0b00000001 (в программировании счет идет в обратную сторону 76543210) .

DDRB = 0b00000001;

ставим ; как знак окончания строчки.

аналогично выводим на PB0 0 (не забываем про ; ).

PORTB = 0b00000000;

В основном теле программы мы пишем следующе

PORTB = 0b0000001;

_delay_ms(1000);

PORTB = 0b0000000;

_delay_ms(1000);

Разбираем написанное, сначала на PB0 мы подаем 1, затем ждем 1 секунду

(_delay_ms(); это пауза, задающая целым числом, где 1000 будет 1 секунда, 2000 2 секунды и т.д. ), далее подаем на PB0 0 и снова ждем 1 секунду. Программа написана, она будет выполнятся по кругу.

Полный код программы

полный код программы
полный код программы

Жмем F7 и если ошибок не допущено компилятор выдаст следующе сообщение

-5

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

Если все правильно то продолжаем. Открыв "AVRDUDE_PROG 3.3" и подключив микроконтроллер к программатору по указанной ниже схеме, загружаем файл с расширением .hex в программу, а затем и в микроконтроллер.

подключение ATmega8A к программатору usbasp
подключение ATmega8A к программатору usbasp

Если же вы собираете в "Proteus" то вам нужно тот же самый файл (расширением .hex) загрузить в свойства микроконтроллера и нажать ОК.

свойства ATmega8A в "Proteus"
свойства ATmega8A в "Proteus"

Нажимаем зеленый треугольник в нижнем левом углу и наслаждаемся первым своим написанным кодом)

Схема проекта

-8

Ссылки

Atmel Studio 6.2 - http://theatmel.ru

AVRDUDE_PROG 3.3 - http://www.yourdevice.net

Проект - https://disk.yandex.com.am/d/leVU4BOnfgMomQ