Программирование AVR

Программирование AVR (94)

Написал библиотеку для опроса кнопок. 

Особенности библиотеки:

• предназначена для AVR
• работает с компиляторами GCC, IAR, CodeVision
• позволяет опрашивать до 32 цифровых входов
• имеет программную защиту от дребезга контактов
• распознает нажатие, удержание, отпускание и двойное нажатие на кнопку
• позволяет индивидуально задавать активный уровень и обрабатываемые события
• зафиксированные события сохраняются в кольцевом буфере
• позволяет отключать неиспользуемые функции
• легко интегрируется в готовый проект

В этой статье мы рассмотрим практический пример использования SD карты с микроконтроллером AVR. По просьбе трудящихся я написал проект, который читает с SD карты wav файл и воспроизводит его. 

Для проекта я использовал микроконтроллер atmega16, тактируемый от внешнего кварца с частотой 6 МГц. В качестве ЦАПа задействована функция формирования ШИМ сигнала таймера Т0. Wav файл для воспроизведения был выбран с такими параметрами: 8 бит, 22 кГц, моно.

В этой части мы рассмотрим библиотеку для работы с дисками, имеющими файловую систему FAT. Это всем известная библиотека Elm Chan`a - Petit FatFs. Она представляет собой облегченную версия библиотеки FatFs и предназначена для микроконтроллеров с небольшим объемом оперативной памяти. Конечно, функционал Petit FatFs сильно ограничен, но имеет смысл начать знакомство с нее, потому что в ней проще разобраться. 

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

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

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

В этой статье описывается реализация ведущего TWI устройства в виде драйвера и пример его использования. Представленный драйвер может выполнять обмен данными как в стандартном режиме (<100 кбит), так и с скоростном (<400 кбит).

Подключение устройств к I2C шине

Наконец-то переделал свою старую библиотеку для семисегментного индикатора. Теперь она более функциональна и позволяет подключать индикатор к произвольным выводам микроконтроллера. Поддержку SPI убрал, чтобы не загромождать код. Если дойдут руки, то сделаю для SPI подключения отдельную библиотеку. 

Особенности библиотеки:

- предназначена для микроконтроллеров AVR,
- легко интегрируется в готовый проект,
- может использоваться с компиляторами IAR, GCC, CodeVision,
- поддерживает подключение к произвольным выводам микроконтроллера, 
- поддерживает индикаторы с общим катодом и с общим анодом, 
- поддерживает подключение индикаторов через различные буферы,
- позволяет подключать индикатор с количеством разрядов до 8,
- предоставляет возможность посегментной и поразрядной развертки.

Полная версия библиотеки дополнительно обеспечивает:

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

Все операции, выполняемые TWI модулем, завершаются установкой бита прерывания (TWINT бит регистра TWCR) и соответствующего статусного кода (старшие шесть разрядов регистра TWSR). Это позволяет организовать обмен данными по шине с помощью прерываний. 

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

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

В этой части мы рассмотрим работу ведущего TWI устройства на прерываниях. Код для этого материала основан на руководстве фирмы Atmel - AVR315: Using TWI module as I2C master. 

Давно хотел поработать с самыми крохотными микроконтроллерами AVR и наконец сподобился купить несколько ATtiny10. Что можно сказать про эту букашку? По сути, обычный AVR, только с небольшим количеством выводов, памяти и периферии. Однако, на нем вполне можно собрать какой-нибудь вольтметр или термометр, если приложить смекалку.


В составе TWI модуля микроконтроллеров AVR есть регистр TWSR. Старшие 6 разрядов этого регистра содержат статусный код, а младшие - управляющие разряды, которые задают коэффициент деления частоты SCL сигнала. Я сейчас говорю про atmega16, в некоторых микроконтроллерах этих разрядов нет, но не суть.

Статусный код отражает результат последней выполненной операции TWI модуля. По нему можно судить, завершилась ли она успешно или что-то пошло не так, стоит ли продолжать передачу данных или ее пора прекращать.

В предыдущей части был рассмотрен топорный вариант работы с DS1307, в котором статусные коды TWI модуля просто игнорировались. В этом материале разобран пример работы с TWI модулем без прерываний, но с использованием статусных кодов.

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

Страница 1 из 10