Если вы относитесь к группе микроконтроллеров Atmel, скорее всего, если вы добавляете некоторую степень автоматизации в свой электронный проект, вы слышали о популярном микроконтроллере ATtiny85, выпущенном еще в 2005 году (кто бы мог подумать!).

Встречается в различных проектах, от довольно сложного программатора USBtinyISP (недорогой программатор ISP) до простых драйверов светодиодных лент NeoPixel и некоторых более впечатляющих, таких как пульсоксиметры. Если ваш дизайн не требует большого количества операций ввода-вывода, велика вероятность, что вы воспользуетесь одним из них. Потому что давайте посмотрим правде в глаза, в Интернете есть масса ресурсов, а устройство довольно недорогое; и, как и в случае с любым другим электронным проектом, весьма вероятно, что вы столкнетесь с проблемой при создании своего гаджета, будь то неожиданное короткое замыкание (не позволяйте волшебному дыму случиться!), сбой во время программирования и т. д. Поверьте мне, все эти ресурсы пригодятся, так что вы найдете и исправите любую ошибку.

Проект, который я хотел создать (рассказ о котором вы можете узнать здесь), был в некоторой степени простым, у меня был модуль RN4020 Bluetooth LE, который нуждался в некоторой инициализации через интерфейс UART, и собирался передать связь через интерфейс UART. USB к UART IC после завершения настройки. Используя ATtiny85 в прошлом, я знаю из первых рук, что меня ждет дикая поездка, если я хочу иметь полнодуплексную связь UART, поскольку чип не имеет встроенного периферийного устройства, только это не так удобно для настройки USI (Universal Serial Интерфейс); и об использовании ATmega не могло быть и речи, поскольку у меня был целевой размер печатной платы.

Я начал задаваться вопросом, какой чип подойдет для моего счета, поскольку большинство проектов, которые я делал в прошлом, обычно включают пакеты с 64 выводами или выше, поэтому я решил посетить веб-сайт Microchip и поискать детали, которые у них есть.

К счастью, их система параметрического поиска оказалась всеобъемлющей. Поскольку я стремился к одному модулю UART в самом маленьком доступном пакете, я перемещался по столбцам, чтобы выбрать нужные мне функции, и остался без результатов.

Выделялись две части: ATtiny402 и ATtiny412; не сильно отличается по цене и набору функций, я выбрал ATtiny412. Затем я посетил моего любимого поставщика запчастей Mouser, чтобы проверить его доступность, потому что в нем нет никакого смысла, если этот чип нам подходит, но мы не можем его купить, верно?

Прежде чем взять на себя обязательство, я проверил техническое описание микросхемы.

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

Я сосредоточился на том, чтобы узнать, как настроить интерфейс UART и цифровой ввод-вывод, поскольку я хотел прочитать один из выходов RN4020, чтобы узнать, когда ATtiny будет готов отпустить последовательные линии.

Из чистого любопытства я решил проверить примеры проектов и документацию с веб-сайта Microchip, чтобы увидеть, есть ли большая разница между одним семейством и другим. Итак, я пошел дальше и проверил соответствующие документы на странице продукта чипа. Меня встретил здоровый каталог заметок для приложений.

После прокрутки некоторых страниц внутри Начало работы с USART меня встретил первый фрагмент кода:

USART0.BAUD  = (uint16_t) USART0_BAUD_RATE(BAUD_RATE);

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

Такие микросхемы, как ATtiny85 или ATmega328, НЕ ИСПОЛЬЗУЮТ структуры для своих определений регистров, они используют старые добрые макроопределения!

#define UCSR0B  _SFR_MEM8(0xC1)       //Like this one
UCSR0B = (1 << TXEN0) | (1 << RXEN0); //And we use them like this

Поэтому я решил заглянуть внутрь файла определения и, конечно же, нашел структуру данных, милая!

Не о чем беспокоиться, это просто означает, что мы должны использовать один из операторов C для доступа к структуре данных.

Нам нужно использовать оператор точка (.) Для доступа к членам структуры, то есть к переменным внутри структуры.

Все, что оставалось, - это прочитать техническое описание микросхемы, чтобы узнать, какие биты установить, как и в любом другом микроконтроллере Atmel.

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

PORTn.DIR = PORTn.DIR | PINx_bm;

Я почувствовал себя знакомым с битовыми манипуляторами и логическими операторами, используемыми Microchip в своем примере. Но, учитывая, что теперь мы имели дело со структурами данных, я снова проверил файл определения, чтобы убедиться, какие элементы были в структуре.

И было несколько переменных, которые сразу привлекли мое внимание. Каждый из отмеченных элементов - это ярлык для каждой операции, которую вы можете выполнять с портами, точно так же, как побитовые операции!

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

PORTA.OUTSET = PIN7_bm; //Setting the PIN using the 'new' way
PORTA.OUT |= PIN7_bm;   //Or the old way using bitwise operations
PORTA.DIRSET = PIN7_bm; //Setting the pin as output

Имея в виду новый «подход к кодированию», я начал работать над своей программой, моделируя здесь и там. Один раз меня устроил общий расход; пора было загрузить программу в чип. И, о боже, меня ждал сюрприз: оказалось, что новая серия AVR 1 не использует хорошо известный интерфейс программирования ISP! Они используют унифицированный интерфейс программ и отладки (UPDI), что означает, что вам понадобится всего пара контактов для загрузки вашей программы, и, что лучше всего, если вы хотите использовать аппаратную отладку для отладки кода, нет необходимости устанавливать предохранителей, которые могут заблокировать ваше устройство, если не будут выполнены должным образом!

Но если вы не хотите тратить так много на Atmel ICE или у вас ограниченный бюджет, и у вас есть несколько плат, совместимых с Arduino, вы можете создать недорогой программатор UPDI (нажмите здесь, чтобы перейти к публикации), Единственное, чего вам будет не хватать, это аппаратной отладки.

Успех!

Теперь, когда у вас есть основы, вы можете легко погрузиться в изучение других периферийных устройств и воспользоваться преимуществами того, насколько просты в использовании новые микросхемы и что они могут удовлетворить ваши сокровенные желания.

Использование этой новой серии микросхем позволяет вам значительно ускорить ваши проекты, вместо того, чтобы тратить кучу времени на попытки взломать свой путь, чтобы заставить работать что-то вроде простого интерфейса UART, ваши клиенты или начальство могут поблагодарить вас за это.

Надеюсь, вам понравилось это краткое введение в новую серию AVR!

Если вам понравился этот пост, вы также можете взглянуть на мой собственный сайт nicatronix.com, который я сейчас создаю, чтобы делиться другими материалами по электронике!