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 с адаптером можно здесь USBASP USBISP 3.3 с адаптером

 

 

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

AVR Atmega 328p Pro Mini

 

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

AVR Atmega 328p Pro Mini

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

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

*