Эмулятор ПЗУ — отладчик для MCS-51 |
Описываемая ниже конструкция была создана примерно 8 лет назад. Однако, судя по моей электронной почте, она по сей день не утратила актуальности. Ниже приводится описание конструкции, можно сказать, «по просьбам читателей».
Не из-за крутизны, а от бедности...
До недавнего времени эмулятор ПЗУ являлся чуть ли не единственным инструментом разработчика ПО для микроконтроллеров. И лишь в последнее время стали доступными фирменные эмуляторы, а в некоторых микроконтроллерах появились встроенные отладочные возможности. Однако и сегодня фирменные средства отладки не по карману многим разработчикам. При работе на семействе микроконтроллеров MCS-51 есть довольно простой выход. Дело в том, что эти микроконтроллеры способны выполнять программу из внешней памяти. Для этого достаточно установить на выводе EA низкий логический уровень. Иногда в таком виде они и используются в конструкции – программа выполняется из внешнего ПЗУ, хотя в настоящее время в подавляющем большинстве случаев используется встроенная память программ. В качестве внешней памяти программ можно применить ОЗУ со схемой загрузки кодов программы с компьютера. Это и есть эмулятор ПЗУ. Загружая в ОЗУ версии отлаживаемой программы, можно наблюдать ее работу на реальном «железе», что невозможно сделать с помощью программных симуляторов.
Мне могут возразить: зачем сегодня нужен эмулятор ПЗУ, если существуют совместимые микроконтроллеры фирмы Atmel с внутрисхемным программированием? Все-таки преимущества у эмулятора имеются.
Какими преимуществами обладает эмулятор?
- возможность использования любого микроконтроллера в качестве отладочного: будь это обычный AT89С52 или быстрый DS80C320. Некоторые микроконтроллеры имеют уникальную периферию, которой может и не быть в вариантах с внутрисхемным программированием. Более того, эмулятор ПЗУ можно использовать с любыми микропроцессорами, которые позволяют работать с 8-разрядной внешней памятью программ
- скорость загрузки программ в эмулятор намного превышает программирование внутренней памяти программ. Разница очень разительна: десятки секунд для программирования и порядка секунды для загрузки эмулятора. Такая скорость смены версий программы позволяет подбирать константы на реальном устройстве, оттачивать поведение пользовательского интерфейса и прочее. Это несомненно делает конечный программный продукт качественнее
- неограниченное количество перезагрузок эмулятора. Несмотря на то, что современная встроенная flash-память программ имеет довольно большое число циклов стирания-записи, при отладке программы постоянно не дает покоя мысль о ресурсе памяти. Это вынуждает лишний раз не перепрограммировать микроконтроллер, что увеличивает время поиска ошибок
- пожалуй, самое главное. Описываемый эмулятор ПЗУ имеет дополнительные аппаратные средства, которые позволяют в процессе выполнения программы просмотреть значения интересующих переменных, модифицировать эти значения и организовать точки останова. Возможности, конечно, не очень широкие, но все равно это несоизмеримо лучше симулятора, так как выполнение программы происходит в конкретном устройстве со всей периферией
Описание конструкции эмулятора
Эмулятор ПЗУ выполнен в виде ISA-карты (рис 1). При разработке эмулятора использование COM-порта было сразу отброшено, так как скорость обмена при этом явно недостаточна. Причем дело не столько во времени загрузки кодов программы, сколько в скорости работы отладочных функций. Они должны работать возможно быстрее, чтобы с включенной отладкой программа выполнялась практически так же, как и с выключенной. Остались два варианта: LPT-порт и ISA-шина. Вечно занятый LPT-порт не хотелось нагружать еще одним устройством, в то время как использование разных дополнительных ISA-карт было привычным делом. Поэтому был выбран ISA-вариант. В принципе, конструкцию можно переделать и на LPT-порт.
Рис. 1. Внешний вид эмулятора.
Принципиальная схема эмулятора (рис. 2) довольна громоздка, но не сложна. Сразу напрашивается какая-нибудь Altera, но в те далекие времена о ней никто у нас даже не слышал. Кратко рассмотрим работу схемы.
Рис. 2. Принципиальная схема эмулятора.
В режиме загрузки кодов программы в ОЗУ (при этом сигнал RU=1) адрес ячейки ОЗУ записывается в регистры U2 и U3. Затем через шинный формирователь U1 передаются данные. Причем данные можно как записывать в ОЗУ, так и читать из него. Эта возможность необходима для проверки правильности загрузки.
Конструкция эмулятора допускает возможность установки разных типов микросхем ОЗУ (максимум – 32Кбайта). Для этого в схеме имеется дешифратор U13 и перемычки выбора типа микросхем ОЗУ. Однако данная возможность потеряла всякую ценность, так как в настоящее время легко доступны микросхемы с объемом 32Кбайта в одном корпусе с временем доступа 70нс и менее. В связи с этим на принципиальной схеме положение перемычек показано именно для такого случая и назначение каждой из них не объясняется.
После загрузки кодов в ОЗУ эмулятора программу можно запустить на выполнение, для чего нужно установить сигнал RU=0 на выходе регистра U4. При этом шинный формирователь U1 выключается, а данные передаются через формирователь U10, который управляется сигналами OE и CE, поступающими с отлаживаемого устройства. При этом снимается сигнал RESET микроконтроллера, который формируется эмулятором (элемент U16C). Полярность сигнала RESET выбирают заранее с помощью бита HL (регистр U4). При эмуляции ПЗУ разных объемов неиспользуемые старшие разряды адреса необходимо отключать. Для этого служит микросхема U7, которая управляется сигналами выбора режима M0 – M3, поступающими с регистра U4.
Микросхемы U8, U9, U14, U15, U17 и U18 используются для дешифрации адреса на шине ISA и для формирования внутренних сигналов записи и чтения.
Аппаратная поддержка отладочных функций реализована на микросхемах U11 и U12 (регистры обмена). Идея заключается в следующем. Посредством дополнительных сигналов CS, WR и RD, поступающих с отлаживаемой платы, эти микросхемы включены в адресное пространство внешней памяти данных микроконтроллера. Таким образом, через них возможен двухсторонний обмен данными между микроконтроллером и компьютером. Ну а какими данными – это определяется специальным программным обеспечением. Возможность такого обмена позволяет на этапе отладки программы просматривать и модифицировать значения переменных, осуществлять останов в определенном месте программы. При этом расходуется минимум ресурсов микроконтроллера отлаживаемого устройства: всего один адрес для записи и чтения в адресном пространстве внешней памяти данных. Программная поддержка режима обмена данными заключается в использовании в нужных местах прикладной программы макроопределений, содержащихся в специальной библиотеке отладочных функций.
Как уже говорилось ранее, эмулятор конструктивно выполнен в виде ISA-карты. Для подключения отлаживаемого устройства используется плоский 34-жильный кабель. Удобно для изготовления этого кабеля использовать готовый кабель от floppy-дисководов. Кабель укорачивают таким образом, чтобы на нем оставались два 34-контактных разъема и за один из разъемов ещё выступал отрезок кабеля длиной 4-5 см. У этого отрезка удаляют 6 жил (с 29-й по 34-ю) и на получившийся 28-жильный отрезок накалывают 28-контактную DIP-вилку (рис. 3). Контакты разъема платы эмулятора распределены таким образом, что все сигналы автоматически попадают на нужные контакты вилки. При отсутствии готовой вилки можно использовать 28-контактную панельку для микросхемы, но тогда кабель придется на эту панельку сверху распаять. Находящийся на кабеле рядом с вилкой 34-контактный разъем будет использоваться для подключения дополнительных сигналов и для подключения переходных плат.
Рис. 3. Кабель эмулятора.
По ссылке в конце статьи можно найти файл разводки печатной платы эмулятора в формате PCAD 4.5. Эта разводка практически соответствует рис. 1, за исключением того, что блокировочные конденсаторы заменены на SMD и добавлен защитный резистор (порядка 10 ом) в цепь +5V, которая выходит на разъем.
Регистры эмулятора
Информация, представленная в этом разделе, требуется только для самостоятельного написания утилит работы с эмулятором.
Эмулятор ПЗУ занимает в адресном пространстве устройств ввода-вывода адреса с 3E0H по 3E7H. По адресу 3E0Н можно производить запись и чтение данных ОЗУ. По адресу 3E1Н можно производить только запись младшего байта адреса ОЗУ. По адресу 3E2Н можно производить только запись старшего байта адреса ОЗУ, причем старший бит D7 не используется. Таким образом можно адресовать максимум 32 Кбайта памяти. По адресу 3E3Н можно производить только запись управляющего байта, назначение отдельных битов которого приведено в таблице. По адресу 3E4Н можно производить запись и чтение регистров обмена. В краткой форме описание регистров эмулятора приведено в таблице:
![](/nuke/spaw/images/topics/table_1.gif)
Как работать с эмулятором?
В отлаживаемом устройстве микроконтроллер работает с внешним ПЗУ.
В этом случае вилку эмулятора необходимо включить в панельку для ПЗУ в отлаживаемом устройстве. Но это еще не все. Как минимум, должен быть подключен еще один сигнал: это сигнал RESET микроконтроллера. Этот сигнал доступен на 34-контактном разъеме, который находится рядом с вилкой на кабеле. Обычно RC-цепочки, подключенные к ножке RESET микроконтроллера, не мешают нормальной работе эмулятора. Однако если вход RESET подключен к выходу логического элемента, при отладке его нужно отключить.
Отладочные функции (внешняя память данных уже используется).
Для того, чтобы задействовать отладочные функции, необходимо подключить еще несколько сигналов. Это сигналы WR, RD и CS. Активные уровни всех этих сигналов - низкие. Если в отлаживаемом устройстве уже что-то находится в адресном пространстве внешней памяти данных, то сигналы WR и RD подключаются к соответствубщим ножкам микроконтроллера, а сигнал CS подключается к свободному выходу дешифратора адреса. Если свободного выхода нет, то одно из внешних устройств придется отключить. Вообще, при проектировании устройства, которое предпологается отлаживать с помощью этого эмулятора, такой выход необходимо предусмотреть. Нужно отметить, что сигнал CS должен вырабатываться при обращении к соответствующему адресу как при чтении, так и при записи. Если в устройстве используются отдельные дешифраторы для записи и чтения, то сигнал CS можно заземлить, а сигналы WR и RD подключить на свободные выходы соответствующих дешифраторов, принадлежащие одному адресу. В отладочных подпрограммах всегда используется полный 16-разрядный адрес, так что не имеет значения, какая часть адреса аппаратно дешифрируется.
Отладочные функции (внешняя память данных не используется).
Если в отлаживаемом устройстве внешняя память данных не используется, то для того, чтобы задействовать отладочные функции, необходимо временно «забрать» сигналы WR и RD микроконтроллера. К ним нужно подключить одноименные сигналы эмулятора. Сигнал CS необходимо заземлить. Потеря двух линий порта – вещь неприятная, однако это намного менее ощутимо, чем потеря, например, прерывания (а это требуют некоторые другие отладчики). Можно временно переопределить порты и переключить внешние устройства таким образом, чтобы терялись два наименее важных сигнала. При новой разработке на линии WR и RD именно такие сигналы и нужно назначать. Необходимо отметить, что в режиме отладки прикладная программа не должна изменять уровней на линиях WR и RD.
В отлаживаемом устройстве микроконтроллер работает с внутренним ПЗУ.
Если эмулятор ПЗУ должен использоваться для отладки устройства, где микроконтроллер работает с внутренней памятью программ, то собственно эмулятора ПЗУ уже недостаточно. Требуется еще и переходная плата, которая совместно с эмулятором ПЗУ эмулирует конкретный микроконтроллер.
Эмуляция AT89CX051.
Самый простой случай, когда требуется эмулировать микроконтроллер семейства MCS-51 в «урезанном» корпусе. Наиболее популярными такими контроллерами являются 20-выводные AT89C2051 и AT89C4051 фирмы Atmel. Для их эмуляции достаточно ресурсов 40-выводной AT89C51, если ее дополнить аналоговым компаратором. Именно для этих целей была создана переходная плата 1 (рис. 4).
Рис. 4. Переходная плата 1.
Эта плата с помощью шлейфа с 34-контактными разъемами подключается к эмулятору ПЗУ, а к отлаживаемому устройству она подключается с помощью шлейфа с 20-контактной DIP-вилкой (в этом плане корпус SOIC представляет определенные трудности).
Рис. 5. Принципиальная схема переходной платы 1.
На переходной плате (рис. 5) установлена 40-контактная панелька, куда может быть вставлен эмулирующий микроконтроллер U1. Дополнительно на плате установлена защелка адреса U2 и панелька для аналогового компаратора U3. Для не очень критичных задач может использоваться компаратор КР544СА3 (LM311), хотя допустимый диапазон входного напряжения у него уже, чем у встроенного компаратора. Компаратор может быть включен с помощью перемычек J3 и J4. Выход компаратора может быть подключен как к порту P3.6 (соответствует внутреннему подключению), так и к порту P1.0. Последнее необходимо в том случае, когда задействованы функции отладки и порт WR (P3.6) занят. Отладочные функции могут быть включены или выключены с помощью перемычек J1 и J2. Отключение функций понадобилось для того, чтобы иметь возможность задействовать все порты. При использовании отладочных функций свободными являются только 14 линий портов (а не 15). Переходная плата имеет дополнительные разъемы земли и питания, что позволяет прямо к ней подключать простейшие внешние устройства.
Эмуляция 8XC5X, порты P0 и P2 которого используются для подключения внешней памяти данных.
На описанной выше переходной плате имеются дополнительные разъемы, которые подключены к портам P0 и P2. Хотя при работе с эмулятором (т.е. с внешней памятью программ) эти порты и нельзя использовать для ввода-вывода, зато ничто не мешает использовать их для подключения внешней памяти данных (в общем случае – внешних устройств, расположенных в адресном пространстве внешней памяти данных). Если в отлаживаемом устройстве микроконтроллер используется именно так, то описанной выше переходной платы вполне достаточно. Нужно лишь дополнить ее шлейфом с 40-контактной DIP-вилкой.
Эмуляция 8XC5X, все порты которого используются для ввода-вывода.
Это самый тяжелый случай. Когда требуется полностью эмулировать «полноразмерный» микроконтроллер, имеющий четыре 8-разрядных порта, обычный микроконтроллер в качестве отладочного не подходит. Конечно, можно отлаживать проект «по частям», временно переопределяя некоторую часть портов на свободные порты, затем переопределяя другую часть и т.д. Большинство проектов таким способом отладить удается, однако такой процесс отладки трудоемок и требует повышенных затрат времени. Положение спасает тот факт, что в мире производится большое количество всевозможных клонов 51-х микроконтроллеров, причем среди них есть и такие, которые имеют дополнительные порты ввода-вывода. Одним из таких микроконтроллеров является SAB80C535 фирмы Siemens. Этот микроконтроллер имеет 52-е ядро, кроме того, он имеет встроенный АЦП, сторожевой таймер, блоки захвата/сравнения и т.д. Однако самым важным является то, что этот микроконтроллер имеет дополнительные порты, которые могут подменить собой занятые внешней памятью программ порты P0 и P2. При этом требуются минимальные изменения в исходном тексте программы: нужно лишь подключить внешний файл с переопределениями портов. На основе SAB80C535 сделана переходная плата 2 (рис. 6).
Рис. 6. Переходная плата 2.
Эта плата имеет панельку для микроконтроллера U1 (корпус PLCC-68), защелку адреса U2, 34-контактный разъем XP1 для подключения эмулятора ПЗУ и четыре 8-контактных разъема (эмулируемые порты P0, P1, P2 и P3) для подключения шлейфа с 40-контактной DIP-вилкой (рис. 7). SAB80C535 имеет инверсную полярность сброса по отношению к 80С51, поэтому используется инвертор на транзисторе VT1. Аппаратная инверсия применена для обеспечения совместимости ПО.
Рис. 7. Принципиальная схема переходной платы 2.
У SAB80C535 есть некоторые особенности. При эмуляции микроконтроллеров с 51-м ядром нужно учесть всего одну тонкость. Дело в том, что у SAB80C535 регистр приоритетов прерываний IP расположен по адресу A9H (а не B8H) и не имеет битовой адресации. Поэтому вместе с переопределением портов необходимо переопределить еще и адрес этого регистра, а в программе не использовать прямую адресацию его битов. При эмуляции микроконтроллеров с 52-м ядром следует учесть, что таймер 2 построен несколько по-другому. Например, он не может служить источником частоты синхронизации для последовательного порта. Вместо него может использоваться отдельный аппаратный делитель. Есть и другие отличия, которые изложены в datasheet на SAB80C535.
По ссылке в конце статьи можно найти файл libr535.asm, который содержит необходимые переопределения адресов. Там же есть утилиты для работы с эмулятором. Их две: emu.exe и emudbg.exe.
Утилита emu.exe
Эта утилита позволяет загрузить код программы в ОЗУ эмулятора и переключить эмулятор в режим выполнения программы. Утилита написана под DOS, необходимые параметры передаются в командной строке:
emu.exe [-l] [-n] filename
[-l] – необязательный параметр, который задает активный уровень сигнала RESET. Может принимать значения l или h. По умолчанию принимается h.
[-n] – необязательный параметр, который задает объем эмулируемого ПЗУ. Может принимать значения a (auto), 2, 4, 8, 16, 32 – объем ПЗУ в килобайтах. По умолчанию принимается a. Это означает, что будет выбран минимально возможный для входного файла размер ПЗУ.
filename – обязательный параметр, который задает имя файла, подлежащего загрузке в ОЗУ эмулятора. Файл должен быть в двоичном формате, формат Intel HEX утилита не понимает. Эта же утилита также может быть использована просто для установки/снятия сигнала RESET без перезагрузки ОЗУ:
emu.exe –l
-l – уровень, который требуется установить на линии RESET. Может принимать значения l или h. Утилита emudbg.exe
Эта утилита позволяет загрузить код программы в ОЗУ эмулятора, переключить эмулятор в режим выполнения программы и перейти в режим отладки. Параметры командной строки такие же, как и для первой утилиты. Окно отладчика показано на рис. 8. Отладчик имеет лишь самые примитивные функции, хотя аппаратная часть эмулятора позволила бы сделать намного больше. На мой взгляд, по сравнению с написанием полноценной интегрированной среды данный отладчик потребовал примерно 1% усилий, в то же время он позволяет решить 90% проблем. Стоит ли тратить дополнительные усилия на написание ПО для получения столь малого выигрыша?
Рис. 8. Вид окна отладчика.
Отладчик никак не связан с исходным текстом. Общеизвестные SFR он показывает в виде имен, все остальные (как и ячейки внутренней памяти данных) – в виде адреса. Точки останова также представляются в виде адреса. Задействованы следующие функциональные кнопки:
F1 – продолжение выполнения программы после точки останова F2 – запуск/сброс программы F5 – включение/выключение режима отладки F9 – выход, программа остается работающей F10 – выход и сброс программы В качестве рабочей среды может использоваться любой текстовый редактор, позволяющий запускать внешние программы. Например, это может быть редактор от Borland C++ 2.0. Он позволяет запускать внешние программы (Transfer Programs) и передавать в них имя файла, редактируемого в активном окне. Запуск внешних программ может осуществляться по нажатию «горячих» клавиш. Внешние программы представляют собой bat-файлы, из которых с нужными параметрами командной строки вызываются утилиты эмулятора и транслятор ассемблера. В качестве транслятора используется TASM 3.10 (www.halcyon.com/squakvly/). Все bat-файлы, а также файл конфигурации среды tcdef.dpr можно найти по ссылке в конце статьи. Назначены следующие «горячие» клавиши:
Shift+F10 – запуск ассемблера. Транслируется программа, текст главного модуля которой находится в активном окне редактора. На выходе создается файл в HEX-формате, пригодный для программатора. Shift+F9 – программа транслируется, на диске создается выходной файл в двоичном формате, затем этот файл загружается в эмулятор и программа запускается. Shift+F8 – то же, что и в предыдущем случае, только программа запускается в режиме отладки. Всего имеются 4 отладочные функции, которые можно использовать в прикладной программе:
DEBUGINIT – производит инициализацию отладчика, обязательно должна выполняться перед тем, как будут использоваться другие отладочные функции. Обычно выполняется один раз в начале программы. PRINT(Addr) – позволяет выводить на экран компьютера содержимое ячейки внутренней памяти данных (в том числе и SFR) с адресом Addr. MODIFY(Addr) – позволяет выводить, а при необходимости и модифицировать содержимое ячейки внутренней памяти данных (в том числе и SFR) с адресом Addr. BREAKPOINT – точка останова. Нужно иметь в виду, что если в программу включены отладочные функции, обязательно должны быть подключены сигналы эмулятора WR, RD, CS и правильно определен соответствующий адрес во внешней памяти данных. Если в программе присутствуют отладочные функции, но отладка временно не нужна, то программу можно запустить с помощью утилиты emu.exe (или в emudbg.exe кнопкой F5 выключить отладку). В этом случае отладочные функции не будут производить никаких действий и будут выполняться быстро (порядка 30мкс на 12МГц), что в большинстве случаев просто не повлияет на выполнение программы. Если же время выполнения критично, то для полного исключения отладочных функций их необходимо закомментировать.
Для того, чтобы получить возможность использовать отладочные функции в прикладной программе, необходимо в нее добавить несколько строк:
;Тестовая программа
#INCLUDE "LIBREG.ASM" ;описание SFR 8051.
#INCLUDE "LIBDEF.ASM" ;добавляем определения отладчика.
DBGVA .EQU 030H ;отводим для отладчика две переменные
DBGVV .EQU 031H ;во внутренней памяти данных.
DBGA .EQU 0FFFFH ;определяем адрес отладчика во внешней
;памяти данных. Это адрес, на котором
;вырабатывается сигнал CS для эмулятора.
;Если CS не используется, то любой адрес.
.ORG 0000H ;вектор сброса
LJMP INIT
INIT: MOV SP,#40H ;инициализация стека
DEBUGINIT ;инициализация отладчика
CLR A ;произвольный текст программы
MOV DPTR,#5CH
LOOP: MOV DPL,A
PRINT(DPH) ;показать значение DPH
PRINT(DPL) ;показать значение DPL
PRINT(ACC) ;показать значение аккумулятора
MODIFY(ACC) ;модифицировать значение аккумулятора
BREAKPOINT ;точка останова
SJMP LOOP
#INCLUDE "LIBDBG16.ASM" ;включаем библиотеку отладчика
.END
Необходимо учитывать, что на выполнение отладочных функций, включенных в программу, требуется некоторое время. Например, если в каком-то цикле поставить PRINT(ACC), то этот цикл начнет выполняться медленнее. Это замедление зависит в том числе и от быстродействия компъютера, с которого ведется отладка. При работе отладчика из-под Windows, даже если он запущен в полноэкранном режиме, наблюдается значительное (в 5-10 раз) замедление его работы по сравнению с работой из-под DOS.
Существует еще одно ограничение, связанное с нереентерабельностью отладочных функций: нельзя одновременно использовать эти функции в обработчике прерывания и в основной программе (или одновременно в обработчиках разных прерываний). В принципе, это ограничение можно устранить, если переписать отладочные функции таким образом, чтобы они вместо специальных ячеек памяти пользовались стеком.
Кроме того, следует учесть, что использование отладочных функций увеличивает длину фрагментов кода, поэтому иногда переходы с относительной адресацией могут не достигнуть нужного адреса. В таких случаях может потребоваться некоторая корректировка программы.
И последнее. При работе отлаживаемого устройства с эмулятором ПЗУ помехозащищенность немного понижена. Это связано с влиянием довольно длинного кабеля, которым память программ подключена к микроконтроллеру. Особенно сильно это влияние сказывается при работе с быстрыми микроконтроллерами фирмы DALLAS на высоких тактовых частотах. Из-за того, что отлаживаемое устройство оказывается гальванически связанным с корпусом компьютера, уровень помех оказывается повышенным. Это может ухудшить работу АЦП и аналоговых схем отлаживаемого устройства. Т.е. при работе с эмулятором устройство находится в худших условиях, чем при автономной работе. Это даже может служить неким тестом запаса помехоустойчивости. Добившись нормальной работы с эмулятором, практически можно гарантировать надежную работу устройства в автономном режиме.
Download:
- asmtools.zip (2.9 Kb) — архив содержит библиотеки, bat-файлы и файл конфигурации среды.
- emu.exe (8.6 Kb) — утилита для загрузки эмулятора и запуска программы.
- emudbg.exe (18.5 Kb) — утилита для загрузки эмулятора и отладки программы.
- em_pcb.zip (82.7 Kb) — архив файла разводки печатной платы эмулятора (PCAD 4.5).
Автор проекта: Ридико Леонид Иванович, e-mail: wubblick@yahoo.com
C этой схемой также часто просматривают: |
ЗАЖИГАЛКА ДЛЯ ГАЗА
Зарядное устройство для автомобильных и мотоциклетных батарей
Зарядное устройство для автомобильных аккумуляторов
Имитатор для проверки телефонных аппаратов
Простые датчики для охранной сигнализации
Простой программатор
Маршрутный компьютер-тестер для автомобилей ВАЗ
Автоматический регистратор — выключатель освещения
Электронные часы с будильником на микроконтроллере AT90S2313-10PI
| ![](/images/ru/clear.gif) |
Подключение энкодера к микроконтроллеру PIC
Счётчик людей в помещении, управляющий освещением
Велокомпьютер на микроконтроллере PIC16F628A
Устройство ввода-вывода на микроконтроллера
Два термометра на PIC16F628A и DS18B20
Светодиодные часы с циферблатом
Двоичные часы
Два вывода микроконтроллера PIC управляют шестью светодиодами
Цифровой программируемый таймер на микроконтроллере PIC16F628A
Устройство рисования в воздухе на ATtiny2313
|