Найти тему
Hex Club

AVR 0-Series или Arduino Nano Every

Для тех кому вечно скользкий пол виноват или не хватает памяти в ATmega328 разработчики Arduino приготовили неплохой сюрприз, а именно они предложили замену для целого ряда Arduino пересадив его на относительно новый микроконтроллер ATmega4809. Поэтому сегодня мы попытаемся разобраться в том, что это за МК, что он имеет на борту и попробуем сравнить его с ATmega328 который сейчас так распространен в мире Алрдуинщиков.

Disclaimer

Микроконтроллеры будут сравниваться поверхностно без подробного вникания в суть нововведений, дабы не уничтожить мозг начинающего радиолюбителя. Статья носит исключительно ознакомительную цель, и не является призывом к действию, в частности переезду на новые мк. И да, я в курсе что есть ATmega3209 но новая нано сделана именно на 4809, а сравниваем мы не МК, а платы ардуино.

Относительно недавно микрочип порадовало всех своей новой продукцией, которая получила общее название 0-Series. В список МК этой серии вошел целый ряд, притом не только мега семейства, но и tiny тоже. Любителей ардуино больше всего будет интересовать ATmega4809, потому что именно на этом мк построена новая Arduino Nano Every. Чем же нас может порадовать новая «нанка»? Разработчики заявляют полную совместимость с Nano 328, а прибавившиеся возможности просто нельзя не заметить.

Сначала попробуем разобрать не явные преимущества.

Nano ATmega4909 на фоне Nano ATmega328. Это новые фичи в самом ядре, производитель обещает нам повышенную производительность. В частности это будет достигнуто наличием аппаратного умножителя, лютый такой костыль над AVR. По сути это аппаратно реализованная схема умножения двух чисел, и судя по источникам умножать она может и целые и дробные числа, а значит так же и делить способна (умножение на 0.1 например). Кто не в курсе, архитектура AVR не предусматривает наличие ассемблерных инструкций для деления и умножения, и при программировании на С++ компилятор делает специальную вставку, в которой реализует умножение и деление программно, что в свою очередь кушает немного памяти и в целом сказывается на быстродействии.

Двухуровневый контроллер прерываний, скорее всего на первом уровне контроллер прерываний будет отсеивать прерывания по приоритету, а на втором разбираться с равноприоритетными прерываниями. А фраза «All pins can be used for external interrupt, where pins Px2 and Px6 of each port have full asynchronous detection.» (стр. нотация 2 датащита) как бы намекает на большое количество приятных источников этого самого прерывания. А так же возможность обрабатывать большое кол-во внешних аппаратных прерываний, что круто.

А теперь о более явном.

В частности на Every мы получаем 48кбайт flash памяти программ, против 32к байт на версии с ATmega328. Трехкратный прирост ОЗУ, а именно 6к байт против 2-х. EEPROM к сожалению подкачал, 256 байт, против 1к байт. Но я думаю, что при грамотном использовании и этого хватит. К тому же в отличии от памяти программ и ОЗУ EEPROM всегда можно подключить внешний по I2C шине.

Что касается рабочей частоты, заявлено 20МГц, против 16Мгц Arduino Nano 328. Это тоже радостная новость, ведь на платах Arduino по умолчанию находится 16МГц кварц, и все конфигурации в IDE рассчитаны именно под него, несмотря на то что ATmega328 способна работать и на 20МГц. Сделано это было скорее всего ради совместимости с ATmega8 под которую были разработана первые версии Ардуино.

Помимо прочего в отличии от 328 наны, в новой, благодаря ATmega4809, у нас будет целых 5 16-ти битных таймера, что не может ни радовать, хотя отсутствие 8-ми битного таймера в 8-ми битном МК несколько сомнительная ситуация. Но зато измерять временные промежутки теперь можно с большей точностью.

А вот с интерфейсами есть некоторые загвоздки. Микроконтроллер располагает SPI и I2C которые конечно были выведены, но помимо них, он так же имеет целых 4 USART.

