Анонс следующей части:
ARDUINOHACKS — мы превращаем 8-битный микроконтроллер в суперкомпьютер! ⚡💻 Пишите в комментариях, какие темы вас интересуют — мы разберем их на атомы!
Читать далее »Итоговый чек-лист ассемблерного мастера:
✔️ Пишет код на ассемблере для критических участков✔️ Использует макросы для ускорения разработки✔️ Умеет читать и изменять регистры напрямую✔️ Создает собственные библиотеки на чистом C✔️ Оптимизирует задержки через таймеры и прерывания✔️ Обрабатывает энкодеры на Pin Change Interrupts✔️ Эмулирует…
Читать далее »Часть 20: Создание собственной библиотеки на чистом C
Мы дошли до момента, когда стандартные Arduino-библиотеки становятся слишком громоздкими. Создаем свою библиотеку на чистом C с минимальным оверхедом. Структура библиотеки: encoder.h: encoder.c: Использование:
Читать далее »Часть 19: Оптимизация задержек — от _delay_ms() к ассемблеру
Стандартная функция _delay_ms() использует циклы, которые считают такты. Но она блокирует процессор и не позволяет делать ничего другого. Хак: Используем прерывания таймера для создания неблокирующих задержек. Код на ассемблере для таймера 0: Использование в C++:
Читать далее »Часть 18: Обработка данных с энкодеров на ассемблере
Энкодеры — это устройства, которые превращают вращение в последовательность импульсов. Обычно мы опрашиваем их в loop(), но это медленно. Хак: Используем Pin Change Interrupts для детекции изменения состояния на порту. Это позволяет обрабатывать до 4 энкодеров одновременно без потери импульсов. Ассемблерный код…
Читать далее »Часть 17: Ассемблерные макросы — пишем код быстрее
Макросы в ассемблере позволяют создавать свои инструкции, которые раскрываются в несколько команд. Это ускоряет написание кода и улучшает читаемость. Макрос для установки нескольких пинов за один такт: Макрос для задержки в микросекундах:
Читать далее »Часть 16: DMA — Прямой доступ к памяти без участия процессора
Мы добрались до технологии, которая кардинально меняет правила игры. DMA (Direct Memory Access) — это периферийный модуль, который может пересылать данные между памятью и периферией без участия CPU. Это как если бы у вас появился второй процессор, который занимается только пересылкой…
Читать далее »Что дальше на ARDUINOHACKS?
Мы прошли путь от простых проектов до ассемблерного программирования и внешней памяти. В следующих частях: Помните: Настоящие хакеры знают, что происходит на уровне регистров. Теперь вы — один из них! ⚡ ARDUINOHACKS — жжем биты, а не платы!
Читать далее »Часть 15: Ассемблер для таймеров и прерываний
На ассемблере мы можем настроить таймеры так, как это невозможно сделать через Arduino API. Пример: Таймер 1 в режиме CTC с прерыванием
Читать далее »Часть 14: Внешняя SRAM — расширяем память за пределы 2 КБ
Внутренней SRAM в 2 КБ на ATmega328P катастрофически не хватает для проектов с большими массивами данных: аудио-буферы, графические фреймбуферы, логирование GPS-треков. Решение: подключаем внешнюю SRAM, например Microchip 23LC512 на 64 КБ через SPI. Схема подключения: Пин 23LC512 Подключение к Arduino CS…
Читать далее »