AVR УРОК 38. Atmega 328p Pro Mini

 

 

 

    Урок 38

    Atmega 328p Pro Mini

 

 

Сегодня мы познакомимся поближе с интересной отладочной платой, выполненной на базе микроконтроллера  Atmega 328p. А наибольший интерес у программистов микроконтроллеров AVR данная плата вызвала тем, что помимо того, что контроллер здесь не слабый, но, самое главное, стоит она сущие копейки. Я, например, приобретал её всего лишь за 2,7 $. В видеоверсии данного урока я описании дам ссылку на распаковку и первоначальное тестирование данной платы, а также и на продавца, у которого я её приобретал.

По данной плате есть немало видеотестов, но почему-то все они практически выполнены с применением в качестве программатора переходника USART, и, самое главное, программирование происходит посредством программы для разработки ПО для плат Arduino.

Мы же пойдём другим путём и применим данную плату уже как полноценную отладочную плату для создания приложений под управлением привычной для нас среды программирования Atmel Studio. Соттветственно, в качестве программатора мы также возьмём привычный нам народный программатор, который мы применяем во всех наших занятиях и подключим его к шине SPI.

Я думаю, будет лишним перечисление всех достоинств контроллера Atmega328p по сравнению с контроллером Atmega 8A. Здесь и оперативной памяти больше и памяти под прошивку больше, и также здесь две шины USART по сравнению с одной в восьмой серии.

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

 

image01

 

Теперь подключим программатор Для подключения программатора я спаял вот такой переходничок

 

image02

 

Распиновка нашей платы совпадает со стандартом Arduino UNO R3. Приводить я её здесь не буду во избежание нарушения прав. Найти данную распиновку не представляет никаких трудностей. Согласно распиновки разъём к плате подключаем следующим образом:

 

AVR ISP — ATMEGA328
VCC-VCC
GND-GND
RESET-RST
MOSI-11
MISO-12
SCK-13

 

Получится вот так

 

image03

 

Подключим к разъёму программатор и проверим обнаружение платы. Для этого запустим программу avrdude, выберем там контроллер ATmega328P и нажмем кнопку "чтение". Программатор и контроллер должны будут обнаружиться и должны будут считаться калибровочные ячейки

 

image07

 

Также считаем фьюзы, чтобы потом установить подобные в протеусе для корректной работы эмуляции, ну и также для того, какие именно фьюзы надо и куда устанавливать, а то ведь фьюзы — это дело такое… Для этого переходим на закладку "Fuses" и жмем там кнопку "Чтение". После этого фьюзы расставятся так, как они уже выставлены в контроллере

 

image08

 

Теперь также подключим для тестирования 10 светодиодов. У меня, как вы знаете из моих уроков, есть 10-диодная матрица. Не забываем про токоограничивающие резисторы. Так как я данную матрицу использую ещё в тестах на контроллерах stm32, в которых граничный ток портов ниже, то резисторы там установлены на 680 ом. Менять я их не стал, светодиоды работают и с ними, возможно только светятся не так ярко, но это не страшно. Вот такая вот плата с матрицей

 

image04

 

К отладочной плате светодиоды мы подключим следующим образом (нажмите на картинку для увеличения изображения)

 

image05_0500

 

Согласно стандарту 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);

}

 

Соберём код, перейдём сначала в протеус. Схему я уже показывал, файл протеуса будет в архиве вместе с проектом для студии. Добавим прошивку в настройики проекта в протеусе и настроим там микроконтроллер следующим образом:

 

image06

 

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

Теперь вернёмся в проект, так как программировать микроконтроллер мы будем опять напрямую из 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 2.0

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

AVR Atmega 328p Pro Mini

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*