Урок 38
Atmega 328p Pro Mini
Сегодня мы познакомимся поближе с интересной отладочной платой, выполненной на базе микроконтроллера Atmega 328p. А наибольший интерес у программистов микроконтроллеров AVR данная плата вызвала тем, что помимо того, что контроллер здесь не слабый, но, самое главное, стоит она сущие копейки. Я, например, приобретал её всего лишь за 2,7 $. В видеоверсии данного урока я описании дам ссылку на распаковку и первоначальное тестирование данной платы, а также и на продавца, у которого я её приобретал.
По данной плате есть немало видеотестов, но почему-то все они практически выполнены с применением в качестве программатора переходника USART, и, самое главное, программирование происходит посредством программы для разработки ПО для плат Arduino.
Мы же пойдём другим путём и применим данную плату уже как полноценную отладочную плату для создания приложений под управлением привычной для нас среды программирования Atmel Studio. Соттветственно, в качестве программатора мы также возьмём привычный нам народный программатор, который мы применяем во всех наших занятиях и подключим его к шине SPI.
Я думаю, будет лишним перечисление всех достоинств контроллера Atmega328p по сравнению с контроллером Atmega 8A. Здесь и оперативной памяти больше и памяти под прошивку больше, и также здесь две шины USART по сравнению с одной в восьмой серии.
Поэтому давайте не будем себя томить и приступим к делу. Начнём с того, что мы закрепим надёжно нашу плату на беспаечной макетной плате
Теперь подключим программатор Для подключения программатора я спаял вот такой переходничок
Распиновка нашей платы совпадает со стандартом Arduino UNO R3. Приводить я её здесь не буду во избежание нарушения прав. Найти данную распиновку не представляет никаких трудностей. Согласно распиновки разъём к плате подключаем следующим образом:
AVR ISP — ATMEGA328
VCC-VCC
GND-GND
RESET-RST
MOSI-11
MISO-12
SCK-13
Получится вот так
Подключим к разъёму программатор и проверим обнаружение платы. Для этого запустим программу avrdude, выберем там контроллер ATmega328P и нажмем кнопку «чтение». Программатор и контроллер должны будут обнаружиться и должны будут считаться калибровочные ячейки
Также считаем фьюзы, чтобы потом установить подобные в протеусе для корректной работы эмуляции, ну и также для того, какие именно фьюзы надо и куда устанавливать, а то ведь фьюзы — это дело такое… Для этого переходим на закладку «Fuses» и жмем там кнопку «Чтение». После этого фьюзы расставятся так, как они уже выставлены в контроллере
Теперь также подключим для тестирования 10 светодиодов. У меня, как вы знаете из моих уроков, есть 10-диодная матрица. Не забываем про токоограничивающие резисторы. Так как я данную матрицу использую ещё в тестах на контроллерах stm32, в которых граничный ток портов ниже, то резисторы там установлены на 680 ом. Менять я их не стал, светодиоды работают и с ними, возможно только светятся не так ярко, но это не страшно. Вот такая вот плата с матрицей
К отладочной плате светодиоды мы подключим следующим образом (нажмите на картинку для увеличения изображения)
Согласно стандарту Arduino соединения получатся следующие
Светодиоды — отладочная плата
GND — GMD
D1 — 2
D2 — 3
D3 — 4
D4 — 5
D5 — 6
D6 — 7
D7 — A0
D8 — A1
D9 — A2
D10 — A3
Теперь создадим проект в Atmel Studio 7 стандартным образом, выбрав в качестве контроллера Atmega 328P, Назовём проект LIGHTS.
Добавим в файл main.c объявление частоты процессора и библиотеки для задержки
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
В функции main() настроим порты
int main(void)
{
DDRD |= 0b11111100;
PORTD &= ~(0b11111100);
DDRC |= 0b00001111;
PORTC &= ~(0b00001111);
while(1)
Также добавим код в бесконечный цикл
while(1)
{
PORTD |= 0b00000100;
_delay_ms(100);
PORTD &= ~(0b00000100);
PORTD |= 0b00001000;
_delay_ms(100);
PORTD &= ~(0b00001000);
PORTD |= 0b00010000;
_delay_ms(100);
PORTD &= ~(0b00010000);
PORTD |= 0b00100000;
_delay_ms(100);
PORTD &= ~(0b00100000);
PORTD |= 0b01000000;
_delay_ms(100);
PORTD &= ~(0b01000000);
PORTD |= 0b10000000;
_delay_ms(100);
PORTD &= ~(0b10000000);
PORTC |= 0b00000001;
_delay_ms(100);
PORTC &= ~(0b00000001);
PORTC |= 0b00000010;
_delay_ms(100);
PORTC &= ~(0b00000010);
PORTC |= 0b00000100;
_delay_ms(100);
PORTC &= ~(0b00000100);
PORTC |= 0b00001000;
_delay_ms(100);
PORTC &= ~(0b00001000);
}
Соберём код, перейдём сначала в протеус. Схему я уже показывал, файл протеуса будет в архиве вместе с проектом для студии. Добавим прошивку в настройики проекта в протеусе и настроим там микроконтроллер следующим образом:
Запустим проект. Огни в матрице должны побежать.
Теперь вернёмся в проект, так как программировать микроконтроллер мы будем опять напрямую из Atmel Studio.
Только для 328-го контроллера мы добавим другую строку в сервис. Зайдём таким же образом, как и на прошлом занятии, в меню в пункт «Сервис -> Новые инструменты». добавим там ещё один пункт, назовем его Atmega 328p, только строчку с параметрами добавим следующую
«-p m328p -c usbasp -P usb -U flash:w:$(ProjectDir)Debug$(TargetName).hex:a»
Добавляем, конечно, без кавычек. Теперь Нажимаем на наш новый пункт Сервис -> Atmega 328p и таким образом контроллер наш должен прошиться, а светодиоды по очереди будут светиться, создавая эффект бегущего огня.
Предыдущий урок Программирование МК AVR Следующий урок
Приобрести плату Atmega 328p Pro Mini можно здесь.
Приобрести программатор USBASP USBISP с адаптером можно здесь USBASP USBISP 3.3 с адаптером
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
Добавить комментарий