Сжатие звука в IMA ADPCM

Есть такой аудиокодек — IMA ADPCM. Сжимает аудио в 4 бита на сэмпл (250 кбит/с при частоте дискретизации 32 кГц, стерео), после чего, достаточно достоверно восстанавливает. А главное, очень быстро. Около 100 тактов на сэмпл на ядре AVR.

Как это работает?


Читать дальше

Altera ByteBlaster MV совмещенный с LPT-программатором AVR

Когда начинаешь интересоваться ПЛИС, то в скором времени встает вопрос: А чем ее прошить?
Производители предлагают достаточно большой выбор устройств, но цена у них обычно кусачая. Так же попадаются простые схемы в даташитах, но их еще найти надо, а для этого надо знать что конкрено ищешь. Ну и в сети есть достаточное описание схем умельцев, например как программатор описанный в статье: USB-Blaster. Я хочу внести свои пять копеек и описать простой LPT-программатор, который собирается на коленке за один вечер и может шить как ПЛИС фирмы Altera, так и микроконтроллеры AVR.


Читать дальше

USB для AVR. Часть 2. HID Class на V-USB



Здравствуйте, в данной статье попытаюсь доступным языком описать USB HID Class устройство на микроконтроллере AVR, а также как общаться с таким девайсом программе написанной на Borland C++ Builder 6 под Windows. Рассмотрим основные настройки V-USB, откомпилируем прошивку для микроконтроллера, напишем простенькую программу пример для ПК, весь код хорошо комментирован. В качестве подопытного микроконтроллера — ATmega8 (можно смело брать любой другой, завалялась просто у меня старая ;) макетка Trashduino, эх ностальджи...) Также для ознакомления можно почитать: USB для AVR. Часть 1. Вводная


Читать дальше

Кольцевой буфер на С++ для МК.

Кольцевой буфер (КБ)(Ring Buffer) — структура данных типа FIFO (First In First Out — первым вошел, первым вышел), находит очень широкое применение в том числе при программировании МК. Кольцевые буферы часто используют для организации различных очередей сообщений и буферов приёма-передачи различных коммуникационных интерфейсов. Популярность КБ обусловлена тем, что это один из самых простых и эффективных способов организовать FIFO без использования динамической памяти. Существует множество разновидностей КБ, о них можно почитать, например тут en.wikipedia.org/wiki/Circular_buffer Рассмотрим одну очень быструю и компактную реализацию КБ на С++.


Читать дальше

USB для AVR. Часть 1. Вводная


Здравствуйте, решился я испытать свои творческие таланты :) Речь пойдет об популярном интерфейсе USB, а именно как заюзать этот самый USB на простых микроконтроллерах AVR. Планирую написать несколько топиков с примерами кода и разъяснениями как со стороны микроконтроллера, так и со стороны компьютера. Конечно на просторах интернета полно всяческих примеров на данную тематику, но как писал DI HALT в правилах конкурса: «в лучшем случае это исходник в котором сам черт ногу сломит, да краткое, на страничку, его описание.»


Читать дальше

Использование различных GCC тулчейнов для AVR

AVR
Написал давно, но что-то как-то не мог собраться и дописать. На фоне этого сообщения решил запостить, в общем выкладываю как есть.
Самый популярный gcc тулчейн для AVR микроконтроллеров является WinAVR. Но отнюдь не единственный в своем роде.


Итак:


Читать дальше

Notepad++ и avr gcc

    Из толп просто редакторов кода, не IDE, лучшим, на мой взгляд, является Notepad++.
image
Он простой, имеет качественную подсветку синтаксиса с подключением стилей, а также русскую локализацию и много различных плагинов.

Для использования с AVR gcc тулчейном его надо немного допилить.



Читать дальше

Ассемблерные вставки в AVR-GCC

AVR
Практически всегда, когда в проекте задействованы АЦП, встаёт необходимость провести математическую обработку того, что там нацифровалось. Мат. обработка, в зависимости от задачи, может варьироваться от примитивного «сложить два измерения и поделить пополам (ака сдвинуть на разряд вправо)» до всяких там БПФ, цифровых фильтров и далее по списку. Если математика чуть сложнее, чем «найти максимум за период», а измерения непрерывные, то частенько встаёт вопрос в скорости обработки. Собственно говоря, это вообще-то отправная точка для выбора платформы, на которую будет опираться проект, тут надо здраво оценить потребности задачи и возможности различных платформ. Конечно, для ядрёной числодробилки лучше взять какой-нибудь DSP, а может даже и FPGA. А если наша числодробилка не особо ядрёная, зато требуется минимизировать энергопотребление этой фигни, да и конечная стоимость должна быть не как у самолёта? А ещё есть такие факторы, как опыт разработчика, доступность комплектухи и т.д. Короче если мы решили, что мозгами в нашем проекте должна работать старая добрая AVR, но мозга у неё не хватает, на то что бы осмыслить наш алгоритм, объяснённый ей на языке C, придётся объяснять на Assembler`е.


Читать дальше

AVR, С++ и умные указатели

AVR, С++ и умные указатели

Как известно МК AVR построены по Гарвардской архитектуре, что значит МК имеет различные шины для памяти программ — flash, eeprom и ОЗУ. Многие МК имеют различные шины для разных типов памяти, это даёт возможность, например, одновременной выборки команд и доступа в ОЗУ. Однако в большинстве современных МК при этом все различные виды памяти отображаются в единое адресное пространство. В AVR же и шины разные и отображаются они в разные адресные пространства. Это создаёт определённые неудобства при программировании на Си/Си++ поскольку эти языки подразумевают единое адресное пространство и работа, например, с константами хранящимися в памяти программ осуществляется не очень прозрачно.


Читать дальше