Обзор ATmega328P
ATmega328P Высокопроизводительный 8-разрядный микроконтроллер Microchip picoPower® на базе RISC AVR® сочетает в себе 32-килобайтную флэш-память ISP с возможностями чтения во время записи, 1 KB EEPROM, 2 KB SRAM, 23 линии ввода / вывода общего назначения, 32 рабочих регистра общего назначения, три гибких таймера / счетчика с режимами сравнения, внутренние и внешние прерывания, последовательный программируемый USART, байтовый двухпроводной последовательный интерфейс, SPI последовательный порт, 6-канальный 10-разрядный аналого-цифровой преобразователь (8 каналов в пакетах TQFP и QFN / MLF), программируемый сторожевой таймер с внутренним генератором и пять программно выбираемых режимов энергосбережения. Устройство работает в диапазоне 1,8-5,5 V.
Характеристики ATmega328P
Параметр | Значение |
---|---|
Тип памяти | Flash |
Размер памяти (для записи программ) | 32 KB |
Скорость CPU | 20 MIPS/DMIPS (20 МГц) |
SRAM | 2 KB |
EEPROM | 1 KB |
ШИМ (PWM) | 6 |
Таймеры | 2 x 8-bit, 1 x 16-bit |
Диапазон температур | -40 - 85 °C |
Диапазон рабочего напряжения | 1.8 - 5.5 V |
Цифровых контактов | 6 |
Аналоговых контактов | 6 |
SPI | 2 |
I2C | 1 |
UART | 1 |
MIPS (Millions of Instructions Per Second) - миллион команд в секунду.
Схема микроконтроллера ATmega328P
Прошивка ATmega328P с помощью Arduino
ATmega328P можно прошить с помощью UART или SPI. В данной статье будет рассматриваться прошивка через SPI, при таком подходе можно не использовать загрузчик.
Схема подключения Arduino к ATmega328P (для прошивки)
Arduino | ATmega328P |
---|---|
GND | GND |
3.3 V | Vcc |
13 | PB5 (SCK) |
12 | PB4 (MISO) |
11 | PB3 (MOSI) |
10 | PC6 (RESET) |
Дополнительно для прошивки ATmega328P нужно добавить конденсатор на 10 мкФ. Более длинный (положительный) контакт конденсатора подключите к выводу RESET микроконтроллера, короткий (отрицательный) контакт конденсатора подключите к выводу GND.
Подготовка Arduino как ISP-программатора
- Подключить Arduino к ПК (далее будет использоваться Arduino Pro Mini);
- Запустить Arduino IDE;
- Загрузить ArduinoISP скетч (Файл -> Примеры -> 11.ArduinoISP -> ArduinoISP);
- Выбрать плату Arduino, ту которую используете (Инструменты -> Плата -> Arduino AVR Boards -> Arduino Pro Mini);
- Выбрать используемый порт (Инструменты -> Порт);
- Нажать в панели управления Arduino IDE кнопку “Загрузка”;
- После успешной загрузки скетча, Arduino может использоваться как ISP-программатор.
Установка загрузчика в ATmega328P
- Добавить поддержку ATmega328P в Arduino IDE:
- Arduino -> Preferences… -> Дополнительные ссылки для менеджера плат -> Вставить
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
- Инструменты -> Плата -> Менеджер плат -> Ввести
MiniCore
-> Установить
- Выбрать плату ATmega328P (Инструменты -> Плата -> MiniCore -> ATmega328)
- Настроить плату:
- Инструменты -> Clock -> Internal 8 MHz;
- Инструменты -> BOD -> BOD 1.8V;
- Инструменты -> EEPROM -> EEPROM retained;
- Инструменты -> Compiler LTO -> LTO disabled;
- Инструменты -> Bootloader -> No bootloader;
- Выбрать программатор (Инструменты -> Программатор -> Arduino as ISP (MiniCore));
- Записать загрузчик (Инструменты -> Записать загрузчик);
- В нижней части Arduino IDE появиться надпись “Запись загрузчика завершена”.
Загрузка скетча в ATmega328P
- Создайте новый скетч и скопируйте в него содержимое ниже;
- Выбрать плату ATmega328 (и если нужно настроить ее);
- Выбрать программатор (Инструменты -> Программатор -> Arduino as ISP (MiniCore));
// Мигаем светодиодом на контакте PB1 у ATmega328P
void setup() {
pinMode(PIN_PB1, OUTPUT);
}
void loop() {
digitalWrite(PIN_PB1, HIGH);
delay(1000);
digitalWrite(PIN_PB1, LOW);
delay(1000);
}
- Загрузка скетча (Скетч -> Загрузить через программатор).
Минимальная обвязка ATmega328P
- Используйте стабилизатор питания для питания ATmega328P, например на 3.3 V. Положительный вывод подключите к VCC, а отрицательный к GND;
- Соедините выводы VCC и AVCC у микроконтроллера;
- Соедините выводы GND у микроконтроллера.
- (Не обязательно) Добавить два керамических конденсатора на 100 нФ между ножками VCC - GND и AVCC - GND.
- (Не обязательно) Между RESET и VCC установить резистор на 10 кОм (для защиты от непреднамеренного сброса).