Программируем микроволновку или контроллер 40-летней давности
Привет, недавно мне совершенно случайно попалась в руки такая железка:
Ну железка и железка, подумал я… На плате присутствует микроконтроллер РВЕ035, расширитель IO m5l8243p, ИР12 между РФ5 и контроллером и там еще где-то ЛН1 в стороне болтается. Мне сразу понравилась хорошая раритетная ПЗУ на 2Кб РФ5 в панельке в золоте. Думаю, сниму ее, а остальное смело в утиль, бо вся плата залита лаком по самое небалуйся..А потом все-таки стало интересно, а что это такое вообще?
Выяснилось, что это плата управления от советской микроволновки типа Электроника 23 (aka БУВИ-2 aka Фея aka Днепрянка). В интернете быстро нашлась даже схема девайса: http://www.elremont.ru/small_rbt/bt_rem32.php Теперь, когда стало понятно, что это такое, одна рука уверенно потянулась к мусорке, а другая нечаянно вбила в гугле «РВЕ035» и… И я заинтересовался и внимательно вгляделся в плату. Раз есть контроллер, значит для него можно писать программы. Еще прямо на плате есть какой-никакой экран (4 цифры) куда можно выводить всякие матерные ругательства (BABA, SISI, ну, вы поняли). Так же здесь еще есть пьезоэлемент, а значит можно пищать. Ко всему прочему можно 4×4 клавиатуру подключить. Это же прямо девборда какая-то получается, обрадовался я!
Как уже было сказано, на плате установлен контроллер РВЕ035. В России он больше известен по названию КР1816ВЕ35, а вообще, это великий и ужасный Intel 8035 серии MSC-48. Первые экземпляры начали производить в 1976, то есть примерно 40 лет назад. В контроллере нет своей памяти для программ, поэтому он общается по внешней шине с ПЗУ, откуда и читает инструкции на выполнение. Зато есть 64 байта ОЗУ, из которых примерно 32 байта можно использовать как угодно, а остальные предназначены для регистров и стека. Есть таймер, есть прерывание от таймера, есть внешнее прерывание, есть система приоритетов. Короче нормальный олдскульный контроллер, не чета жирным PIC’ам. То, что так долго ждали большевики. Сразу захотелось под него что-нибудь закодить.
Но сперва предстояло решить одну трудность, а именно подключить плату. Как видно из схемы, для питания цифровой части требуется просто +5V, а вот для питания индикатора нужно 2,5V и 30V переменного напряжения.
Кстати про индикатор — это же лампа! Да, теплая ламповая радиолампа, а не какие-то там попсовые светодиоды. И как у лампы у нее есть катод анод и сетка. Такой тип индикаторов называется люминесцентно-вакумный индикатор. Немного подумав над схемой, я увидел, что 30В переменки идут на диодный мостик, значит они выпрямляются. И даже 2.5В тоже идут на диоды и после них на сетку, значит они тоже выпрямляются. Значит, можно попробовать подключить плату к постоянному напряжению. Вместо 30V я подал 12V, вместо 2.5V я подал 3.3V со стандартного блока питания формата ATX. Для этого подпаялся проводками к плате. Получилось так:
Но включив плату, я сначала было разочаровался. Некоторые сегменты на дисплее не светились. Сначала я думал, что 12 вольт не достаточно, но потом внимательно осмотрев плату обнаружил непропай в двух местах рядом с индикатором. Прозвонил, пропаял. Плата завелась, на экране появились цифры для установки времени и выбора режима программы. Вот так, хотел выкинуть, а в итоге починил. Настало время жарить.
Я воспользовался свободным кросс-платформенным ассемблером Asm48. Прикольно, что есть версия для MacOS, видимо авторы не обделены чувством юмора, по крайней мере я оценил. Ну значит скачиваем ассемблер, там все просто: ASM48 <имяфайла.asm> Первое, что я сделал, это «поморгал светодиодом», только вместо светодиода я дергал ногу динамика (пьезоэлемента) в бесконечном цикле с задержкой. Динамик подключен к порту 1, старший бит:
Скомпилировав программу и зашив ее на программаторе в ПЗУ 2716, запускаю плату и слышу периодические щелчки с интервалом около секунды. Работает! Теперь предстояло разобраться с экраном. По схеме видно, что «маска» символа ABCDEFG подключена к порту 1. Причем сигнал инвертированный, то есть когда 1 — палочка не горит, когда 0 — горит. Для того, чтобы задать маску буквы «H» посмотрим картинку:
Начинаем обходить букву с G до A, так как здесь обратный порядок следования бит: G закрашена, значит 1; F закрашена, значит 1; E закрашена, значит 1; D не закрашена, значит 0 и тд. В итоге получается: 1110110b. Мы помним, что сигналы инвертированные, поэтому нужно проинвертировать саму маску: not 1110110b = 0001001b. Или 9h. Послав это число в порт 1 мы установим маску для буквы. Сложнее с выбором символа. Здесь применена динамическая индикация. Вкратце суть сводится к тому, что мы постоянно должны задать маску, зажечь первый символ, задать маску, зажечь второй символ и тд. За разрешение свечения символа отвечает второй порт, который с помощью микросхемы m5l8243p расширен до 4-ех четырех битных портов. Для обращения к таким портам служит команда MOVD, а сами порты имеют номера P4, P5, P6, P7. P4 по замыслу авторов отвечает за сканирование клавиатуры, а вот P5 как раз устанавливает один из четырех символов для отображения.
Сперва я пытался сделать динамическую индикацию в основном цикле программы, но потом использовал для этого таймер. А в основном цикле программы меняется буфер индикатора, отображающий с периодичностью в 1 секунду надписи «HELO» и «2014»
Коротенькая видео-демонстрация работы девайса:
Пытливый хабраюзер наверняка заметил баг в конце ролика, когда вместо HELO высветилось не совсем то, что надо. Я его тоже заметил, да. А все потому, что когда в основной программе происходит пересылка в буффер дисплея я забыл остановить таймер. Перед call copy_buf нужно сделать DIS TCNTI а после EN TCNTI. Так то!
Теперь только остается сыграть на девайсе «в лесу родилась елочка» и миссию буду считать удачно завершенной. Всем добра!
Программирование КР1816ВЕ51 (MCS-51)
Программирование MCS-48 Посоветуте книгу
Здравствуйте. Решил поэкспериментировать с микроконтроллером КР1816ВЕ39. Собрал к нему блок.
[MCStudio для MCS-51] Программирование последовательного интерфейса
Подскажите, пожалуйста, как мне запрограммировать последовательный интерфейс на прием в 1 режиме 8.
Что означает состояние регистра в КР1816ВЕ51?
Помогите,пож. Мне нужно реализовать программу в С++,но для этого нужно иметь ответ на.
Книжки по MCS-51
Прошу не осуждать, что мол ленивый. гугл на что? и т.д. но проблема такова, что не могу найти.
Компилятор mcs
где можно скачать С# компилятор для linux? на сколько я понимаю, для того чтобы запустить С#.
Сообщение от ecoo
Сообщение от Vladiator
. может потому, что вы не пробовали искать? Этих аппнотов полно.
http://atmel.com/dyn/resources. oc7769.pdf
Практический пример? См. вложение к посту. Вопрос, думаю, исчерпан.
Вложения
самолетик с загрузочной USB.zip (4.47 Мб, 89 просмотров) |
Сообщение от ecoo
Работа с памятью MCS-51
Здравствуйте. Изучаю МК MSC-51 . В процессе возник вопрос . Как записать число или массив чисел во.
Работа со светодиодами на MCS-51
При любом изменении состояния ДД перемещать зажженный светодиод на ДСИ справа налево.
Документация, Datasheet на mcs-96
Ищу сабж. Что то поиски в интернете мало что дали, поэтому обратился сюда. Интересует документация.
Система команд MCS-51
В AVR были такие замечательные команды как SBIC/SBIS/SBRC/SBRS которые позволяли проверить бит и.
Таймер для MCS-51
И снова дравствуйте! На данный момент я уже с другим вопросом, а точнее просьбой. Не могу.
Сенсорная кливиатура на MCS-51
Доброго времени суток. Возможно ли сделать сенсорную клавиатуру на микроконтроллерах данной.
Однокристальные микро-ЭВМ семейства 1816 (Лекция)
Назначение, состав и основные технические характеристики
БИС включает в себя интегральные микросхемы трех серий: КМ1816, КР1816, КС1816, которые отличаются корпусом. Всего существует 7 кристаллов. Эти микросхемы выполнены по n-МОП технологии и являются 8-разрядными.
Отличие кристаллов друг от друга
1. Наличием или отсутствием программной памяти.
2. Типом и объемом программной памяти при ее наличии.
3. Объемом внутреннего ОЗУ.
4. Максимальным быстродействием (частотой).
Состав и технические характеристики
Тип программной памяти
Объем программной памяти (Кбайт)
Тактовая частота (МГц)
Общие характеристики: разрядность команд и данных — 8, канала адреса — 12, число РОН — 16, напряжение питания +5В. Объем программной памяти и ОЗУ может быть расширен путем подключения внешних БИС. Программная память расширяется до 4 Кб, а ОЗУ до 320 байт.
БИС 1816 предназначена для использования в качестве микроконтроллеров различного назначения.
Структурная схема БИС 1816
ALU — арифметико-логическое устройство. 8-ми разрядное сложение с переносом и без, логика, инкримент, декримент, цикличесткий сдвиг влево и вправо, обмен тетрад в байте, десятичная коррекция.
A — аккумулятор (как в 580)
BFA — буфер аккумулятора
T — регистр временного хранения
DAA — схема десятичной коррекции
CFF — схема формирования флагов
PSW — регистр слова состояния в программе
TCNT — таймер счетчика. 8-разрядный суммирующий счетчик. Подсчет внешних событий, формирование временных задержек. Содержимое может быть прочитано в аккумулятор.
IR — регистр команд
DCI — дешифратор команд
CU — блок управления
RGA — регистр адреса
RAM — ОЗУ 64 байта ( два банка РОН по 8 разрядов и восьми уровневый стек)
PC — программный счетчик (12 разрядов)
ROM — программная память
P0 — двунаправленный, восьмиразрядный, тристабильный порт ввода вывода. Если микро ЭВМ с внешней памятью, то P0 — восьмиразрядная мультиплексированная шина данных.
P1,P2 — два восьмиразрядных квазидвунаправленных порта ввода-вывода. Каждая из линий портов может быть независимо построена на ввод, вывод или на режим двунаправленной передачи данных.
P2(3-0) — используется для вывода 4-х старших разрядов при использовании внешней памяти. Эти линии используются для расширения системы ввода-выода. Через эти линии возможен доступ к 4 портам ввода-вывода.
Функциональное назначение выводов.
D(7-0) — линии порта P0 — 8-разрядная, двунаправленная тристабильная шина порта P0. При работе с внешними устройствами эта шина используется как совмещенная шина адреса и данных. При работе с ПЗУ 8 младших разрядов счетчика, которые по срезу сигнала ALE, младший байт программного счетчика запоминается во внешнем регистре. (. ) А затем читаем команды по сигналу PME. (. )
При обращении к внешнему ОЗУ по этой шине вначале выдается адрес данных, который фиксируется во внешнем регистре сигналом ALE, а затем по сигналу RD, WR производится ввод или вывод байта данных.
В режимах программирования-проверки встроенного ПЗУ эта шина служит для:
1. приема младших 8 разрядов адреса, который формируются в программном счетчике по фронту сигнала RESET.
2. для приема программируемых данных от программатора
3. для выдачи только что записанных в ПЗУ данных. Считывание данных для проверки при 1 на выводе T0.
P1(7-0), P2(7-0) — 8 разрядные квазидвунаправленные шины портов P1 и P2. При обращении к внешнему ПЗУ P2(3-0) содержат старшие 4 разряда счетчика команд.
В режиме программирования-проверки внутреннего ПЗУ линии P2 (1-0) служат для приема старших двух разрядов адреса.
P2(3-0) — младшие 4 линии порта P2 служат для доступа к четырем внешним портам (P4-P7). Эти порты имеют возможность обмена в младшими полубайтами аккумулятора.
CR1, CR2 — подключение кварцевого резонатора LC-контура или внешнего генератора 1-6 МГц.
RESET — вход установки начального состояния, управление передается на адрес 0.
SS — вход управления работой БИС в пошаговом режиме.
RD — выход строба чтения из внешнего ОЗУ.
WR — выход строба записи во внешнее ОЗУ.
ALE — выход строба адреса для внешнего ОЗУ и ПЗУ.
PME — выход строба приема команд из внешнего ПЗУ.
INT — выход сигнала запроса прерывания. ENI, DISI.
T0 — вход внешних логических устройств анализируемый по командам условных переходов. JT0, JNT0.
ENTO CLK — в результате выполнения этой команды T0 становится выходом тактовых сигналов.
Этот же вывод служит для выбора режима: 0-программ, 1-проверка.
T1 — вход внешних логических устройств анализируемый по командам условных переходов JT1,JNT1. Вход — счетчик внешних событий после STRT CNT.
PROG — вход импульса программирования внутреннего ПЗУ. При работе с внешними портами P4-P7 на этом выводе формируется выходной строб, фиксирующий вводимые данные с этих портов.
EMA — вход выбора внешней или внутренней памяти программ.
Память программ.
SEL MB0 — 11 разряд в 0
SEL MB1 — 11 разряд в 1
000h — этой ячейке передается управление после RESET,
003h — вектор внешнего прерывания,
007h — переход на эту ячейку при переполнении таймера.
Память делиться на 16 страниц по 256 байт. Разряды 7-0 указывают номер внутри страницы, а разряды 10-8 — номер самой страницы. Команды условного перехода меняют только 8 разрядов, то есть условные переходы возможны только внутри страницы. Команда JMP может адресовать ко всей памяти.
Для чтения констант: непосредственная адресация, при которой операнд находиться во втором байте команды, и косвенная, при которой содержимое аккумулятора используется в качестве указателя данных в текущей страницы.
При использовании обоих блоков памяти необходимо следить чтобы вызывающие подпрограммы находились в одном блоке памяти. Все обработчики прерываний находятся в блоке 1.
Память данных
Два адресных пространства: резидентная (64б), и внешняя — страничная (256 байт).
1816ая серия
Хорошо знакомая отечественным электронщикам серия микроконтроллеров — аналогов Интеловских 8031-8035-8048. Разработка её была завершена к 1985 году; в 1985-86 годах технология изготовления была переведена с n-МОП на КМОП, новая серия получила номер 1830.
Серия, казалось бы, "обсосана" вдоль и поперек, но.
КМ1816ВЕ31
Наравне с ВЕ51 — это самая известная микросхема серии, аналог Интеловской i8031. Впрочем, вариант в керамике встречается нечасто.
Производитель — воронежское НПО "Электроника" (ныне ВЗПП), хотя эту серию в основном делали украинские заводы.
КМ1816ВЕ35
Аналог i8035. Тема, кстати, называлась «Кочан-10С». Судя по литературе, не имел встроенного ПЗУ. Заводской паспорт от нее.
Верхняя микросхема, производства "Квантора" (Украина, Тернопольская область, г.Збараж), именно такая и есть.
А вот нижняя, Квазаровская — с окошком для стирания УФ ПЗУ! Это отбраковка КМ1816ВЕ48 с "битой" памятью, не пропадать же добру. Или, как изящно выразились в бирочке, «ошибочно замаркированные» :)))
(фото Евгения)
(фото с форума Полигон Призраков)
Массив памяти на кристалле хорошо виден, однако он недоступен для каких-либо операций.
(фото Евгения)
КР1816ВЕ35
А вот те же микросхемы, но в пластмассе (паспорт от них); производства "Квантора" (Тернопольская область, г.Збараж) и "Восток" (г.Новосибирск). Чем интересны они? в общем-то ничем, это весьма массовые микросхемы. Единственный комментарий — это самый ранний и самый поздний из известных мне образцов. Так что, полагаю, разработаны они были в Новосибирске.
Но всё же пара необычных экземпляров у меня есть. это процессоры со странным обозначением, КР1816ВЕ35А-ЭО/ОЭ. Если буква "А" еще как-то объяснима — это версия с пониженной тактовой частотой, то "ЭО". гм.
А вот и варианты с дополнительным нулём в номере:
К1816ВЕ35
А вот сладкая парочка без маркировки производителя. Странность у них в том, что это К1816, а не КМ1816, как должно было быть.
Одна дата выпуска, всё совпадает. при этом один в никеле, второй золотой.
КР1816ВЕ39
Довольно обычная микросхема серии, тема «Кочан-2С». Разве что — первая 1816 производства ивано-франковского «Родона» у меня в коллекции. А вот, к примеру, заводской паспорт от такой микросхемы, выпущенной Квазаром.
КР1816ВЕ48, КМ1816ВЕ48
Микросхема относится к первому поколению отечественных микроконтроллеров этого семейства. Аналог i8748 (8-разрядный микроконтроллер с 1К УФ-ППЗУ).
Производители — украинские заводы "Квантор" (Тернопольская область, г.Збараж) и "Квазар" (г.Киев).
Я случайно, перебирая экземпляры, заметил, что они выпускались с разными кристаллами! По всей вероятности, это аналоги разных схем: изначального 8748 и сделанного по усовершенствованной HMOS технологии 8748H.
Это хорошо видно на верхнем фото, варианты 1990 года с крупным кристаллом:
а микросхема 1991 года совсем другая и соответствует оригинальному i8048:
Они выпускались в основном в металлокерамическом корпусе, но иногда встречаются и варианты в пластмассе:
При этом, как видно на фото, корпуса имели вариации, по крайней мере — по размеру окон.
КР1816ВЕ48-1, КР1816ВЕ48-02
Производитель — новосибирский "Восток". Микросхемы интересны тем, что а) везде, во всех справочниках, ВЕ48 — это версия с УФ ППЗУ, здесь же явно контроллеры либо с одноразовым (масочным) ПЗУ, либо вообще без встроенной памяти; и б) опять же, согласно литературе, "Восток" не числится среди производителей 1816ой серии.
Что означают дополнительные цифры в конце маркировки — неизвестно.
Пример использования такого процессора — электромузыкальный инструмент «Эмифон-М».
КР1816ВЕ51
Пожалуй, самая рядовая микросхема серии, заводской паспорт на нее.
Производитель — воронежское НПО "Электроника" (ныне ВЗПП), хотя эту серию в основном делали украинские заводы.
К1816ВЕ851
Этой микросхемы нет ни в одном справочнике. Производитель — некое загадочное НТФ "Элкор", г.Киев.
А вот вариант этой микросхемы с таким же обозначением, но в керамическом корпусе, причем явно с УФ ПЗУ!
(фото Игоря из Киева)
1. Кобылинский Альфред Витольдович. Разработка семейств микропроцессорных комплектов СБИС. Диссертация на соискание ученой степени кандидата технических наук в форме научного доклада. Киев — 1985.
2. Каталог интегральных микросхем. Дополнение № 2 к базовому Каталогу ИС 1986г. Центральное конструкторское бюро. 1988.
3. Однокристальные микроЭВМ. М.: МИКАП, 1994.
4. Перельман Б.Л., Шевелев В.И. Отечественные микросхемы и их зарубежные аналоги. Справочник, "НТЦ Микротех", 1998.
5. Каталог. Цифровые и аналоговые интегральные микросхемы. Часть 2. Условные графические обозначения, назначения выводов и габаритные чертежи корпусов. — ГУП Центральное конструкторское бюро «Дейтон», 1998.
6. Нефедов А.В. Интегральные микросхемы и их зарубежные аналоги: Справочник. Т. 12.- М.: ИП РадиоСофт, 2001.