это быстро и бесплатно
Оформите заказ сейчас и получите скидку 100 руб.!
ID (номер) заказа
3347611
Ознакомительный фрагмент работы:
Содержание
Введение 3
1 Анализ технического задания 4
2 Разработка структурной схемы 6
3 Элементная база 8
4 Синтез схемы электрической принципиальной 22
5 Разработка алгоритма программного обеспечения 24
6 Разработка моделирующей программы 27
Заключение 34
Список используемых источников 35
Приложение А - Структурная схема
Приложение Б - Блок схема программы
Приложение В - Схема электрическая функциональная
Приложение Г - Схема электрическая принципиальная
Приложение Д - Листинг моделирующей программы
Приложение Е - Листинг прошивки микроконтроллера
Введение
В настоящее время широкое распространение получили замки, ключом к которым является электронная таблетка iButton (Touch Memory) фирмы Dallas Semiconductor. Чаще всего это устройство встречается на дверях подъездов, что обуславливается устойчивостью ключа и считывателя к погодным условиям и простой интуитивно-понятной технологией использования ключа. Однако благодаря вандалозащищенности, высокой степени безопасности, достигающейся при помощи защиты ключа от копирования, эргономичному дизайну и усиленному исполнению, которое влечет за собой значительный срок эксплуатации iButton, замки Touch Memory ныне используются и внутри зданий, стремительно вытесняя кодовые замки.
Ни одно административное здание, будто то учебное заведение, больница или магазин, не обходится без пожарной сигнализации и средств пожаротушения. Согласно правилам пожарной безопасности противопожарный инвентарь следует размещать в хорошо доступных и видных местах. В помещениях общего пользования это не безопасно, т.к. средства пожаротушения могут прийти в негодность при воздействии на них третьих лиц. Отсюда возникает необходимость защиты инвентаря. На шкафы с ним устанавливаются замки, ключи от которых хранятся либо у ответственных за пожарную безопасность, либо у хозяйственных работников здания, которые физически не в состоянии мгновенно очутиться рядом со шкафом в случае возникновения возгорания. В этом состоит главное неудобство существующего порядка.
Разрабатываемая система направлена на автоматизацию процесса защиты противопожарного инвентаря и средств пожаротушения, а также предоставления к ним доступа на начальной стадии пожара.
Задачей курсового проекта является разработка микропроцессорной системы автоматического управления электронным замком, которая должна обеспечивать открытие и закрытие замка в качестве реакций на внешние воздействия – дым.
1 Анализ технического задания
Микропроцессорная система управления цифровым замком.
Система предназначена для защиты противопожарного инвентаря от несанкционированного доступа, предоставления мгновенного доступа к противопожарному инвентарю в случае обнаружения возгорания в помещении, сигнализации при возгорании.
Цель создания системы:
1. Исключение возможности порчи противопожарного инвентаря третьими лицами.
2. Ускорение процесса пожаротушения в административных помещениях.
Режимы работы
1. Режим контроля: в основу обнаружения дыма положено определение степени прозрачности воздуха в области между инфракрасными светодиодом и фотодиодом, при обнаружении дыма датчик генерирует звуковой сигнал и по радиоканалу передает управляющему устройству сигнал о пожаре.
2. Режим автоматического открытия замка: при поступлении в управляющее устройство радиосигнала с одного из датчиков, замок автоматически открывается и остается открытым до устранения возгорания.
3. Режим открытия замка ключом-таблеткой iButton: при соприкосновении таблетки со считывателем замка происходит проверка кода. Если код таблетки зарегистрирован системой, замок открывается и остается открытым 5 секунд. Иначе не реагирует.
4. Режим программирования системы: замок может иметь максимум 9 ключей, плюс один мастер-ключ. Коды ключей заносятся в энергонезависимую память под номерами от 1 до 9. Код мастер-ключа занесен в ПЗУ микроконтроллера и не может быть изменен. Программирование новых ключей или стирание старых может быть произведено только при наличии мастер-ключа.
Входные данные
1. Код с ключа-таблетки типа iButton.
2. Сигнал датчика двери.
3. Степень прозрачности воздуха в помещении, считываемая датчиками дыма.
Выходные данные
1. Звуковой сигнал индикации дыма.
2. Сигнал принудительного открывания замка.
3. Сигнал закрывания замка.
Требования к системе.
Требования по электропитанию.
Питание устройства осуществляется от встроенного блока питания, содержащего трансформатор, выпрямительный мост и интегральный стабилизатор. В качестве резервного источника питания используется батарея BT1-BT10 из 10-ти NiMH-аккумуляторов типоразмера AA емкостью 800мА/Ч. При питании устройства от сети батарея аккумуляторов заряжается через резистор током примерно 20мА.
Технические требования
1. Возможность встраивания системы в стандартную дверь.
2. Обеспечение централизованного принципа управления.
3. Повышенная надежность.
4. Простота и удобство в использовании.
5. Использование современных миниатюрных датчиков.
6. Использование современной элементной базы.
Система должна соответствовать следующим основным требованиям:
1. максимальная простота при минимальной стоимости и габаритах.
2. понятная система управления, не требующая особых навыков или знания.
3. возможность перезаписи и стирания ключей из памяти замка.
4. надежная работа в заданных условиях.
2 Разработка структурной схемы
Для разработки структурной схемы системы управления цифровым замком, кратко опишем функции, которые должна выполнять разрабатываемая система:
- начальный запуск системы;
- запись в память микроконтроллера ключей для открытия замка;
- прием данных с дымового извещателя и их обработка;
- формирование выходного сигнала принудительного открывания замка;
- удержание замка в открытом состоянии до устранения возгорания.
Основные модулиИсходя из требований технического задания и функций, которые должна выполнять разрабатываемая система, можно выделить основные модули, из которых должна состоять вычислительная система.
Датчики
Датчики являются неотъемлемой частью системы, они используются для того, чтобы система могла в реальном времени реагировать на изменения внешних параметров по заранее разработанному алгоритму. В настоящее время на рынке представлено большое разнообразие различных типов датчиков, некоторые из них являются узкоспециализированными [13].
Нашей системе требуется несколько точечных оптических дымовых датчиков (извещателей), которые будут определять степень задымленности помещения и при помощи радиопередатчика (дальность действия радиоканала – до 100 метров, в условиях прямой видимости) передавать полученную информацию системе. Под плоскими потолками расстояние между любой точкой защищаемого помещения в горизонтальной проекции и ближайшим детектором не должно превышать 7,5 м. В больших помещениях используется наиболее экономичная треугольная схема размещения датчиков на потолке (рисунок 1).
Рисунок 1 – Схема размещения датчиков
Согласно этой схеме, если наша система будет установлена в прямоугольном помещении площадью 18 кв.м., понадобится 1 датчик.
Устройство управления
Устройство управления является главной частью системы, оно необходимо для сбора и обработки информации поступающей с системы датчиков, выработки управляющих сигналов для исполнительных устройств, а также вывода информации на устройство индикации.
Пульт управления и устройство визуальной индикации
Пульт управления и устройство визуальной индикации необходимы для запуска режима программирования микроконтроллера и визуального вывода номера текущего записываемого ключа.
Выбор варианта структурыВ соответствии с определенными выше функциями можно определить общую структуру системы, которая представлена в Приложении В. Устройство управления держит замок в закрытом состоянии, ожидая подачи сигнала с дымоизвещателя, считывателя Touch Memory, либо кнопки программирования. При получении сигнала микроконтроллер действует согласно алгоритму работы, переходя в режим открытия замка, посылая соответствующие импульсы на соленоиды, либо в режим записи ключей.
3 Элементная база
3.1 Выбор микроконтроллераВыбор МК проводится по следующим критериям:
– минимальный размер, так как габариты платы ограничены необходимостью монтажа в дверь.
– малый ток потребления (по тем же соображением места эксплуатации будущей системы).
– МК должен иметь достаточно памяти для хранения программ работы системы.
– наличие стандартных интерфейсов передачи данных (UART, SPI).
– высокая производительность.
– минимальная стоимость.
На основании приведенных критериев было решено взять микроконтроллер ATmega8535 фирмы Atmel из семейства AVR [4]. Микроконтроллеры данного семейства изготовляются по высококачественной КМОП (CMOS) технологии, содержат энергонезависимые запоминающие устройства для хранения программы и данных, выполненные по Flash и EEPROM технологиям, и отличаются низким энергопотреблением при высокой тактовой частоте. Запись программы и исходных данных в память может выполняться после установки микроконтроллера в аппаратуре, где ему предстоит работать (ISP, In-System Programmable). Таким образом, AVR имеют высокое быстродействие и обладают хорошим соотношением функциональности и цены, благодаря чему получили широкое распространение, для них существуют удобные среды разработки, а документация переведена на русский язык, что безусловно облегчает задачу проектирования.
3.2 Структура микроконтроллера ATmega8535 [4]В данном микроконтроллере АЛУ подключено непосредственно к 32-м рабочим регистрам, объединенным в регистровый файл. Благодаря этому АЛУ выполняет одну операцию (чтение содержимого регистров, выполнение операции и запись результата обратно в регистровый файл) за один машинный цикл.
В микроконтроллерах AVR реализована Гарвардская архитектура, которая характеризуется раздельной памятью программ и данных, каждая из которых имеет собственные шины доступа к ним. Такая организация позволяет работать одновременно как с памятью программ, так и с памятью данных. В отличие от RISC-микроконтроллеров других фирм, в микроконтроллерах AVR используется 2-уровневый конвейер, а длительность машинного цикла составляет всего один период кварцевого генератора.
Структурная схема микроконтроллера приведена на рисунке 2.
1. Счетчик команд.
Размер счетчика команд составляет 12 разрядов. Напрямую (как регистр) счетчик команд из программы недоступен.
При нормальном выполнении программы содержимое счетчика команд автоматически увеличивается на 1 или на 2 (в зависимости от выполняемой команды) в каждом машинном цикле. Этот порядок нарушается при выполнении команд перехода, вызова и возврата из подпрограмм, а также при возникновении прерываний.
После включения питания, а также после сброса микроконтроллера в счетчик программ автоматически загружается значение $000. Как правило, по этому адресу располагается команда перехода (RJMP) к инициализационной части программы.
При возникновении прерывания в счетчик команд загружается адрес соответствующего вектора прерывания ($001...$014). Если прерывания используются в программе, по этим адресам должны размещаться команды относительного перехода к подпрограммам обработки прерываний. В противном случае основная программа может начинаться непосредственно с адреса $001.
Рисунок 2 – Архитектура микроконтроллера ATmega8535
2. Регистры общего назначения (РОН) микроконтроллера.
Все 32 РОН непосредственно доступны АЛУ, в отличие от микроконтроллеров других фирм. Любой РОН может использоваться во всех командах и как операнд-источник, и как операнд-приемник. Исключение составляю лишь пять арифметических и логических команд, выполняющих действия между константой и регистром (SBCI, SUBI, CPI, ANDI, ORI), а также команда загрузки константы в регистр (LDI). Эти команды могут обращаться только ко второй половине регистров (R16…R31).
Два старших регистра общего назначения формируют 16-разрядный индексный регистр Z, который используется в качестве указателя при косвенной адресации памяти программ и памяти данных. Так как объем адресуемой памяти составляет всего 32 байт, при обращении к ней используется только младший байт (регистр R30). Содержимое старшего байта индексного регистра (регистр R31) при косвенной адресации памяти данных автоматически очищается процессором.
3. Регистры ввода/вывода (РВВ) микроконтроллера.
Регистры ввода/вывода (РВВ) располагаются в так называемом пространстве ввода/вывода размером 64 байт. Все РВВ можно разделить на две группы: служебные регистры микроконтроллера и регистры, относящиеся к периферийным устройствам (в том числе порты ввода/вывода). Размер каждого регистра – 8 бит.
Сторожевой таймер используется для защиты от аппаратных сбоев, например, если программа перешла в бесконечный цикл.
Регистр команд содержит команду, которая выбирается из FLASH-памяти программ для выполнения.
При необходимости к генератору микроконтроллера можно подключить внешний тактовый генератор на основе кварца. Если необходимости в увеличении стандартной тактовой частоты нет, то можно использовать встроенный генератор.
Начальная синхронизация происходит с приходом на вход синхронизатора сигнала RESET.
3.3 Описание выводов микроконтроллера ATmega 8535 [4].Выводы микроконтроллера представлены на рисунке 3. Описание выводов представлено в таблице 1.
Рисунок 3 – Выводы микроконтроллера ATmega 8535
Таблица 1 - Описание выводов микроконтроллера ATmega8535
1 2 3 4
Обозначение Номер вывода Тип вывода Описание
XTAL1 13 I Вход тактового генератора
XTAL2 12 О Выход тактового генератора
RESET 9 I Вход сброса
РА0 (ADC0) 40 I/O 0-й разряд порта А (0-й вход АЦП)
РА1 (ADC1) 39 I/O 1-й разряд порта А (1-й вход АЦП)
РА2 (ADC2) 38 I/O 2-й разряд порта А (2-й вход АЦП)
РАЗ (ADC3) 37 I/O 3-й разряд порта А (3-й вход АЦП)
РА4 (ADC4) 36 I/O 4-й разряд порта А (4-й вход АЦП)
РА5 (ADC5) 35 I/O 5-й разряд порта А (5-й вход АЦП)
РА6 (ADC6) 34 I/O 6-й разряд порта А (6-й вход АЦП)
РА7 (ADC7) 33 I/O 7-й разряд порта А (7-й вход АЦП)
РВ0(XCK/T0) 1 I/O 0-й разряд порта В (вход внешнего опорного сигнала для USART/вход внешнего тактового сигнала таймера/счетчика 0)
РВ1 (T1) 2 I/O 1-й разряд порта В (вход внешнего тактового сигнала таймера/счетчика 1)
РВ2 (INТ2/AIN0) 3 I/O 2-й разряд порта В (вход внешнего прерывания 2/положительный вход компаратора)
1 2 3 4
РВЗ (OC0/AIN1) 4 I/O 3-й разряд порта В(выход сравнения таймера/счетчика 0/отрицательный вход компаратора)
PB4 (SS) 5 I/O 4-й разряд порта В(Вход выбора ведомого SPI)
РВ5 (MOSI) 6 I/O 5-й разряд порта В(выход ведущего/вход ведомого SPI)
РВ6 (MISO) 7 I/O 6-й разряд порта В(вход ведущего/выход ведомого SPI)
РВ7 (SCK) 8 I/O 7-й разряд порта В (опорная частота SPI)
РC0 (SCL) 22 I/O 0-й разряд порта C(линия опорной частоты для Two-wire Serial Bus)
РC1 (SDA) 23 I/O 1-й разряд порта C(линия входа/выхода для Two-wire Serial Bus)
РC2 24 I/O 2..5-й разряды порта C
РCЗ 25 I/O РC4 26 I/O РC5 24 I/O РC6(TOSC1) 28 I/O 6-й разряд порта C (вход внешнего тактового генератора для таймера 2)
PD0(RXD) 14 I/O 0-й разряд порта D (вход для UART)
PD1(TXD) 15 I/O 1-й разряд порта D (выход для UART)
Обозначение Номер вывода Тип вывода Описание
PD2(INT0) 16 I/O 2-й разряд порта D (вход внешнего прерывания 0)
PD3(INT1) 17 I/O 3-й разряд порта D (вход внешнего прерывания 1)
PD4(OC1B) 18 I/O 4-й разряд порта D (выход сравнения A таймера/счетчика 1)
PD5(OC1A) 19 I/O 5-й разряд порта D (выход сравнения B таймера/счетчика 1)
PD6(ICP1) 20 I/O 6-й разряд порта D (вход захвата таймера/счетчика 1)
PD7(OC2) 21 I/O 7-й разряд порта D (выход сравнения таймера/счетчика 2)
GND 11,31 P Общий вывод
VCC,AVCC 10,30 P Вывод источника питания цифровой и аналоговой частей
AREF 32 I Вход эталонного напряжения для ЦАП
3.4 Выбор датчика дымаВ системе используется один оптический точечный беспроводной датчик дыма. Из соображений соотношения цены и качества был выбран Питбуль HM-603PR, который совмещает все самые прогрессивные технологии:
- автоматический сброс;
- автоматическое тестирование и тестирование в ручном режиме;
- защита от попадания прямого света, пыли, жидкости на фоточувствительный элемент детектора;
- регулировка чувствительности;
- высокая стабильность и соответствие Европейским нормам;
- индикация разряда батареи питания;
Схематическое изображение компонентов извещателя представлено на рисунке 4.
Рисунок 4 – Схематическое изображение компонентов извещателя
Условные обозначения:
1) Блок джамперов для настройки беспроводного адреса и зоны извещателя детектора.
2) Кнопка «Тест» – используется для тестирования детектора, а также для подачи условной ложной тревоги на центральную консоль.
3) Фотоэлектрический (оптический) узел детектор.
4) Резистор регулировки чувствительности детектора.
5) Встроенная пьезосирена оповещения тревоги (85дБ).
Технические характеристики:
Питание: 9В постоянного тока (батарея типа «Крона»)
Потребление в рабочем режиме: менее 10 мкА
Потребление в режиме тревоги: не более 20мкА
Световое оповещение о срабатывании: LED светодиод красного цвета
Звуковое оповещение о срабатывании: встроенная сирена с громкостью звука не менее 85дБ
Эксплуатационный диапазон температур: от 10°С до +50°С
Максимальная влажность: не более 95%(без образования конденсата)
Диапазон детектирования: 20кв.метров
Помехоустойчивость по РЧ 30В/м
Рабочая среда внутри помещения, IP-40
Оповещение на центральную консоль: шифрованный радиоканал
Кодирование передающего радиосигнала: протокол Pitbul 2262\1527
Радиочастота передающего радиосигнала: 315Мгц\433Мгц
Дистанция радиопередачи: 100 метров(прямая видимость)
Размеры: 107мм(диаметр)× 35мм(глубина)
Соответствует стандартам ISO 12239, EN – 54-7, ETSI EN 399 220, ETS 300683.
3.5 Выбор средств индикацииВ системе необходимо визуально отображать номер записываемого или стираемого ключа и вход в режим программирования. Для этих целей подойдет одноразрядный семисегментный индикатор. Например, LTS6660E фирмы Lite-On Electronics.
Рисунок 5 – Индикатор и схема подключения
Цвет свечения: зеленый
Пиковая длина волны: 565 нмНапряжение: 2.1 ВТок: 20 мА
Интенсивность свечения: 24...33 мкдГабариты: 38.0 (ширина) х 56.0 (высота) мм.
Однако этот индикатор будет скрыт корпусом. Об открытости двери будет сигнализировать свечение светодиода. Выбираем сверхъяркий светодиод LUR13433, обладающий следующими параметрами:
Цвет: красный
Длина волны: 660нм
Напряжение питание (при 20мА): 1,5…2,4ВВертикальный угол обзора: 36°
Горизонтальный угол обзора: 56°
Рабочая температура: -40°С …+85°С
3.6 Выбор супервизораСупервизоры питания – интегральные микросхемы, которые изменяют состояние своего выходного цифрового сигнала, если уровень напряжения питания снизился ниже определенной пороговой величины напряжения. Доминирующей сферой использования таких устройств являются микропроцессорные системы, особенно если в них используются энергонезависимые запоминающие устройства. Применение супервизоров питания в таких системах позволяет устранить следующие проблемы:
– несанкционированное поведение микропроцессора/микроконтроллера при подаче питания и снятии питания, т.е. если существуют интервалы времени, когда напряжение питания находится на недостаточном уровне для корректной дешифрации и исполнения кода команды;
– как следствие из первого пункта, инициация самопроизвольной записи в энергонезависимую память за счет сбоя в выполнении программы;
– инициация процесса записи в энергонезависимую память, когда напряжение питания заведомо находилось на уровне недостаточного для корректного завершения процесса записи.
В проектируемой системе будет использован супервизор ADM1232 со следующими параметрами:
Порог срабатывания, В4.65
Точность срабатывания, %5
Минимальное время срабатывания, мс150
Мин напряжение питания, В1
Макс. ток потребления, мкА500
Температурный диапазон,С-40…+85
Тип корпусаDIP8
3.7 Выбор приемопередатчикаНам необходим одноканальный приемопередатчик, работающий на частоте 433 МГц. В пару к микроконтроллеру фирмы Atmel идеально подойдет приемопередатчик ATA5811 [5] той же фирмы. Отличительными особенностями этого приемопередатчика являются низкое энергопотребление и небольшие размеры. ATA5811 применяется в носимых применениях, в счетчиках электроэнергии, системах автоматизации зданий, охранных системах и телеметрии. Он предназначен для полудуплексной передачи данных. Наличие блоков цифровой логики и FIFO позволяет приемопередатчику самому принимать и передавать сообщения, освобождая ресурсы микроконтроллера для кодирования и других задач [15].
Частота передачи, МГц315/433
Скорость передачи данных, кбит/с40/20
МодуляцияАМн / ЧМнВыходная мощность, дБм10
Ток потребления off0.01мкА
Ток потребления aсtive15.8мА/17,3мА
Чувствительность (АМн), дБм116,5/-114
Чувствительность (ЧМн), дБм-109,5/-107
Напряжение питания, В2,4-3,6
КорпусQFN48
Температурный диапазон, C-40...+105
3.8 Выбор исполнительных устройствСистема должна управлять дверью. Для открывания и закрывания замка выберем соленоид AK2022L фирмы Shenzhen Yaxin Electric Manufacturing Co.
Рисунок 6 – Соленоид
Rated voltage: 12V DC
Rated current: 1.0A
DC resistance: 12 Ohms (at 20 degrees Celsius) ±10%
Pull force: 450g minimuAmbient temperature: 20 degrees Celsius at 12V DC
Insulation resistance: normal temperature/humidity, 50M ohms or above at 500V DC
Withstanding voltage: 1,000V AC for one second under normal situation, in case the test result is not in doubt, the test voltage can be
Used 120% voltage for one secondInsulation class: A class3.9 Выбор дополнительных элементовДля питания микропроцессора от сети 220В необходима схема согласования, так как процессор питается от постоянного напряжения в 5В. Будем использовать трансформатор понижающий Штиль ОСМ Т220.
Напряжение первичной обмотки: 220 В.
Напряжение вторичной обмотки: 12 В (переменное).
Степень защиты: IP 20.
В качестве диодного моста будем использовать схему DB157. Внешний вид диодного моста представлен на рисунке 7.
Максимальное постоянное обратное напряжение 1000 ВМаксимальное импульсное обратное напряжение 1000 ВМаксимальный прямой ток 1,5 АМаксимальный допустимый прямой импульсный ток 60 АМаксимальный обратный ток 50 мкА
Максимальное прямое напряжение 1.1 ВРабочая температура -55…125 °ССпособ монтажа в отверстие
Корпус DB-1
Рисунок 7 – Диодный мост DB157
Для управления программированием микроконтроллера необходим миниатрюрный переключатель, кнопочный с самовозвратом. Например, ПКн-159-3.
Рисунок 8 – Переключатель ПКн-159-3
Рисунок 9 – Внешний вид переключателя
Таблица 2 - Технические характеристики переключателя
Показатель Значение
Коммутируемое напряжение, В 1х10-4 ... 15
Ток (постоянный, переменный), А 1х10-6 ... 0,05
Максимальная коммутируемая мощность, Вт (ВА) 0,75
Сопротивление электрического контакта, Ом 0,1
Сопротивление изоляции, МОм, не менее 1 000
Количество коммутационных циклов в НКУ 50 000
Остальные элементы выбираются согласно схемам подключения микросхем, приведенным в соответствующей технической документации.
4 Синтез схемы электрической принципиальной
Электрическая принципиальная схема приведена в Приложении Г.
Основой конструкции является микроконтроллер DD2 типа ATmega8535 фирмы Atmel. К порту PA подключен 7-сегментный индикатор, который используется при программировании ключей. Для этих же целей предназначена и кнопка SB1, подключенная к порту PC3. Хранение серийных номеров ключей осуществляется в EEPROM микроконтроллера. Внешняя панелька для iButton подключается к порту PD3 через разъем XP1 и элементы защиты VD6, R2, VD8 и VD9. Подтягивающий резистор R3 выбран согласно спецификации однопроводной шины.
Исполнительным устройством замка является электромагнит, подключенный через терминал XT1. Электомагнитом управляет ключ VT3, в качестве которого используется мощный МОП-транзистор типа IRF540. Диод VD10 защищает от выбросов самоиндукции. Ключом VT3 управляет транзистор VT2, который инвертирует сигнал, поступающий с порта PD0 и обеспечивает управляющие уровни 0/12В на затворе VT3. Инверсия нужна для того, чтобы исполнительное устройство не срабатывало во время сброса микроконтроллера, когда на порту присутствует уровень логической единицы. 12-вольтовые управляющие уровни позволили применить обычный МОП-транзистор вместо более дефицитного низкопорогового (logick level).
Для индикации открытия замка используется светодиод, который управляется тем же портом, что и электромагнит, но через транзисторный ключ VT1. Светодиод подключается через тот же разъем, что и iButton. Поскольку устройство должно работать круглосуточно без обслуживания, для повышения надежности установлен супервизор D2 типа ADM1232. Он имеет встроенный сторожевой таймер и монитор питания. На порту PD1 микроконтроллер формирует периодические импульсы для сброса сторожевого таймера.
Питание устройства осуществляется от встроенного блока питания, содержащего трансформатор T1, выпрямительный мост VD1-VD4 и интегральный стабилизатор D3. В качестве резервного источника питания используется батарея BT1-BT10 из 10-ти NiMH-аккумуляторов типоразмера AA емкостью 800мА/ч. При питании устройства от сети батарея аккумуляторов заряжается через резистор R1 током примерно 20мА, что составляет 0,025C. Режим зарядки малым током называют капельным (trickle charge). В таком режиме аккумуляторы могут находиться сколь угодно долго, контроль конца процесса зарядки не требуется. Когда аккумуляторы оказываются полностью заряженными, забираемая ими от источника питания энергия превращается в тепло. Но поскольку ток зарядки очень маленький, выделяемое тепло рассеивается в окружающее пространство без сколько-нибудь заметного увеличения температуры аккумуляторов.
5 Разработка алгоритма программного обеспечения
Алгоритм работы системы представлен в Приложении Б графической части.
Алгоритм обработки сигналов с считывателя
При получении сигнала с панели считывателя микроконтроллер проверяет, есть ли прикоснувшийся ключ в памяти. Если зафиксировано касание зарегистрированным пользовательским ключом, замок открывается. Если это был мастер-ключ, то нужна проверка текущего режима работы. В случае режима программирования, микроконтроллер переходит к выполнению алгоритма программирования ключей (п.6.4.3). Иначе замок открывается. Если ключ не зарегистрирован, замок остается закрытым.
Алгоритм обработки сигнала с дымоизвещателяПри обнаружении дыма в помещении дымовой датчик по радиоканалу передает сигнал на приемник управляющего устройства. Получая этот сигнал, микроконтроллер подает импульс на соленоид, открывая, либо удерживая открытым замок.
Алгоритм программирования ключа
Для программирования нового ключа нужно проделать следующие действия:
1. Нажать кнопку программирования.
2. На индикаторе появится буква «P», что означает вход в режим программирования.
3. Коснуться мастер-ключом панели Touch Memory.
4. На индикаторе появится цифра «1», которая обозначает номер программируемого ключа.
5. Кнопкой выбрать нужный номер.
6. Коснуться любым ключом панели.
7. Цифра на индикаторе начнет мигать, что говорит о готовности к программированию.
8. Коснуться панели тем ключом, код которого требуется занести в память.
9. В случае успешного программирования цифра на индикаторе перестанет мигать и начнет гореть постоянно.
10. Для выхода из режима программирования нужно подождать 5 секунд, после чего индикатор погаснет.
Если нужно запрограммировать несколько ключей, то можно сразу перейти от п.9 к п.5 и повторить п.5 – 9 необходимое число раз.
Если после выполнения п.7 окажется, что выбран не тот номер, то для исключения потери кода ключа под этим номером можно нажать кнопку или подождать 5 секунд. В первом случае текущий номер увеличится на единицу, а содержимое памяти останется без изменений. Во втором случае произойдет полный выход из режима программирования без изменения кодов. Выход из программирования можно осуществить в любой момент, если сделать паузу более 5 секунд.
Для стирания из памяти лишнего ключа последовательность действий остается такой же, как и при программировании, только все действия производятся мастер-ключом. Т.е. процесс стирания фактически является записью кода мастер-ключа на неиспользуемые номера.
Для обработки событий, связанных с программированием, имеются две подпрограммы: PROGT и PROGS. Первая вызывается при считывании кода ключа в режиме программирования, вторая – при нажатии кнопки программирования (NUMBER). Процесс программирования разбит на 3 фазы. При нажатии кнопки NUMBER осуществляется вход в программирование, т.е. переход к фазе 1. При этом на индикатор выводится буква «P». Считываемые после этого коды ключей проверяются на совпадение с кодом мастер-ключа, так как только он может позволить продолжить программирование. Если такое совпадение произошло, то осуществляется переход к фазе 2. На индикатор выводится номер текущего ключа, который кнопка NUMBER может изменять.
Если снова будет зарегистрировано касание ключа, то произойдет переход к фазе 3. Еще одно касание ключа приведет к запоминанию его кода и к возврату к фазе 2. Нажатием кнопки NUMBER тоже можно вернуться к фазе 2, но без изменения содержимого памяти. Любое действие в режиме программирования вызывает перезагрузку таймера возврата, который имеет интервал 5 секунд и проверяется в основном цикле. Если будет обнаружено обнуление этого таймера, то происходит выход из режима программирования.
6 Разработка моделирующей программы6.1 Определение концепции моделирующей программы.
Моделирующая программа призвана служить моделью разрабатываемой микропроцессорной системы. В ней должны быть заложены все ответные реакции МПС на внешние воздействия, такие как:
1. Выбранный режим работы.
2. Текущая степень задымленности помещения.
3.Касание ключом панели Touch Memory (мастер-ключ, зарегистрированный и не зарегистрированный ключ пользователя).
Выходные данные моделирующей программы также должны соответствовать выходным данным микропроцессорной системы.
Моделирование будет производиться в среде Delphi7, так как эта она обладает удобными инструментами для создания приложений и работы с окнами, имеет стандартные средства управления и несложна в программировании. Модель, созданная при помощи Delphi7, будет простой и наглядной.
При запуске программы необходимо нажать кнопку «включение», затем выбрать режим работы. Смоделирован, как режим контроля, в котором система считывает данные с дымового извещателя, так и режим программирования (записи и стирания ключей). Ответные реакции микроконтроллера и системы будут выведены текстом в одно из окон приложения.
Листинг программы приведен в Приложении Д.
6.2 Анализ работы системы в моделирующей программе
Для анализа работоспособности системы проведем демонстрацию всех возможностей моделирующей программы.
1. Инициализация системы.
Рисунок 10 – Инициализация системы
2. Режим контроля. Установлено возгорание.
Рисунок 11 – Установлено возгорание
Рисунок 12 – Установлено задымление
Рисунок 13 - Оповещение
3. Режим контроля. Возгорания нет.
Рисунок 14 – Режим контроля
4. Режим контроля. Было касание ключом.
Рисунок 15 – Команда касание ключом
Рисунок 16 – Зарегистрированный ключ
Рисунок 17 – Незарегистрированный ключ
5. Режим программирования. Стирание ключей.
Рисунок 18 – Настройка стирания ключа
6. Режим программирования. Запись ключей.
Рисунок 19 – Запись ключей
Рисунок 20 – Запись ключей
7. Отключение системы.
Рисунок 21 – Отключение системы
6.3 Программное обеспечение микроконтроллераПрограмма написана на языке Assembler, что делает код быстрее, чем если бы она была написана на Си. Кроме того, язык низкого уровня обеспечивает прямой доступ к портам ввода-вывода и регистрам микроконтроллера.
Код мастер-ключа записывается в ПЗУ программ микроконтроллера, начиная с адреса 2FDH. Длина кода составляет 8 байт. Последовательность цифр должна быть такая же, как и на корпусе touch-memory, читать нужно слева направо. Т.е. по адресу 2FDH заносится значение контрольной суммы, затем по адресам 2FEH – 303H шесть байт серийного номера, начиная со старшего байта, и, наконец, по адресу 304H – код семейства. Например, код в целом может выглядеть так: 67 00 00 02 D6 85 26 01.
Листинг программы для микроконтроллера приведен в Приложении Е.
Заключение
В результате курсового проектирования была разработана структурная схема, электрическая принципиальная схема, блок схема алгоритма программы и программный код для контроллера для микропроцессорной системы управления электронным замком.Устройство строится на основе микроконтроллера ATmega8535, который имеет набор необходимой периферии для реализации полного функционирования устройства, достаточный объём памяти, для хранения и корректной работы программы.
Разработанная микропроцессорная система управления электронным замком полностью удовлетворяет поставленным требованиям. Осуществляется мониторинг и контроль дымовых оптических извещателей и вырабатываются ответные сигналы в зависимости от получаемых с датчиков данных. Реализована возможность перезаписи ключей типа iButton в память микроконтроллера.
Результаты моделирования на персональном компьютере показали, что разработанная микропроцессорная система функционирует правильно и выполняет возложенные на нее задачи.
Разработанное устройство не имеет в своем составе дорогих и дефицитных компонентов, что обеспечивает экономическую выгоду и доступность устройства.
Данные, полученные при курсовом проектировании, полностью соответствуют техническому заданию.
Список используемых источников
Авдеев В.А., Гузик В.Ф. Компьютеры: шины, контроллеры, периферийные устройства. Учебное пособие. − М.: Радио и связь, 2014. − 480 с.
Евстифеев А.В. - Микроконтроллеры AVR семейства Mega. Руководство пользователя2 Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы. - М.Ж Издательский дом «Додэка XXI», 2004
3 Гребнев В.В. Микроконтроллеры семейства AVR фирмы Atmel. - М.: ИП РадиоСофт, 2002 - 176с.
4 Datasheet: Atmel 8-bit AVR Microcontroller.
5 Datasheet: Atmel UHF ASK/FSK Transceiver.
6 Datasheet: ADM1232 Microprocessor Supervisory Circuit.
7 Datasheet: LTS-6000 Series.
8 http://www.chip-dip.ru
9 http://ru-patent.info
10 http://www.diagram.com.ua/list/tem.shtml
11 http://www.guarda.ru/guarda/data/fire_ir/txt_21.php
12 http://ru.wikipedia.org/wiki/Пожарный_извещатель13 http://www.ig-store.com.ua/index.php?productID=353
14 http://ru.wikipedia.org/wiki/AVR
15 http://www.mymcu.ru/Production/tables/priem_pered.htm
Приложение АСтруктурная схема
Рисунок А.1 – Структурная схема
Приложение ББлок схема программы
Рисунок Б.1 – Блок схема программы
Рисунок Б.2 – Блок схема программы
Рисунок Б.3 – Блок схема программы
Приложение ВСхема электрическая функциональная
Рисунок В.1 – Схема электрическая функциональная
Приложение Г
Схема электрическая принципиальная
Рисунок Г.1 – Схема электрическая принципиальная
Приложение ДЛистинг моделирующей программыunit Unit1;
interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, Unit2;
type TForm1 = class(TForm)
Memo1: TMemo;
MainMenu1: TMainMenu;
N4: TMenuItem;
N5: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
Button1: TButton;
Button2: TButton;
N3: TMenuItem;
N6: TMenuItem;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N6Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
implementationuses Unit3, Unit4;
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
begin Form3.Show;
Memo1.Lines.Add('Система в режиме контроля');
end;
procedure TForm1.N2Click(Sender: TObject);
begin Form4.Show;
Memo1.Lines.Add('Запущен режим программирования');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('Система запущена');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('Работа системы остановлена');
end;
procedure TForm1.N3Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('Установлено касание ключа к панели.');
Memo1.Lines.Add('Ключ найден в памяти микроконтроллера.');
Memo1.Lines.Add('Замок открывается.');
end;
procedure TForm1.N6Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('Установлено касание ключа к панели.');
Memo1.Lines.Add('Ключ не найден в памяти микроконтроллера.');
Memo1.Lines.Add('Замок закрыт.');
end;
end.
//------------------------------------------------------------------------------------------
unit Unit3;
interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;
type TForm3 = class(TForm)
Memo1: TMemo;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
{procedure ExitClick(Sender: TObject);}
private { Private declarations }
public { Public declarations }
end;
var Form3: TForm3;
implementationuses Unit1;
{$R *.dfm}
procedure TForm3.N2Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('Внимание! В помещении обнаружено возгорание.');
Memo1.Lines.Add('Замок открывается.');
end;
procedure TForm3.N3Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('Показатели задымления в пределах нормы.');
Memo1.Lines.Add('Замок закрыт.');
end;
end.
//------------------------------------------------------------------------------------------
unit Unit4;
interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type TForm4 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
Memo1: TMemo;
N2: TMenuItem;
N11: TMenuItem;
N21: TMenuItem;
N31: TMenuItem;
N41: TMenuItem;
N51: TMenuItem;
N61: TMenuItem;
N71: TMenuItem;
N81: TMenuItem;
N91: TMenuItem;
procedure N1Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N21Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form4: TForm4;
implementation{$R *.dfm}
procedure TForm4.N1Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('Было касание мастер-ключом в режиме программирования.');
Memo1.Lines.Add('Все пользовательские ключи стерты.');
end;
procedure TForm4.N11Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('1-ый ключ записан в память микроконтроллера.');
end;
procedure TForm4.N21Click(Sender: TObject);
begin Memo1.Clear;
Memo1.Lines.Add('2-ой ключ записан в память микроконтроллера.');
end;
end.
Приложение ЕЛистинг прошивки микроконтроллера; ------ DALLAS DS1990A based lock ------
; ------ Supports 9 keys + 1 master-key -----
;TARGET= AT89C2051
DEBUG= 0;0-off, 1-rdfn ports, 2-on
#INCLUDE "LIBR51.ASM";8051 SFR set
CLK_KHZ= 10000;OSC frequency, KHZ
RTC_MS = 20 ;system clock, MS
RTCV= -(CLK_KHZ*RTC_MS)/12
;Macros:
#DEFINE LO(XXX) XXX & 0FFH
#DEFINE HI(XXX) (XXX >> 8) & 0FFH
#IF (DEBUG>1)
#INCLUDE "LIBDEF.ASM"
#ENDIF
; ------ Constantes ------
MAXK.EQU 9;max number of keys
I2C_ADDR.EQU 0A0H;I2C address for 24C02 (A0,A1,A2=0)
TMATMV.EQU 25;x20mS TM access delay time
AENTMV.EQU 2;x20mS TM access enable delay
OPNTMV.EQU 150;x20mS open pulse duration
RETTMV.EQU 250;x20mS return to normal mode delay
; ------ Ports ------
DDATA.EQU P1;display data port
KEYOP.EQU INT0;key OPEN
OWP.EQU INT1;1-Wire port
SDA.EQU T0;I2C SDA line
SCL.EQU T1;I2C SCL line
SOLEN.EQU RXD;solenoid control line
WD.EQU TXD;watchdog line
KEYSL.EQU P3.7;key SELECT
; ------ Variables ------
;Bit addressing memory:
RTPC.EQU 020H;Real time program counter
T040M.EQU O20H.0;40mS period bit
T080M.EQU O20H.1;80mS period bit
T160M.EQU O20H.2;160mS period bit
T320M.EQU O20H.3;320mS period bit
T640M.EQU O20H.4;640mS period bit
T1S28.EQU O20H.5;1.28S period bit
T2S56.EQU O20H.6;2.56S period bit
T5S12.EQU O20H.7;5.12S period bit
RTPCS.EQU 021H;Real time program counter (100mS part)
FLAGS1.EQU 022H
PROG.EQU O22H.0;program mode flag
SNUM.EQU O22H.1;set number flag
BLINK.EQU O22H.2;display blink bit
SLKPR.EQU O22H.3;SELECT press flag
OPNPR.EQU O22H.4;OPEN press flag
;Internal Data Memory:
.ORG 0030H;data memory segment
ROMD.DS 8;touch memory ROM data
TEMP.DS 1;temporary byte (used in ACCESS90)
TMATM.DS 1;touch memory access timer
AENTM.DS 1;TM access enable timer
OPNTM.DS 1;open timer
RETTM.DS 1;return timer
NUM.DS 1;current PRG number (1..9)
;Debugger variables:
#IF (DEBUG>1)
DBGVA.DS 1;debugger variable address in internal memory
DBGVV.DS 1;debugger variable value in internal memory
DBGA.EQU 0FFFFH;debugger address in external memory
#ENDIF
STACK:;stack location
; ------ Vectors Area ------
.ORG 0000H;reset vector
LJMP INIT
.ORG 000BH;INT TIMER 0 vector
LJMP RTC
; ------ Main Program ------
INIT:MOV SP,#STACK;stack init#IF (DEBUG>1)
DEBUGINIT;debug init#ENDIF
;Variables init:
CLR A
MOV FLAGS1,A;clear flags 1
MOV TMATM,A;touch memory access timer clear
MOV AENTM,A;touch memory access delay timer clear
MOV OPNTM,A;open timer clear
MOV RETTM,A;return timer clear
;Periferal setup:
CLR TR0;timer 0 stop
CLR TR1;timer 1 stop
MOV TMOD,#11H ;timer 0 and timer 1 initMOV TL0,#LO(RTCV) ;timer 0 load
MOV TH0,#HI(RTCV)
SETB TR0;timer 0 start
CLR PT0 ;int. timer 0 low priority
SETB ET0;int. timer 0 enable
SETB EA;interrupts enable
; ------ Main Loop ------
;Read touch memory:
MAIN:LCALL ACCESS90;read touch memory
JNC NOTCH;no touch
JB PROG,PRG;jump to process PROG mode
LCALL CHKMAS;check for master code
JC OPN
LCALL CHKMEM;check for member code
JC OPN
SJMP NOTCH
PRG:LCALL PROGT;process PROG mode when touch
SJMP NOTCH
OPN:LCALL OPEN;open door
;Check open key:
NOTCH:LCALL CHKOPK;check open key
JNC NOOPN
LCALL OPEN;open door
;Check select key:
NOOPN:LCALL CHKSLK;check select key
JNC NOSEL
LCALL PROGS;process PROG mode when select
;Open timer check:
NOSEL:MOV A,OPNTMJNZ NOCLS
LCALL CLOSE;solenoid off
;Return timer check:
NOCLS:MOV A,RETTMJNZ NORET
LCALL RETMD;return to normal mode
;Display, watchdog wakeup:
NORET:LCALL DISP;displayLCALL WAKEUP;watchdog wakeup
LJMP MAIN
; ------ Subroutines Area ------
;Process PROG mode when touch:
PROGT: JB SNUM,PRGT1;SNUM = 1 ?
LCALL CHKMAS;check for master
JC PRGT3
RET
PRGT3:SETB SNUM;set "set number" flag
CLR BLINK;clear blink flag
MOV NUM,#1;clear number
MOV RETTM,#RETTMV;load return delay
RET
PRGT1:JB BLINK,PRGT2;PROG = 1, BLINK = 0 ?
SETB BLINK;set blink flag
MOV RETTM,#RETTMV;load return delay
RET
PRGT2:LCALL SAVE;NVM[NUM] <- new key
CLR BLINK;clear blink flag
MOV RETTM,#RETTMV;load return delay
RET
;Process PROG mode when select:
PROGS: JB PROG,PRGS1;PROG = 1 ?
SETB PROG;set program mode flag
CLR SNUM;clear "set number" flag
CLR BLINK;clear blink flag
MOV RETTM,#RETTMV;load return delay
RET
PRGS1: JNB SNUM,PRGS2;SNUM = 0 ?
CLR BLINK;clear blink flag
INC NUM;NUM + 1
MOV A,NUMCJNE A,#MAXK+1,PRGS2
MOV NUM,#1
PRGS2:MOV RETTM,#RETTMV;load return delay
RET
;Return to normal mode:
RETMD:CLR BLINK;clear blink flag
CLR PROG;clear program mode flag
CLR SNUM;clear "set number" flag
RET
;Open door:
OPEN:CLR SOLEN
MOV OPNTM,#OPNTMV;load open pulse duration
RET
;Solenoid off:
CLOSE:SETB SOLEN
RET
;Check open key:
;Returns C=1 if pressed
CHKOPK: JNB KEYOP,OP1;jump if key OPEN pressed
CLR OPNPR;clear OPEN pressed flag
OP3:CLR C
RET
OP1:JB OPNPR,OP2LCALL DEL15;delay 15 mSJB KEYOP,OP3SETB OPNPR;set OPEN pressed flag
OP2:SETB C;C <- 1 if key OPEN pressed
RET
;Check select key:
;Returns C=1 if pressed
CHKSLK: JNB KEYSL,SL1;jump if key SELECT pressed
CLR SLKPR;clear SELECT pressed flag
SL2:CLR C
RET
SL1:JB SLKPR,SL2LCALL DEL15;delay 15 mSJB KEYSL,SL2SETB SLKPR;set SELECT pressed flag
SETB C;C <- 1 if key SELECT pressed
RET
;Watchdog wakeup:
WAKEUP:MOV C,T040MMOV WD,CRET
; ------ 1-Wire bus support ------
;Send reset pulse to OWP and receive presence pulse
;Out: C = 1 if OK
TRESET: PUSH B
CLR OWP;OWP <- 0
MOV B,#CLK_KHZ/48
DJNZ B,$;delay 500 uSCLR EA;interrupt disable
SETB OWP;OWP <- 1 (0uS)
MOV B,#CLK_KHZ/2000
DJNZ B,$;delay
MOV C,OWP;read OWP (14 uS)
JNC FAIL;fail if OWP = 0
MOV B,#CLK_KHZ/500
DJNZ B,$;delay
MOV C,OWP;read OWP (66 uS)
JC FAIL;fail if OWP = 1
SETB EA;interrupts enable
MOV B,#CLK_KHZ/100
DJNZ B,$;delay
MOV C,OWP;read OWP (312 uS or more)
JC RESOK;OK if OWP = 1
FAIL:CLR C
SETB EA;interrupts enable (if fail)
RESOK:POP B
RET
;Read/Write byte via 1-Wire bus
;Input: A - input byte
; R4 - CRC
;Out: A - output byte
; R4 - updated CRC
TBYTE: PUSH B
MOV B,#8;perform to read 8 bit
TBYTE1:RRC A;C <- bit
LCALL TBIT;transmit bit
DJNZ B,TBYTE1;next bit
RRC A;A <- last bit
POP B
RET
;Read/Write bit via 1-Wire bus
;Input: C - input bit.
; R4 - CRC
;Out: C - output bit
; R4 - updated CRC
TBIT: PUSH ACC
CLR EA;interrupts disable
CLR OWP;OWP <- 0 (begin of time slot)
NOP;delay to be sure...
NOP;that thermometr...
NOP;looks low level
JC TB_1
SJMP TB_0;if data bit = 0 then OWP <- 0
TB_1:SETB OWP;if data bit = 1 then OWP <- 1
NOP ;delay for data setup
TB_0:NOP
NOP
NOP
NOP
;NOP;10 MHz !
;NOP
MOV C,OWP;read port 15 uS later
PUSH B ;save register B
MOV B,#CLK_KHZ/706
DJNZ B,$ ;delay to complete 60 uS slot
POP B ;restore register B
SETB OWP;OWP <- 1, end of time slot
SETB EA;interrupts enable
PUSH PSW;update CRC, save C
RLC A;ACC.0 <- C
XRL A,R4;~ACC.0 if CRC.0 = 1
RRC A;ACC.0 -> C
MOV A,R4;A <- CRC
JNC BCRC0
XRL A,#18H;update CRC
BCRC0:RRC A;shift CRC
MOV R4,A;CRC <- new value
POP PSW;restore C
POP ACC
RET
; Accesses to DALLAS DS1990A touch memory.
; Returns C=1 in case of valid code, else C=0.
; Out: ROMD (8 bytes)
ACCESS90: CLR C;indicate failure
MOV A,AENTM;check access enable timer
JNZ RET90;exit if AENTM > 0
MOV AENTM,#AENTMV;reload access enable timer
LCALL TRESET;issue reset pulse
JNC RET90;leave if no parts on bus
CLR C;indicate failure
MOV A,TMATM;check TM access timer
JNZ DIS90;exit if TMATM > 0
MOV A,#033H;read ROM command
LCALL TBYTE;send command byte
MOV R0,#ROMD;init pointer
MOV R1,#8;init counter
MOV R4,#0;initialize CRC variable
RDMORE:MOV A,#0FFH;prepare to read a byte
LCALL TBYTE;read byte
MOV @R0,A;save byte
INC R0;next address
DJNZ R1,RDMORE;repeat until finished
MOV A,R4;get CRC value in ACC
JZ CRC_OK;jump if successful
CLR C;indicate failure
SJMP RET90
CRC_OK:LCALL CHKZ;check code for zero
JNC RET90;invalid code
DIS90:MOV TMATM,#TMATMV
RET90:RET;return to caller
;Check TM code for zero:
CHKZ:MOV R0,#ROMD;init pointer
MOV R1,#8;init counter
NEXTZ:MOV A,@R0
ADD A,#0FFH;C = 1 if A>0
JC OKZ
INC R0;next address
DJNZ R1,NEXTZOKZ:RET
; I2C NVM memory 24C02 support:
;
; I2C - bus supported subroutines:
;
; I2C_WR - Write byte from A via I2C bus
; I2C_RD - Read byte to A via I2C bus
; I2C_LRD - Read last byte to A via I2C bus (no ASK)
; I2C_SUB - Send subaddress from R1 to I2C device
; I2C_SUBR - Send subaddress from R1 and perform read.
; I2C_STOP - Stop condition generation on I2C bus
;
; I2C slave address I2C_ADDR (0A0H for 24C02 A0,A1,A2=0)
; I2C data line SDA
; I2C clock line SCL
;Send subaddress to I2C device.
;Input: R1 - subaddress.
I2C_SUB: MOV A,#I2C_ADDR;I2C device address, write mode
LCALL I2C_WR;send device address
MOV A,R1;subaddressLCALL I2C_WR;send subaddressRET
;Send subaddress and perform read.
;Input: R1 - subaddress.
I2C_SUBR:LCALL I2C_SUB;send subaddressLCALL I2C_STOP;stopMOV A,#I2C_ADDR+1;I2C device address, read mode
LCALL I2C_WR;send device address
RET
;Send byte from A via I2C bus.
I2C_WR: PUSH B
MOV B,#9H;bit counter load
SETB C;set C, for bit 9 = 1 (when ACK)
LCALL SDA0;SDA 1 -> 0 - start
I2CWR1:LCALL SCL0;SCL 1 -> 0
RLC A
JC OUTP1;jump if bit = 1
LCALL SDA0;else SDA=0
SJMP OUTP0
OUTP1:LCALL SDA1;SDA=1, if bit = 1
OUTP0:LCALL SCL1;SCL 0 -> 1
DJNZ B,I2CWR1;loop
POP B
RET
;Read byte via I2C to A.
I2C_RD:MOV A,#1H;A init to receive 8 bit
I2CRD1:LCALL SCL0;SCL 1 -> 0
LCALL SDA1;SDA=1 - SDA line release
LCALL SCL1;SCL 0 -> 1
MOV C,SDA;move bit from SDA line to C
RLC A;shift bit C into A
JNC I2CRD1;loop until C = 1
LCALL SCL0;SCL 1 -> 0
LCALL SDA0;SDA=0 - ACK generation
LCALL SCL1;SCL 0 -> 1
RET
;Read byte via I2C to A without ASK
;(receive last byte).
I2C_LRD:MOV A,#1H;A init to receive 8 bit
I2CLRD1:LCALL SCL0;SCL 1 -> 0
LCALL SDA1;SDA=1 - SDA line release
LCALL SCL1;SCL 0 -> 1
MOV C,SDA;move bit from SDA line to C
RLC A;shift bit C into A
JNC I2CLRD1;loop until C = 1
LCALL SCL0;SCL 1 -> 0
LCALL SCL1;SCL 0 -> 1 when SDA=1: no ACK
RET
;STOP condition generation:
I2C_STOP:LCALL SCL0
LCALL SDA0
LCALL SCL1
LCALL SDA1
RET
;SDA and SCL lines control:
SDA0:CLR SDA;SDA 1/0
RET
SDA1:SETB SDA;SDA 0/1
RET
SCL0:CLR SCL;SCL 1/0
RET
SCL1:SETB SCL;SCL 0/1
RET
;EEPROM address map:
;00H - page not used
;08H - touch memory code 1
;10H - touch memory code 2
;...
;Save new key:
;NUM - key number (1..9)
SAVE: MOV A,NUMMOV B,#8
MUL AB;NUM x 8
MOV R1,A;R1 <- subaddressLCALL I2C_SUB;send subaddressMOV R1,#8;init counter
MOV R0,#ROMD;init pointer
DOWR:MOV A,@R0
LCALL I2C_WR;send data
INC R0
DJNZ R1,DOWRLCALL I2C_STOP;stopLCALL DEL15;delay 15mS to page write
RET
;Check for member:
;Returns C=1 if code O.K.
CHKMEM:MOV R2,#1;init key counter
NEXT:MOV A,R2MOV B,#8
MUL AB;NUM x 8
MOV R1,A;R1 <- subaddressLCALL I2C_SUBR;send subaddress and read mode
MOV R1,#8;init counter
MOV R0,#ROMD;init pointer
DORD:LCALL I2C_RD;read data
XRL A,@R0
JNZ INVAL;jump if invalid code
INC R0;next address
DJNZ R1,DORDLCALL I2C_LRD;stop read
LCALL I2C_STOP
SETB C;valid code, C <- 1
RET
INVAL: LCALL I2C_LRD;stop read
LCALL I2C_STOP
INC R2;next key
MOV A,R2CJNE A,#MAXK+1,NEXT
CLR C;invalid code, C <- 0
RET
;Check for master:
CHKMAS: MOV R1,#8;init counter
MOV DPTR,#MK;init pointer to ROM
MOV R0,#ROMD+7;init pointer to RAM
DOCM:CLR A
MOVC A,@A+DPTR;read ROM
XRL A,@R0;ROM[DPTR] = RAM[R0] ?
JNZ INVM;jump if invalid code
INC DPTR;next ROM address
DEC R0;next RAM address
DJNZ R1,DOCMSETB C;valid master code, C <- 1
RET
INVM:CLR C;invalid master code, C <- 0
RET
;Display support:
;Input: NUM = value
;if PROG = 0 display is blanked
;if PROG = 1 and BLINK = 1 display is blinking
DISP: MOV A,#BLANK;blank display if PROG = 0
JNB PROG,INDMOV A,#CH_P;display "P" if SNUM = 0
JNB SNUM,INDMOV A,NUM;display NUM if PROG = 1 and SNUM = 1
IND:MOV C,T320M;load blink period bit
ORL C,/BLINK;check blink enable bit
JC IND1
MOV A,#BLANK
IND1:MOV DPTR,#FONT;font table pointer
MOVC A,@A+DPTR;read font
MOV DDATA,A;indicator control
RET
;Delay 15mS:
DEL15:PUSH BPUSH ACCMOV B,#30
DEL05:MOV A,#CLK_KHZ/48
DJNZ ACC,$
LCALL WAKEUP;watchdog wakeup
DJNZ B,DEL05POP ACC
POP B
RET
; ------ Interrupt Holders ------
; TIMER 0 Interrupt
; System clock (20mS)
RTC: PUSH ACC
CLR TR0 ;timer 0 stop
MOV TH0,#HI(RTCV) ;timer 0 load for 20mS
MOV TL0,#LO(RTCV)
SETB TR0 ;timer start
INC RTPC ;advance Real Time Program Counter
; 20mS program counters
RTC1:MOV A,TMATMJZ RTC2
DEC TMATM
RTC2:MOV A,AENTMJZ RTC3
DEC AENTM
RTC3:MOV A,OPNTMJZ RTC4
DEC OPNTM
RTC4:MOV A,RETTMJZ RTC5
DEC RETTM
RTC5:POP ACC
RETI
; FGABSCDE
FONT.DB 01001000B;code 00H, character 0
.DB 11101011B;code 01H, character 1
.DB 10001100B;code 02H, character 2
.DB 10001001B;code 03H, character 3
.DB 00101011B;code 04H, character 4
.DB 00011001B;code 05H, character 5
.DB 00011000B;code 06H, character 6
.DB 11001011B;code 07H, character 7
.DB 00001000B;code 08H, character 8
.DB 00001001B;code 09H, character 9
.DB 00001010B;code 0AH, character A
.DB 00111000B;code 0BH, character B
.DB 01011100B;code 0CH, character C
.DB 10101000B;code 0DH, character D
.DB 00011100B;code 0EH, character E
.DB 00011110B;code 0FH, character F
.DB 11111111B;code 10H, character blank
.DB 10111111B;code 11H, character -
.DB 00001110B;code 12H, character P
;Characters codes table:
BLANK.EQU 010H;character "blank" code
CH_MIN.EQU 011H;character "-" code
CH_P.EQU 012H;character "P" code
;Master key code:
MK.DB 062H,000H,000H,002H,0D6H,089H,029H,001H
#IF (DEBUG>1)
#INCLUDE "LIBDBG16.ASM"
#ENDIF
.END
Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников
Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.
Цены ниже, чем в агентствах и у конкурентов
Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит
Бесплатные доработки и консультации
Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки
Гарантируем возврат
Если работа вас не устроит – мы вернем 100% суммы заказа
Техподдержка 7 дней в неделю
Наши менеджеры всегда на связи и оперативно решат любую проблему
Строгий отбор экспертов
К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»
Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован
Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн
Выполнить 2 контрольные работы по Информационные технологии и сети в нефтегазовой отрасли. М-07765
Контрольная, Информационные технологии
Срок сдачи к 12 дек.
Архитектура и организация конфигурации памяти вычислительной системы
Лабораторная, Архитектура средств вычислительной техники
Срок сдачи к 12 дек.
Организации профилактики травматизма в спортивных секциях в общеобразовательной школе
Курсовая, профилактики травматизма, медицина
Срок сдачи к 5 дек.
краткая характеристика сбербанка анализ тарифов РКО
Отчет по практике, дистанционное банковское обслуживание
Срок сдачи к 5 дек.
Исследование методов получения случайных чисел с заданным законом распределения
Лабораторная, Моделирование, математика
Срок сдачи к 10 дек.
Проектирование заготовок, получаемых литьем в песчано-глинистые формы
Лабораторная, основы технологии машиностроения
Срок сдачи к 14 дек.
Вам необходимо выбрать модель медиастратегии
Другое, Медиапланирование, реклама, маркетинг
Срок сдачи к 7 дек.
Ответить на задания
Решение задач, Цифровизация процессов управления, информатика, программирование
Срок сдачи к 20 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Информационные технологии
Срок сдачи к 11 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Геология
Срок сдачи к 11 дек.
Разработка веб-информационной системы для автоматизации складских операций компании Hoff
Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления
Срок сдачи к 1 мар.
Нужно решить задание по информатике и математическому анализу (скрин...
Решение задач, Информатика
Срок сдачи к 5 дек.
Заполните форму и узнайте цену на индивидуальную работу!