AVR и USB. Подключаем устройства на AVR к USB порту
В данной статье речь пойдет о таком довольно популярном интерфейсе как USB, точнее как использовать этот интерфейс USB на микроконтроллерах семейства AVR. В интернете на данную тему много информации но большинство из нее представлено отдельными фрагментами и не дает полную картину о то как использовать этот интерфейс на микроконтроллерах AVR.
Такие интерфейсы как COM, MIDI, LPT широко использовались в свое время, но сейчас они морально устарели и все реже и реже встречаются в современных компьютерах в основном в компьютерах для промышленного и узкоспециализированного оборудования. Для связи собранного устройства с компьютером можно использовать всевозможные переходники конвертеры и эмуляторы, но как показывает практика они порождают множество проблем.
Для того чтобы использовать подружить USB и AVR можно пойти 3-мя путями:
Использовать аппаратную поддрежку USB интерфейса, к примеру микроконтроллера AT90USB*. Для того чтобы его использовать нужно написать для него особую прошивку. И если вашу собраное устройство не стандартного класса USB то придется для компьютера писать драйвер, который объяснит ПК с каким устройством имеем дело.
Использовать конверторы USB в какой нибудь другой интерфейст (к примеру USB-UART на микросхеме FTDI FT232RL). В качествое других интерфейсов может выступать RS232, I2C или другие. При таком подходе нам не нужно замарачиваться и знать как работает интерфейс USB, также нужда в драйвере для компьютера тоже отпадает, так как драйвера для таких конверторов уже написаны производителем.
Можно сделать все хитрее взять микроконтроллер AVR и написать для него программу которая будет эмулировать работу USB. При таком подходе возникает трудность в реализации большой скорости передачи данных. Интерфейс USB работает на большой скорости которая может быть: LowSpeed — 1,5 Mbit/s, FullSpeed — 12 Mbit/s, HighSpeed — 480 Mbit/s, а у интерфейса USB 3.0 скорость может быть еще выше. Поэтому на микроконтроллерах AVR можно сделать устройство только со скоростью LowSpeed. Для большинства самодельных устройств такой скорости вполне достаточно.
- USBtiny;
- V-USB;
- Igor Cesko.
Igor Cesko первый кто сделал такой проект, он был написан на языке assembler.
После появился проект V-USB который написан на языке C с использованием ассемблерного кода Используя V-USB был сделан проект ИК приемника для компьютера.
USBtiny в свою очередь является произволным от ранней версии проекта V-USB. По возможности он уступает V-USB но зато гараздо проще теоретически и относительно легок в освоении.
Мы будем использовать проект V-USB
- хорошая документация под код C, в результата легче разбираться;
- у V-USB есть свободная пара идентификаторов это Vendor-ID и Product-ID;
- работает на многих AVR микроконтроллерах, необходима частота не менее 12 МГц, 2 кБ флеш памяти и 128 байт RAM;
- хорошая эмуляция USB 1.1 со скоростью LowSpeed устройств, только нет обработки ошибок связи и электрических характеристик.
- проект V-USB опубликован на GNU GPLV (General Public License Version 2) также есть платная версия.
В своих USB экспериментах, прошивку для микроконтроллера писал на языке C в среде AVR-Studio 4 + WinAVR, программа для ПК была разработана при помощи среды Borland C++ Builder как самый простенький и хустрый вариант. Поэтому все следующие примеры будут такими же. От правильного выбора инструментов зависит количество головной боли на последующих шагах. По поводу того что лучше C или Assembler можно говорить много. Как по мне то нужно владеть всеми инструментами, каким-то в большей степени каким-то в меньшей и использовать тот или другой в зависимости от конкретной поставленной задачи.
Считаю важным сказать пару слов про идентификаторы VID и PID которые представляют 16-битные числа. Эти числа использует операционная система и определяет какой подгрузить драйвер. Стоимость Vendor-ID на usb.org составляет 2000$. По поводу легальности использования VID/PID можно прочитать на станчике эмбеддера BSVi. V-SUB предоставлят свободную пару VID/PID. У вас наверное возникнет вопрос «Как подключить сразу несколько устройст с однинаковыми значениями VID/PID». Подключить несколько устройств с одниковами значениями вы можете, ничего страшного в этом нет так как каждое устройство USB имеет также свой VENDOR_NAME и DEVICE_NAME идентификаторы.
Давайте попробуем собрать свое первое USB HID устройство на микроконтроллере Atmega8 и научим его общаться с компьютером при помощи интерфейса USB. Может возникнуть вопрос «почему именно HID устройство». Ответ самый простой- потому что мы не хотим замарачиваться,выносить себе мозг и писать всякие там драйвера под Windows. А когда мы подключаетм HID устройство то операционная система сама выбирает и включает необходимый драйвер. Наша программа под компьютер не будет нуждаться в установки и настройки чего либо она сразу будет использовать готовый алгоритм для работы с HID устройством.
- Borland C++ Builder 6 -среда для разработки приложение под Windows на языке программирования C++;
- V-USB — программа под микроконтроллеры AVR реализующая работу low-speed USB 1.1,скачатьvusb.tar.gz;
- WinAVR — набор для разработчиков AVR, сдесь нам нужен будет GNU GCC компилятор, который автоматически интегрируется в студию;
- AVR Studio — отличная среда для разрабоки программ под микроконтроллеры AVR.
Что такое микроконтроллер
Микроконтроллер — это микросхема, которую можно программировать. Это если кратко. Далее будет чуть подробнее, а пока небольшая предыстория появления микроконтроллеров на свет божий.
Когда-то давно кто-то умный понял, что на существующей элементной базе (транзисторах и обычных микросхемах) уже невозможно создавать устройства, которые удовлетворяли бы современным требованиям по размерам и массе.
Кроме того, требования к электронному оборудованию всё возрастали, и для их выполнения приходилось создавать всё больше и больше новых микросхем — каждая под свою задачу.
Тогда этот кто-то умный решил — а почему бы не сделать программируемую микросхему, и использовать её для всех устройств. Ведь в большинстве случаев задачи являются типовыми, и отличается лишь логика управления. И почему бы эту логику не прописать в программе, а не использовать для каждой операции отдельную микросхему?
Так появились микропроцессоры. Микропроцессор — это тоже программируемая микросхема. Но в микропроцессоре, как правило, была только управляющая программа. А память, модули ввода-вывода и т.п. реализовывались в других микросхемах.
Это было лучше, чем применение обычных транзисторов или микросхем. Но всё равно не очень удобно. Потому что даже для очень простых устройств приходилось использовать несколько микросхем: микропроцессор, микросхемы памяти, микросхемы ввода-вывода, тактовые генераторы и т.п.
Поэтому создание микроконтроллера было неизбежным этапом эволюции микропроцессорных систем.
Микроконтроллер — это программируемая микросхема, которая объединяет в одном корпусе все (или почти все) части микропроцессорной системы.
То есть сегодня можно создать достаточно сложное устройство, например, новогоднюю гирлянду с разными режимами работы, имея лишь одну микросхему — простенький микроконтроллер, к тому же очень недорогой (стоимость простых микроконтроллеров начинается примерно от 50 рублей).
Так что микроконтроллеры очень быстро завоевали популярность среди электронщиков, причём как любителей, так и профессионалов. И сегодня применяются практически везде.
История семейства
Семейство микроконтроллеров AVR было создано в 1996 г. корпорацией Atmel, а разработчиками архитектуры микроконтроллеров являются Alf-Egil Bogen и Vegard Wollan. Отсюда и происходит название семейства – от первых букв имен разработчиков – A и V, и первой буквы аббревиатуры RISC – типа архитектуры, на которой базируется архитектура микроконтроллера. Также эту аббревиатуру часто расшифровывают как Advanced Virtual RISC (модернизированный эффективный RISC).
Первым микроконтроллером в серии был AT90S8515, однако первым микроконтроллером, выпущенным на рынок, стал AT90S1200. Это случилось в 1997 г.
На сегодняшний день доступны 3 линейки микроконтроллеров:
- TinyAVR – небольшой объем памяти, небольшие размеры, подходит для самых простых задач.
- MegaAVR – наиболее распространенная линейка, имеющая большой объем встроенной памяти (до 256 КБ), множество дополнительных устройств и предназначенная для задач средней и высокой сложности.
- XmegaAVR – используется в сложных коммерческих задачах, требующих большого объема памяти и высокой скорости.
Сравнительные характеристики различных линеек:
Название серии | Число контактов | Объем флэш-памяти | Особенность |
TinyAVR | 6-32 | 0,5 – 8 КБ | Небольшой размер |
MegaAVR | 28-100 | 4-256 КБ | Периферийные устройства |
XmegaAVR | 44-100 | 16-384 КБ | Система прерываний, поддержка DMA |
Аналоговые или цифровые?
Какие нужно использовать входные и выходные сигналы зависит от поставленной задачи и условий. Например, если у вас стоит задача просто что-то включить или выключить, то вам достаточно чтобы сигнал на входном контакте микроконтроллера был цифровой.
Двоичное состояние переключателя 0 или 1. Высокий уровень сигнала может быть 5 вольт, а низкий 0. Если же вам нужно измерить, например, температуру, то нужен аналоговый входной сигнал. Далее АЦП на микроконтроллере интерпретирует напряжение и преобразует его в числовое значение.
Микропроцессор
С микропроцессором (далее МП) дела обстоят немного иначе. Он содержит в себе арифметико-логическое устройство, блок синхронизации и управления, запоминающие устройство, регистры и шину. То есть МП содержит в себе только то, что непосредственно понадобится для выполнения арифметический и логических операций. Все остальные комплектующие (ОЗУ, ПЗУ, устройства ввода/вывода, интерфейсы) нужно подключать извне.
Структурная схема микропроцессорного устройства
Первые микропроцессоры появились тоже в начале 70-х. Самым популярным на тот момент считался 4004. Это микропроцессор, разработанный компанией Intel и представленный 15 ноября 1971 года. Он имел внушающие на тот период характеристики:
- 2300 транзисторов;
- тактовая частота — 740 кГц;
- разрядность регистров и шины — 4 бита;
- техпроцесс — 10 мкм;
- площадь кристалла: — 12 мм².
К слову, 4004 был выполнен в обычном DIP-16 корпусе. Этот МП является самой популярной микросхемой для коллекционирования. Некоторые экземпляры продаются по 400 $ за штуку. Менее раритетные стоят около 250 $.
Уже через пару лет 8-битные МП позволили создавать первые бытовые микрокомпьютеры.
Естественно, тут преимуществом является то, что к МП можно на выбор подключать разную периферию с разными характеристиками (что не во всех случаях можно на МК). Второе основное отличие микропроцессора от микроконтроллера в том, что МП имеют больше вычислительной мощности. Их не имеет смысла ставить в микроволновки и «умные» лампочки. Микропроцессоры применяют там, где вычислительная мощность МК уже не справляется — игровые приставки, сложные вычислительные устройства и приборы, гаджеты.
Получается, чтобы обеспечить работоспособность микропроцессора, нужно подключить ему хотя бы минимальный набор периферии. Минусы:
- Размер — если в случае МК всё уже находится в одном корпусе, то минимальный набор элементов для работы МП занимает больше места.
- Цена — обычно, вся «сборка» комплектующих для МП выходит гораздо дороже «голых» микроконтроллеров.
- Производительность — микропроцессоры обладают большей производительностью, чем микроконтроллеры.
- Выбор — в случае МП у вас есть возможность подобрать комплектующие. Это позволит поставить более подходящую под ваши цели периферию.
Питание микроконтроллера
Для работы микроконтроллеру, как и любому электронному устройству, необходима энергия. Напряжение МК Atmel AVR находится в диапазоне 1.8–5.5 Вольт и зависит от модели и серии. Большинство приборов работает от 5 Вольт. Но встречаются и низкочастотные модели (Attiny 2313), нижняя граница у которых от 1,8 В.
Кроме того, на работу МК влияет и частота поступающего тока. Низкое напряжение требует и низких пределов частот. Чем выше частота, тем быстрее работают определенные модели.
Так, чтобы обеспечить работу контроллеров серии AVR, на все плюсовые входы нужно подавать 5 В, а нулевой заземляют.
На аналогово-цифровой преобразователь питание подают через дополнительные фильтры. Это поможет избавиться от помех, которые могут изменять показания напряжения. При этом на плюсовой ввод подается напряжение через фильтрующий дроссель. А нулевые выводы разделяют на цифровые и аналоговые. Причем соединяться они могут только в одной точке.
Кроме того, необходимо установить и конденсаторы, лучше керамические, из расчета 1 на 100 нанофарад.
Электронные часы-термометр с беспроводным датчиком через радиомодуль nRF24L01
Здравствуйте, уважаемые Датагорцы! Представляю вашему вниманию электронные часы с функцией измерения температуры, изготовленные мною в качестве подарка деду ко дню Советской Армии.
Особенностью проекта является использование радиомодуля nRF24L01 для беспроводного соединения с датчиком DS18B20. Это моя первая статья.
Привет датагорцам и гостям нашего кибер-города! В предыдущих частях материала по Ассемблеру основное внимание уделялось оформлению кода, в то время как компиляция, компоновка, отладка и загрузка программы в МК были упомянуты вскользь [1–5], либо вовсе не рассматривались.
Пришло время остановиться на указанных и сопутствующих [6–9] вопросах подробнее.
В чем отличие микроконтроллера от микропроцессора?
Часто микроконтроллер называют микропроцессором, однако, это не совсем так. Микропроцессор выполняет лишь ряд арифметических и логических операций. Микроконтроллер же содержит в себе микропроцессор и другие функциональные узлы, такие как порты ввода-вывода, память аналогово-цифровые преобразователи, ШИМ и прочее. В общем случае микроконтроллер является аналогом материнской платой компьютера, на которой расположены все устройства, в том числе и центральный процессор. А микропроцессор – это всего лишь отдельный элемент, обладающий высокой вычислительной мощностью.
Различные типы микроконтроллеров.
Существует широкий спектр микроконтроллеров, доступных на рынке. Различные компании, как Atmel, ARM, Microchip, Texas Instruments, Renesas, Freescale, NXP Semiconductors, etc. и др. налажено производство различных видов микроконтроллеров с различными видами функций. Глядя на различные параметры, такие как программируемая память, объем флэш-памяти, напряжение питания, ввода/вывода, скорость, и т. д., можно правильно выбрать микроконтроллер для их применения.
Давайте посмотрим на эти параметры и различные типы микроконтроллеров по этим параметрам.
Шина данных (Разрядность):
Если классифицировать по бит-Размер, большинство микроконтроллеров от 8-бит до 32 бит (более высокие разрядные микроконтроллеров также доступны). В 8-разрядного микроконтроллера своя шина данных состоит из 8 линий данных, а в 16-разрядный микроконтроллер его шина данных состоит из 16 линий данных и так далее для 32 бит и выше микроконтроллеров.
Память:
Микроконтроллерам нужна память (ОЗУ, ПЗУ, ППЗУ, ЭСППЗУ, флэш-память и т. д.) для хранения программ и данных. Хотя некоторые микроконтроллеры имеют встроенные чипы памяти, а другие требуют внешней памяти в связке. Они называются встроенной памяти микроконтроллеров и внешней памяти микроконтроллеров соответственно. Встроенный объем памяти также варьируется в различных типах микроконтроллеров и вообще вам бы найти микроконтроллеры с памятью 4Б до 4Мб.
Количество входных/выходных контактов:
Микроконтроллеры различаются по количеству ввода-вывода размеров. Можно выбрать конкретный микроконтроллер в соответствии с требованием приложения.
Набор Команд:
Есть два вида наборов инструкций — на RISC и cisc. Микроконтроллер может использовать процессор RISC (сокращенный набор инструкций компьютера) или с CISC (комплекс команд ЭВМ). Как подсказывает название, RISC сокращает время операции, определяющие такт инструкции; а CISC позволяет прикладывать одну инструкцию в качестве альтернативы многие инструкции.
Архитектура Памяти:
Существует два типа микроконтроллеров – Гарвардская архитектура памяти микроконтроллеров и Принстон архитектура памяти микроконтроллеров.
Вот несколько популярных микроконтроллеров среди студентов и любителей.
Серии 8051 микроконтроллеров (8-бит)
Микроконтроллеры AVR от компании Atmel (ATtiny, серии atmega)
Микрочип-это серия pic микроконтроллеров
Тексас инструментс», микроконтроллеры msp430 фирмы
Особенности микроконтроллеров
Микроконтроллеры используются во встраиваемых системах на их различные характеристики. Как показано в приведенной ниже блок-схема микроконтроллера, он состоит из процессора, ввода/вывода, последовательные порты, таймеры, АЦП, ЦАП и прерыватель контроля.
Процессор или центральный процессор
Процессор-это мозг микроконтроллера. При условии входного сигнала через входные контакты и инструкции через программы, обрабатывать данные и предоставлять соответственно на выходных выводах.
Памяти
Чипы памяти интегрированы в микроконтроллер для хранения всех программ и данных. Там могут быть разные типы памяти, интегрированный в микроконтроллеры как ОЗУ, ПЗУ, ППЗУ, ЭСППЗУ, флэш-память и др.
Порты Ввода-Вывода
Каждый микроконтроллер имеет входные выходные порты. В зависимости от типов микроконтроллеров, число входных вывода могут различаться. Они используются для подключения внешних входных и выходных устройств, таких как датчики, блоки индикации и др.
Последовательные Порты
Они облегчают связь микроконтроллеру по последовательному интерфейсу с периферийными устройствами. Последовательный порт-это последовательный интерфейс связи, через который информация передается ввода или вывода один на один бит за один раз.
АЦП и ЦАП
Иногда встраиваемых систем примеяют преобразования данных из цифрового в аналоговый и наоборот. Поэтому большинство микроконтроллеров объединены с встроенным АЦП (аналого цифровой преобразователь) и ЦАП (цифро-аналоговые преобразователи) для выполнения требуемого преобразования.
Таймеры
Таймеры и счетчики являются важными компонентами встраиваемых систем. Они необходимы для различных операций, таких как формирование импульса, подсчет внешних импульсов, модуляции, колебания и др.
Прерывание Контроля
Прерывание контроля является одним из мощных возможностей микроконтроллеров. Это своего рода уведомление, которое прерывает текущий процесс и дает указание выполнить задачи, определенные прерывания контроля.
Чтобы суммировать все это, микроконтроллеры являются своего рода компактные мини-компьютеры, которые предназначены для выполнения конкретных задач в области встраиваемых систем. С широким спектром функций, их значение и польза огромны и они могут быть найдены в продуктах, и приборы для всех отраслей промышленности.