USART0 расположен на пинах 44, 45, 46, 47, хотя подписи такой нет, и в распиновке об этом не говорится.

USART1 расположен на 16, 17, 18, 19 пинах, и выведен на плату как UART без 19 пина, 19 пин 1,XDIR. Это является альтернативный вариант расположения пинов, основной вовсе не выведен.

USART2 можно получить на пинах 38, 39 мк, используя альтернативное расположение, но нужно убедиться что не возникнет проблем с 40-ым пином, который заявлен как 2,XCK, и по совместительству является reset.

USART3 расположился на выводах 4, 5, 6, 7 МК, но 7-ой не выведен, а именно 3,XDIR, что в целом не критично, однако в альтернативном своем расположении он используется для связи с ПК, и его применение наложит некоторые ограничения.

Исходя из выше сказанного, мы получаем, что большинство из USART не доступно в полной мере, а на плату выведен как UART. Для других придется покопаться в регистрах, что бы включить его альтернативное расположение. Ко всему прочему, я считаю что разрабы решили и лишних юартов нас лишить, и вероятно не добавят их поддержку в Arduino IDE. Думаю что со временем эта ситуация изменится, не без помощи народных умельцев, но сам факт этого печалит.

К сожалению на этом печальные моменты не закончились. Разработчики видимо очень хотели что бы их новая плата была ну прям 1 в 1 старая, и поэтому решили не выводить еще 8 каналов АЦП, ага именно 8. Всего у ATmega4809 в 48 пиновом корпусе, который и представлен в оригинальной схеме, имеется 16 АЦП каналов, но выведено лишь 8 из них. Разрядность АЦП обоих плат совпадает (10 бит). Опять же ШИМ, на сайте микрочим заявлено 11 выходов с поддержкой ШИМ, хотя Nana Every имеет лишь 6, хотя цифровых выходов более чем достаточно, что бы использовать другие выходы с ШИМ, и сверх объективных причин не добавить нам немного ШИМ-а я не вижу. А так же куча других цифровых пинов, которые так же не выведены, в общей сложности я насчитал 13 не подключенных пинов.

И самое обидное на сегодня.

ATmega4809 одна из первых получила новую для AVR фичу, а именно CCL. Говоря простыми словами это небольшая ПЛИС внутри МК, что не может не радовать. Представлено это все в виде таблиц истинности которые могут быть сконфигурированы как нам захочется и следовательно мы получаем целых 3 логические функции с числом входных сигналов до 3-х. Однако 2 из 3 не выведены, что так же наталкивает на мысль, что поддержки в IDE можно не ожидать.

Что тут сказать? Добро пожаловать в мир кроссплатформенности и совместимости.

А теперь о ценах.
Стоимость МК на момент публикации статьи, взятая с сайта Microchip

ATmega4809

-2

ATmega328

-3

В заключении стоит отметить, что поскольку плата Arduino Nano Every стоит неадекватные $9.9, скорее всего большая часть ардуинщиков будет ждать ее китайские клоны. Остается только надеяться на то, что помимо адекватной цены, Китайские братья не пойдут по накатанному пути урезания возможностей МК, и все такие выведут желанные дополнительные пины. Пускай с богу, снизу, сверху, как угодно, но уже будет лучше. Хорош Every или нет, решать вам самим. А пока что, я бы рекомендовал поюзать этот чип, самостоятельно разведя плату и выведя все что душе угодно, и в последствии если появится такое желание, залить в нее бутлоудер и сделать полноценную Arduino Nano Every.

Сегодня я занимался анализированием следующий документов

Датащит ATmega4809 44pin
Датащит ATmega328
Страница с официального сайта посвященная
Arduino Nano Every
Файл со схемой Arduino Nano Every

На этом у меня все, спасибо за внимание и удачи в разработке.

А больше статей по электронике и программированию вы можете прочесть на Hex Club.