Ассемблер

IDE для разработки на AVR (GCC и Rat)

TrolStudio IDE, AVR Rat. C--

Раньше для разработки на Си вообще, и под микроконтроллеры AVR в частности я использовал IDE NetBeans, относительно уникальной фичей которой была поддержка С/С++ и GCC-ассемблера из коробки, с подсветкой синтаксис, возможностью сборки проекта и рефакторинга. Но, увы, после того как Oracle передали NetBeans в Apache, те превратили эту некогда неплохую IDE в унылое говно, выпилив оттуда поддержку С/С++ и заменив её на непонятное нечно, которое как бы есть (в меню создать С/++ проект все ещё можно), но по факту уже много лет как абсолютно неработоспособно.

The Rat - компилятор C-- для AVR

The Rat AVR

При написании ассемблерного кода возникает желание иметь более удобный синтаксис, похожий на синтаксис Си, где вместо мнемоник ассемблера можно использовать привычные и более читаемые конструкции. Подобно тому, как это делается в языке C--. Это желание и побудило на создания компилятора подобного языка для AVR, позволяющего писать компактный и шустрый код, и названного Rat.

Текущая версия: 0.2

Расширенный ассемблер (C--) для AVR

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

Справочник по командам ассемблера AVR

avr commands

На создание этого справочника меня побудило то, что все существующие ресурсы категорически неудобны, т.к. не имеют возможности быстрого переключения между командами - приходилось либо листать PDF-ку, либо щёлкать по ссылкам онлайн-версии. Тогда как хотелось иметь возможность видеть описание команды сразу после ввода её имени, без каких-либо лишних действий. Дополнительно присутствует полный список команд с их кратким описанием.

Справочник основан на переводе документации от Atmel. Помимо этого сюда добавлено больше примеров использования команд. В частности, добавлены примеры для ассемблера AVR GCC, т.к. последний имеет ряд особенностей, связанных с линковкой объектного кода.

Справочник будет дополняться по мере появления вопросов.

Чтобы быстро перейти к нужной команде достаточно ввести её имя.

Работа с энкодером

Работа микроконтроллера с энкодером

Энкодер - штука, внешне похожая на переменный резистор, но, в отличие от последнего, не имеет ограничителей и может вращаться в любую сторону бесконечно. С помощью энкодера очень удобно организовывать всякие экранные меню, вообще, один “нажимабельный” энкодер (т.е., если он умеет работать ещё и как кнопка) идеально подходит для для организации одномерных циклических меню.

Энкодеры бывают двух типов: абсолютные - сразу выдающие код угла поворота и инкрементальные - выдающие импульсы при вращении. Для последних подсчётом импульсов и их преобразованием их в угол поворота должен заниматься микроконтроллер.

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

Хотя информации по программированию энкодеров в сети навалом, как и готовых библиотек для этого, но все они какие-то излишне громозкие (имхо) - опрос состояния, как правило, реализуется в виде конечного автомата в виде блока switch с вложенными if-ами, что выглядит несколько сложно (особенно, будучи написанным на ассмеблере). Хотя, реализация может быть проще.

Совместное использование ассемблера и Си для AVR

AVR

При программировании вещей, критичных к быстродействию и размеру кода хорошо использовать ассемблер. При этом обычно не обязательно писать на нем весь код, достаточно реализовать наиболее “чувствительные” подпрограммы. Компилятор GCC и среда Atmel Studio позволяют использовать в проекте ассемблер и С одновременно. При этом возникает вопрос организации взаимодействия между подпрограммами на разных языках: вызова методов с передачей им параметров и доступа к переменным.

Звонок на I2C-флеш-памяти

Звонок на I2C-флеш-памяти

Это предшественник звонка с MMC/SD картой отличающийся более скромными возможностями, но в некоторых ситуациях их может быть вполне достаточно. Звонок умеет проигрывать нотные мелодии и аудиофрагменты, которые хранятся во флеш-памяти с интерфейсом I2C. Схема звонка состоит из двух частей, аналоговой и цифровой. Цифровая часть выполнена на микроконтроллере AT89C2051, хранилищем мелодии служит микросхема AT24C256. Аналоговая часть точно такая же, как и у звонка с MMC-картой.

Индикатор интенсивности работы компьютера

Идея создания этого устройства возникла после того, как в компьютере начали разом «стучать» оба жестких диска, причиной чего, как выяснилось, послужил блок питания. В итоге, был приобретен новый БП помощнее, а старый АТХ-овый БП поставлен в другую машину, вместо имевшегося в ней AT-шного БП. Корпус у этого компьютера был еще эпохи 486-х и имел помимо кнопки «Reset» кнопку «Turbo» (которая когда-то позволяла понижать тактовую частоту процессора) и выключатель питания.

Подписка на Ассемблер