Глава 7 Идеи для проектов . Микроконтроллеры AVR: от простого к сложному
В этой главе описываются интересные идеи конструкций на микроконтроллерах.
Автор сразу хотел бы ответить на вопрос о некоторых из конструкций, описанных здесь: «А зачем это делать на микроконтроллерах?» или: «А кому это устройство нужно?» и т. д. Описанные здесь идеи конструкций предназначены в первую очередь для приобретения практического опыта проектирования и изготовления различных схем на микроконтроллерах. Преимущества — многие устройства достаточно простые, что позволяет их быстро изготовить. При этом, однако, в каждом есть своя изюминка — где-то придется разобраться, как микроконтроллер может определять положение переменного резистора, где-то приобрести полную ясность, что такое дребезг контактов, и т. д. И самое главное, каждая схема — простейшее, но законченное устройство. А сделать что-то работающее и имеющее определенное назначение обычно интереснее, чем просто решить задачку.
Итак, ниже приведены описания конструкций, своего рода домашняя работа для терпеливых читателей, поставивших перед собой цель научиться полноценно использовать микроконтроллеры семейства AVR.
Самодельный калькулятор с реализацией вычисления специфических функций для какой-либо специальности (например, расчеты с комплексными числами или расчет значений для записи в регистры микроконтроллеров семейства AVR для формирования заданного временного интервала с помощью таймера и т. д.).
Счетчик витков с автоматическим определением направления вращения.
Электронная записная книжка с ЖКИ-индикатором.
Универсальный контроллер
Усовершенствованный автомат световых эффектов — увеличено число управляемых линий, усложнены реализуемые эффекты.
Прибор для проверки цифровых микросхем — увеличено число типов проверяемых микросхем.
Электронные часы-будильник — введена возможность заводить его на несколько времен (например, на 6, 8 и 10 часов).
Электронные измерительные приборы — омметр, амперметр, вольтметр.
Электронный частотомер с расширенным диапазоном измеряемых частот.
Управляющий микрокомпьютер для детской игрушки, позволяющий задать с помощью специальной клавиатуры с названиями действий и цифрами последовательность действий и их количество, после чего запустить их на выполнение. Пример управляющей последовательности: вперед 4, включить фары, звуковой сигнал 2, погасить фары.
Цифровой ПИД-регулятор — ввод параметров регулятора с помощью клавиатуры, они записываются во флэш-память данных и сохраняются при выключении регулятора. Индикация текущего состояния и сообщений при вводе параметров регулятора — с помощью символьного ЖКИ-индикатора 2 строчки по 16 символов.
Прибор для проверки целостности и маркировки проводов многожильного кабеля.
Прибор для снятия характеристик биполярных транзисторов — характериограф с генерацией видеосигнала снятой характеристики для получения картинки на любом телевизоре.
Простой логический анализатор. Отображение состояния 8 линий на графическом ЖКИ-индикаторе 128 х 64 точки. Время измерения зависит от интервала между измерениями.
Прибор для снятия характеристик стабилитронов с отображением характеристики на графическом ЖКИ.
Генератор сигналов произвольной формы.
Прибор велосипедиста — измеритель пройденного пути, спидометр.
Измеритель частоты оборотов — тахометр.
Простейший цифровой осциллограф с индикацией на графическом ЖКИ индикаторе 128х64.
Генератор испытательных сигналов для настройки и ремонта телевизоров.
Кодовый замок.
Электронные «крестики-нолики».
Электронный тренажер велосипедиста.
Датчиком прибора является фотоэлектрическое устройство, состоящее из инфракрасного светодиода и фотодиода. Его следует установить таким образом, чтобы при вращении колеса велосипеда луч прерывался.
Измеритель скорости реакции человека. Реакция человека — действие в ответ на определенный раздражитель (сигнал). В жизнедеятельности человека, быстрота реакции имеет немаловажную роль. Люди с замедленной реакцией не могут быстро, а иногда и безопасно выполнять некоторые работы. Например, водители с замедленной реакцией чаще всего совершают дорожные аварии.
Время реакции человека непостоянно. Оно зависит от состояния нервной системы и многих других факторов. В значительной мере на замедление реакции (увеличение времени на ответные действия) влияют переутомление, употребление алкоголя, отрицательные эмоции и т. д. Прибор позволяет определить время реакции человека на световой и звуковой сигналы. В приборе имеются лампочки (или светодиоды) трех цветов и звуковой излучатель. Перед началом испытания следует нажать кнопку «Старт».
После ее нажатия через произвольное время в интервале 10–15 с включится звуковой или световой сигнал. Испытуемый должен нажать кнопку, соответствующую поданному сигналу. При этом производится отсчет времени, прошедшего с момента подачи сигнала и нажатия соответствующей кнопки. Измеренное время высвечивается на индикаторе. Для проведения нового испытания следует снова нажать кнопку «Старт».
Простой одноголосный электромузыкальный инструмент. Представляет собой программно реализованный генератор звуковых прямоугольных импульсов. Микроконтроллер проверяет нажатие кнопок клавиатуры и в соответствии с нажатой клавишей формирует звуковой сигнал нужной частоты.
Игра «Красный или зеленый». Внешне игра состоит из кнопок «Красный», «Зеленый» и двух светодиодов — красного и зеленого. После того как включена схема, судья дает команду, и каждый из двух игроков старается быстрее нажать свою кнопку. При этом игра реагирует на нажатие только одной кнопки, при этом загорается соответствующий ей светодиод.
Внимание, реакция и чувство ритма. Прибор имеет светодиодный индикатор, переменный резистор для установки частоты смены цифр на индикаторе, кнопки «Зажечь/погасить индикатор» и «Фиксация». После включения прибора на индикаторе будут поочередно появляться числа от 0 до 9. Скорость их изменения зависит от положения переменного резистора. Одно нажатие на кнопку «Зажечь/погасить» индикатор включает, а следующее — выключает. Счет при этом продолжается. Работают с прибором вдвоем. Проверяющий включает прибор и вращением переменного резистора устанавливает частоту смены цифр на индикаторе, а затем предлагает испытуемому непрерывно фиксировать нажатием кнопки «Фиксация» какую-нибудь одну цифру.
Модель светофоров на перекрестке
Двухтональный электронный звонок.
Цифровой регулятор мощности для нагрузок при напряжении 220 В с гальванической развязкой силовой части и цепей управления.
Автоматическое зарядное устройство, проверяющее ток зарядки, напряжение на аккумуляторах, длительность зарядки и температуру аккумуляторов.
Простой метроном с регулированием скорости подачи звуковых сигналов двумя кнопками — «Быстрее» и «Медленнее».
Камертон музыканта — звуковой генератор, воспроизводящий ноту «ля» — звуковой сигнал с частотой ровно 440 Гц.
Сложный проект, но достаточно интересный — микрокомпьютер карманного формата. Индикация может быть как на знаковых ЖКИ-индикаторах со встроенным контроллером, так и на графических ЖКИ-индикаторах, клавиатура — 64 клавиши, звуковой излучатель, COM-порт, позволяющий обмениваться информацией с настольным ПК. Можно добавить LPT-порт для подключения к принтеру. Для хранения информации можно предусмотреть специальный разъем для подключения электрически перепрограммируемой микросхемы постоянной памяти для хранения программ для микрокомпьютера. Современные микросхемы позволяют сделать такой микрокомпьютер достаточно компактным, быстрым и экономичным. Самое сложное в его разработке — написание программного обеспечения.
Сделаем простой AVR микроконтроллер
Меня часто спрашивают: «Чем отличается микроконтроллер от ПЛИС?» Ну что тут можно ответить? Это как бы разные вещи… Микропроцессор последовательно выполняет команды, описанные в его программе. Работа ПЛИС в конечном счете определяется принципиальной электрической схемой, реализованной внутри чипа. Архитектура микроконтроллера, то есть тип процессора, количество портов ввода вывода, интерфейсы, определяется производителем. Микросхема микроконтроллера изготовлена на заводе и изменить ее нельзя. Можно только написать программу, которую он будет исполнять. ПЛИС — это свобода для творчества. Архитектура реализуемого устройства может быть почти любая, лишь бы поместилась вся логика в чип. В ПЛИС можно, например, попробовать реализовать даже и микроконтроллер! Попробуем?
Один из самых распространенных микроконтроллеров — это 8-ми разрядные RISС процессоры семейства AVR компании Atmel. В этой статье я расскажу как реализовать «почти» совместимый с AVR микроконтроллер внутри нашей ПЛИС на плате Марсоход.
Прежде, чем начинать делать свою реализацию микроконтроллера, конечно, следует изучить внутренности контроллера AVR. Нужно как минимум знать систему команд микропроцессора AVR. На нашем сайте можно скачать его описание:
Система команд микроконтроллера AVR ( 703303 bytes )
Мы не будем ставить себе целью полностью повторить поведение чипа Atmel, мы хотим сделать наш микропроцессор лишь частично совместимым. Полностью повторить можно, но нужна ПЛИС гораздо большего объема. У нас на плате Марсоход стоит CPLD EPM240T100C5, значит у нас есть всего-навсего 240 триггеров и логических элементов.Кроме триггеров и логики в нашей ПЛИС имеется последовательная флеш память UFM объемом 512 слов по 16 бит. В этой флеш памяти мы будем хранить программу микроконтроллера. Удобно, что слова, хранимые во флеш, имеют разрядность 16. Все команды процессора AVR также шестнадцатиразрядные. Кое-что про UFM мы уже писали на нашем сайте. У нас был проект для ПЛИС платы Марсоход, который выполнял чтение из UFM памяти.
«Оперативной памяти» в нашей ПЛИС нет. Ну значит не будет памяти у нашего микроконтроллера, жаль но это нас не остановит.
У микроконтроллера AVR имеется 32 восьмиразрядных регистра общего назначения. Нижняя группа регистров r0-r15 может быть использована только в командах с операндами-регистрами. Верхняя группа регистров r16-r31 может использоваться в командах и с непосредственными операндами. Поскольку места внутри нашего чипа на плате Марсоход действительно не много, нам придется реализовать только некоторые регистры. Это довольно существенное ограничение, и его нужно будет учитывать при написании программ для нашего микроконтроллера.
Мы реализуем только 7 регистров: r16-r22:
- Первые 4 регистра r16…r19 — это просто регистры.
- Регистр r20 — это тоже обычный регистр, только его биты мы подключим к 8-ми светодиодам платы Марсоход.
- Регистр r21 — это тоже обычный регистр, но его биты мы подключим к выводам управления шаговых двигателей на плате Марсоход.
- Регистр r22 — только для чтения. К нему подключены входы от 4-х кнопочек платы Марсоход.
Схема нашего микроконтроллера создана в среде Altera QuartusII и выглядит вот так (нажмите на картинку, чтобы увеличить):
Наш микроконтроллер работает по простому алгоритму:
- Считывает из флеш памяти UFM очередную команду.
- Декодирует команду и выбирает для нее нужные операнды из регистров или непосредственно из кода команды.
- Выполняет команду в арифметико-логическом устройстве.
- Запоминает результат исполнения команды в регистре приемнике, определяемом командой.
- Переходит к исполнению следующей команды.
У нас сейчас нет цели сделать высокопроизводительный микроконтроллер, мы не будем делать конвейерную обработку данных. Это объясняется тем, что команды из флеш памяти чипа мы можем считывать только в последовательном формате, то есть на чтение одной команды нужно как минимум 16 тактов. Быстрее здесь сделать нельзя (да нам и не нужно сейчас).
Ход выполнения программы может изменяться в зависимости от результата исполнения команд. Специальные команды переходов позволяют переходить к нужной операции в нужных условиях.
Перечислим команды микроконтроллера AVR, которые мы собираемся реализовать:
ADD 0000 11rd dddd rrrr
SUB 0001 10rd dddd rrrr
AND 0010 00rd dddd rrrr
EOR 0010 01rd dddd rrrr
OR 0010 10rd dddd rrrr
MOV 0010 11rd dddd rrrr
CP 0001 01rd dddd rrrr
LSR 1001 010d dddd 0110
SUBI 0101 KKKK dddd KKKK
ANDI 0111 KKKK dddd KKKK
ORI 0110 KKKK dddd KKKK
CPI 0011 KKKK dddd KKKK
LDI 1110 KKKK dddd KKKK
BREQ 1111 00kk kkkk k001
BRNE 1111 01kk kkkk k001
BRCS 1111 00kk kkkk k000
BRCC 1111 01kk kkkk k000
Слева написаны названия команд, а справа — их бинарное представление (кодирование). Так буква «r» обозначает регистр источник, буква «d» — регистр приемник, «K» — это непосредственно операнд.
Конечно — это только малая часть от «настоящей системы команд», но уже и эти команды позволять писать вполне работающие программы.
У нас будет упрощенное АЛУ (Арифметико-Логическое Устройство). Оно реализует только некоторые, наиболее употребительные команды, а так же всего 2 флага для условных переходов: «Z» и «C».
Флаг «Z» устанавливается, если результат АЛУ это ноль. Если результат из АЛУ не нулевой, то флаг «Z» сбрасывается. Флаг «C» устанавливается при возникновении переноса в арифметических операциях ADD и SUB/SUBI или сравнения CP/CPI. Флаги влияют на исполнение команд условных переходов: флаг «Z» влияет на BREQ, BRNE, а флаг «C» влияет на BRCS, BRCC.
Вообще всеь проект мы уже реализовали и его можно взять здесь:
Ядро микропроцессора Atmel AVR ( 109584 bytes )
.Исходный текст нашего ядра AVR написан на языке Verilog и его можно посмотреть здесь.
Теперь посмотрим, как мы сможем написать программу для нашего микроконтроллера? Для написания программы на языке ассемблер воспользуемся средой разработки компании Atmel AVRStudio4. Эту среду разработки можно скачать прямо с сайта компании Атмел (после регистрации), вот здесь. Или поищите в яндексе — наверняка найдете в свободном доступе.
Создаем проект в AVRStudio4 и пишем простую программу. Программа будет моргать светодиодом на плате Марсоход и опрашивать состояние нажатых кнопочек. Если нажать одну кнопочку, то моргающий светодиод «побежит» в одну сторону, а если нажать другую кнопочку, то светодиод «побежит» в другую сторону. Вот исходный текст на ассемблере для нашего примера:
.include «1200def.inc»
.device AT90S1200
.cseg
.org 0
start:
;initial one bit in register
ldi r16,$80
rd_port:
;read port (key status)
mov r17,r22
cpi r17,$0f
;go and blink one LED if no key pressed
breq do_xor
cpi r17,$0e
;go and right shift LEDs if key[0] pressed
breq do_rshift
cpi r17,$0d
;go and left shift LEDs if key[1] pressed
breq do_lshift
;jump to read keys
or r16,r16
brne rd_port
do_rshift:
cpi r16,1
breq set80
lsr r16
mov r20,r16
brne pause
set80:
ldi r16,$80
mov r20,r16
or r16,r16
brne pause
do_lshift:
cpi r16,$80
breq set1
lsl r16
mov r20,r16
brne pause
set1:
ldi r16,$01
mov r20,r16
or r16,r16
brne pause
do_xor:
eor r20,r16
pause:
ldi r18,$10
cycle2:
ldi r19,$FF
cycle1:
or r19,r19
or r19,r19
subi r19,1
brne cycle1
subi r18,1
brne cycle2
or r16,r16
brne rd_port
Видите? Чтение состояния кнопочек — это чтение из регистра r22. Изменение состояния светодиодов — это запись в регистр r20.
Настройте AVRStudio так, что бы выходной формат был «Generic». Это в свойствах проекта, «Assembler Options», настройка «Hex Output Format».
После компиляции программы получается вот такой текстовый файл с кодами программы:
000000:e800
000001:2f16
000002:301f
000003:f0c1
000004:301e
000005:f021
000006:301d
000007:f059
000008:2b00
000009:f7b9
00000a:3001
00000b:f019
00000c:9506
00000d:2f40
00000e:f471
00000f:e800
000010:2f40
000011:2b00
000012:f451
000013:3800
000014:f019
000015:0f00
000016:2f40
000017:f429
000018:e001
000019:2f40
00001a:2b00
00001b:f409
00001c:2740
00001d:e120
00001e:ef3f
00001f:2b33
000020:2b33
000021:5031
000022:f7e1
000023:5021
000024:f7c9
000025:2b00
000026:f6d1
Этот файл нам почти подходит для QuartusII. В нашем проекте для ПЛИС есть файл avr_prog. mif (Memory Initialization File), куда мы и вставляем полученный из AVRStudio код (только нужно добавить точку с запятой в конце каждой строки). Таким образом, после компиляции QuartusII эти коды попадут во флеш UFM нашей ПЛИС.
Теперь можно компилировать и пробовать наш проект в плате Марсоход. Вот видеоролик, демонстрирующий работоспособность нашего процессора:
youtube.com/embed/zABN8733wlY?rel=0&autoplay=1> <img src=https://img.youtube.com/vi/zABN8733wlY/hqdefault.jpg>▶</a>»>Все работает так как и задумывалось!
Обратите внимание, что после компиляции, весь проект занимает только 205 логических элемента из 240 имеющихся в нашей ПЛИС. Это значит, что наш микроконтроллер можно и дальше усложнять или добавить какую-то новую логику. Так что проект может быть полезен для создания Ваших устройств.
авр проект – Электроника Проекты Схемы
Электроника
»
авр проект
gevv | 07.10.2022
STM32F103, STM32F303, ATmega32, ATmega328p Проект управления усилителем представляет собой модуль управления для вашего аудиоусилителя. Он поддерживает различные звуковые процессоры, управляемые I²C/SPI, и FM-тюнеры. Все исходные коды и чертежи печатных плат были опубликованы. Он также имеет ЖК-анализатор спектра. TDAXXXX — отличный источник микросхем управления цифровым звуком PTXXXX. Библиотека, файлы кода…
гевв | 27.02.2022
Я сделал визуально другую версию 10-канальной схемы 100 Led Spectrum Analyzer, которую использовал в звуковой системе 2.1. Качество фильтра Led Spectrum Analyzer составляет около 6, а средние частоты составляют 31 Гц, 62 Гц, 125 Гц, 250 Гц, 500 Гц, 1 кГц, 2 кГц, 4 кГц, 8 кГц и 16 кГц. J5 на схеме меняется…
gevv | 27.02.2022
Автор сказал работать в виде «Морской бриз» на вентилятор, а я подумал об экономии электричества. Цепь управления скоростью вентилятора работает прерывисто в виде легкого ветерка, а не постоянно. Симистор MAC16N 16A 800V управляется оптопарой драйвера симистора MOC3082 на основе…
гевв | 30.09.2021
ATtiny13 Led Stars Имеются исходные чертежи печатной платы, файлы исходного и шестнадцатеричного кода, файлы моделирования Proteus. Добавлены транзисторы для увеличения количества светодиодов. В файлах есть три варианта печати. По схеме: вместо светодиодов через резистор 1кОм к базе NPN транзистора BC547, далее светодиоды…
gevv | 20. 09.2021
В схемах измерителя громкости светодиоды светятся в зависимости от уровня звукового сигнала. В этой схеме светодиоды светят по определенным частотам (различные расчеты и ШИМ-управление). Светодиодная красочная музыкальная схема, танцевальные огни или свет для дискотек, созданный с помощью микроконтроллера ATtiny13. Это позволяет светодиодам загораться в соответствии с…
гевв | 2021/09/19
Цепь измерителя громкости, которая может работать в обычном режиме с удержанием пика, имеет пиковый индикатор 2×20 светодиодов. Светодиоды управляются микроконтроллером Atmega8. Диапазон отображения составляет от -34 до +4 дБ. Светодиоды управляются путем мультиплексирования 4 светодиодов в 10 шагов, частота мультиплексирования составляет около 100 Гц. R1…R4, их резистор (270 Ом) ограничивает…
гэвв | 12.01.2021
Несколько лет назад я поделился схемой Led Heart на микроконтроллере ATmega88. Схема LED Heart, которую я применил, управляется микроконтроллером ATmega8. Я сделал много украшений на верхнем этаже печатной платы, и печатная плата стала более полезной для дополнительных схем. В схеме светодиодного сердца 22 порта ATmega8 (ATmega8A-AU…
гевв | 03.04.2020
Помимо измерения напряжения, тока, мощности и температуры, прибор также может рассчитывать сопротивление подключенной нагрузки. Впрочем, это не самое главное отличие — важнее то, что этот измеритель может измерять и отрицательное напряжение, и ток. Рекомендации: счетчик можно использовать в лабораторном блоке питания или другой системе питания.…
gevv | 02.04.2020
Проект ATmega168 является продолжением устройств с интерфейсом DMX, предназначенных для сценографов, людей, занимающихся постановкой мероприятий, музыкантов и т. д. Наш контроллер способен управлять четырьмя сервоприводами, с помощью которых можно, за например, управлять освещением или анимированными элементами декораций. После отключения передачи сервоприводы могут находиться в…
гевв | 02. 04.2020
Заезд автомобиля в гараж после наступления темноты может привести к летальному исходу, если в нем нет освещения. Представленная система автоматически включает освещение, не выходя из автомобиля. Он также не забудет отключить их позже. Система выключателей рассчитана на питание 230 В переменного тока. Он работает, обнаруживая луч света (приближающийся…
AVR Workshop | No Starch Press
Практическое введение с 60 проектами
Джон Боксалл
сентябрь 2022 г., 376 стр.
ISBN-13:
9781718502581
Печатная книга и БЕСПЛАТНАЯ электронная книга, 44,99 долл. США
Электронная книга (PDF, Mobi и ePub), 35,99 долл. США
Загляните внутрь!
Загрузить Глава 8: УПРАВЛЕНИЕ ДВИГАТЕЛЯМИ С ПОМОЩЬЮ МОП-транзисторов
Семинар AVR представляет собой подробное введение в работу с универсальными 8-разрядными микроконтроллерами Microchip AVR, составляющими основу Arduino и совместимых плат. Независимо от того, являетесь ли вы абсолютным новичком или энтузиастом электроники, 60 проектов книги научат вас создавать собственные AVR-устройства шаг за шагом.
Вы освоите навыки программирования на C, необходимые для непосредственной работы с недорогими микроконтроллерами ATmega328P-PU и ATtiny85. Вы рассмотрите основные свойства тока, напряжения и мощности; научитесь безопасно работать с программаторами и макетами USBasp; и следуйте схемам, чтобы построить схемы. Вы будете управлять цифровым выводом с помощью побитовой арифметики, принимать пользовательский ввод с помощью кнопок и аналого-цифровых преобразователей и проверять напряжение одноэлементной батареи.
По мере изучения книги вы будете создавать забавные и полезные устройства, подобные этим:
Светодиодный дисплей с изменяющимися цветами и яркостью
Калькулятор с четырьмя функциями, который подключает AVR к вашему компьютеру
Вентилятор с регулируемой температурой и двухколесный робот-автомобиль
Цифровые часы реального времени, отображающие дату и время на ЖК-дисплее
Вы также изучите более продвинутые навыки, например, как:
Управляющие двигатели с широтно-импульсной модуляцией и МОП-транзисторами
Работайте с такими частями, как ЖК-дисплеи, сервоприводы и интерфейсные микросхемы, и напишите свои собственные библиотеки AVR
Реализовать шины SPI и I2C с помощью AVR
Использовать аппаратные прерывания, таймеры и EEPROM
К концу книги вы научитесь использовать широкий спектр датчиков, двигателей, дисплеев и многого другого с микроконтроллером AVR, чтобы вы могли воплощать в жизнь свои собственные изобретения.