Проектирование электронного кодового замка

Разработка электронного кодового замка с функцией дверного звонка и изменением пароля на микроконтроллере ATtiny2313. Исследование особенностей и возможностей микроконтроллеров AVR. Выбор элементов принципиальной схемы. Алгоритма управляющей программы.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 17.04.2014
Размер файла 262,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

3. Разработка алгоритма управляющей программы

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Разработка структурной схемы

1.1 Принцип действия замка

2. Разработка принципиальной схемы

2.1 Выбор элементов схемы

2.2 Обоснование выбора микроконтроллера

3. Разработка алгоритма управляющей программы

4. Разработка управляющей программы

Заключение

Список использованной литературы

Введение

Кодовые замки являются эффективным средством предотвращения доступа посторонних лиц к охраняемым помещениям. К их достоинствам можно отнести простоту в обращении, надёжность, возможность обеспечить высокую степень защиты, относительную лёгкость смены кода (по сравнению со сменой обычного механического замка). Также немаловажными являются отсутствие необходимости изготовления ключей при предоставлении доступа большому количеству людей и невозможность физической потери ключа. Недостатком таких систем можно назвать возможность для злоумышленника подсмотреть код или подобрать его. Однако, при большой разрядности кода или наличии конструктивных особенностей, препятствующих подбору кода, таких как ограничение количества попыток или введение временной задержки между неудачными попытками, эта задача сильно затрудняется, поэтому последний недостаток нельзя назвать существенным.

В данном курсовом проекте осуществляется разработка электронного кодового замка с функцией дверного звонка и изменением пароля на микроконтроллере ATtiny2313.

1. Разработка структурной схемы

Рисунок 1.1 - Структурная схема устройства

Введение кода доступа происходит посимвольно на клавиатурной матрице размером 4х3 и завершается после окончания контрольного промежутка времени (1с), то есть через 1 секунду после прекращения манипуляций с клавиатурой, при этом фильтруются случайные переключения контактов при нажатии клавиш и одновременном нажатии нескольких клавиш.

Длина кода возможна любая, она ограничена только размером ОЗУ и EEPROM микроконтроллера. Матричная организация уменьшает количество занятых выводов МК.

Проверка кода доступа происходит сравнением введённого значения с тем, которое было установлено при конфигурировании кода доступа (которое было записано в EEPROM контроллера).

При нажатии кнопки звонка генерируются мелодии, записанные в памяти микроконтроллера. Они сохраняется в ПЗУ в виде отсчётов сигнала. Генерация звукового сигнала совершается с помощью пьезоэлектрического динамика подачей на него периодического сигнала звуковой частоты.

Изменение пароля происходит следующим образом: ввод старого пароля, проверка введенного пароля, если правильно введён, проверка режима записи, если замок находится в режиме записи, то ввод нового пароля, контрольный промежуток времени (1с.), открытие двери.

1.1 Принцип действия замка

Замок имеет два режима работы. Режим "Записи кода" и режим "Работы". Для выбора режима предназначен переключатель S14 (см. Рисунок 2.1). Если контакты этого переключателя разомкнуты - замок находится в режиме "Работа", если замкнуты - в режиме "Запись кода". В режиме "Записи кода" хозяин квартиры нажимает кнопки набора кода в любом порядке и в любых комбинациях. Микроконтроллер отслеживает все изменения на клавиатуре и записывает их в ОЗУ. Причем не берется во внимание время удержания той либо иной комбинации. В память записывается лишь факт смены комбинаций. Длина кодовой последовательности ограничена только размерами ОЗУ. Сигналом к окончанию ввода кода служит прекращение манипуляций с клавиатурой. Процессор считает, что ввод кода закончился, если состояние клавиатуры не изменилось в течение одной секунды. В процессе набора код записывается в ОЗУ. При обнаружении паузы в 1 секунду процессор переписывает код в свою внутреннюю долговременную память (EEPROM).

Этот код представляет собой последовательность байтов, отражающих все состояния клавиатуры во время набора. После того, как коды будут записаны, замок можно перевести в режим «Работа» (разомкнув контакты S14).

В режиме «Работа» замок постоянно находится в ожидании нажатия кнопок (S1...S12). То есть, ждет ввода кода. Для того, что бы дверь открылась, необходимо повторить те же самые манипуляции с кнопками, которые были сделаны в режиме записи кода . Микроконтроллер так же, как и в предыдущем случае отслеживает эти манипуляции, и записывает полученный таким образом код в ОЗУ. По окончании ввода кода (не нажимая кнопок в течении 1 секунды) программа переходит в режим сверки кода. Она сравнивает код находящийся в ОЗУ и код, записанный в EEPROM. Сначала сравнивается длина обоих кодов. Затем коды сверяются побайтно. Если сравнение прошло успешно, микроконтроллер подает сигнал на ключ механизма открывания замка (VT2). Транзистор открывается и подает питание на реле K1, которое и открывает замок. Тут можно сделать по разному. Например, контакты реле K1 могут включать соленоид замка.

Кроме собственно замка это устройство выполняет так же роль дверного звонка. Для этого в схеме есть кнопка звонка (S13) и звуковой излучатель (VF1). В качестве усилителя звука используется ключ на транзисторе VT1. Программа сделана таким образом, что при прекращении звука на выходе PB3 контроллера всегда устанавливается логический ноль. Ключ закрывается и ток через транзистор и динамик VF1 не идет. Таким образом удалось обойтись без разделительной емкости. Дверной звонок работает независимо от кодового замка. Правда только в режиме ожидания кода. Когда код уже начали набирать, звонок отключается. При нажатии на кнопку звонка звучит одна из восьми записанных в память мелодий. При каждом нажатии новая мелодия. Мелодия звучит, пока нажата кнопка.

2. Разработка принципиальной схемы

Рисунок 2.1 - Принципиальная схема кодового замка

2.1 Выбор элементов схемы

Во-первых, за основу возьмём микроконтроллер ATtiny2313 (D1), так как для нашей задачи особо высокопроизводительного микроконтроллера не требуется, а эта модель полностью соответствует нашим требованиям, а также она имеет преимущества и особенности , которые были перечислены выше.

Для более точного подсчёта времени и корректного воспроизведения звука возьмём кварцевый резонатор (Q1) рассчитанный на частоту 4МГц. Для его корректной работы также необходимо выбрать С1 и С2, формирующие цепи согласования кварцевого резонатора. Емкости конденсаторов C1 и C2, подключаемых между выводами резонатора и общим проводом, зависят от частоты и типа резонатора. Для кварцевого резонатора на частоту 4 МГц, например, емкость каждого конденсатора составляет порядка 22 пФ.

Для подключения звукового излучателя (динамика) применяется ключевой каскад на транзисторе VT1. Это самый простой способ получить звук достаточной громкости, учитывая, что наш сигнал это прямоугольные импульсы с амплитудой, почти равной напряжению питания. Транзисторный каскад нужен лишь для повышения нагрузочной способности.

Микроконтроллер имеет два встроенных таймера/счетчика. Для формирования звука лучше подходит шестнадцатиразрядный таймер. Чем больше разрядов, тем с большей точностью можно выбирать его коэффициент деления.

Это очень важно для создания нотного стана. Поэтому для формирования звука выберем шестнадцатиразрядный таймер Т1. Теперь определимся с режимом работы нашего таймера. Для генерации звука удобнее всего использовать режим СТС (сброс по совпадению). Нам просто нужно выбрать такой коэффициент деления, чтобы на выходе таймера получить колебания в звуковом диапазоне частот.

Теперь определимся с тем, как наш сигнал будет попадать на внешний вывод микроконтроллера. Микроконтроллер предусматривает прямой вывод сигнала на один из своих выходов. Причем предусмотрены отдельные выходы для каждого из каналов совпадения. Для канала А подобный выход называется ОС1А. Он совмещен с третьим разрядом порта РВ и является альтернативной функцией данного контакта.

Подключение и отключение сигнала совпадения к внешнему выводу ОС1А производится программным путем. Это позволяет программе в нужный момент включать или выключать звук. Так как для вывода звука мы будем использовать один из разрядов порта РВ, то для подключения датчиков воспользуемся другим портом. А именно портом PD.

Однако подобная схема имеет и свой недостаток. В отсутствие звукового сигнала на выходе PB3 микроконтроллера обязательно нужно установить низкий логический уровень. Высокий логический уровень приведет к тому, что транзистор VT1 будет постоянно открыт. Это вызовет недопустимо большой ток через головку VF1. Постоянно протекающий ток через обмотку динамика вызовет излишнюю потерю мощности и может даже вызвать выход из строя, как транзистора, так и динамика. При составлении программы необходимо учесть этот момент.

Переключатель S14 предназначен для выбора режима работы. Если контакт переключателя S14 (на вход PB7 «0») замкнут, замок переходит в режим «Запись». Разомкнутые контакты (на PB7 «1») соответствуют режиму «Работа».

Переключатель S13 предназначен для звонка. Если контакт переключателя S13 (на вход PB6 «0») замкнут, звонок звенит. Разомкнутые контакты (на PB6 «1») - звонок прекращается.

Схема управления механизмом замка состоит из транзисторного ключа VT1 и электромагнитного реле К1. Резистор R2 ограничивает ток базы ключа. Диод VD1 служит для защиты от напряжения самоиндукции, возникающей на катушке реле. Питание реле осуществляется от отдельного источника + 12 В (питание микроконтроллера +5 В). Если в качестве VT1 применять транзистор КТ315, то электромагнитное реле может иметь рабочее напряжение +12 В и рабочий ток не более 250 мА. Контакты реле должны быть рассчитаны на управление исполнительным механизмом (соленоидом).

Звуковая часть и сам микроконтроллер питаются от напряжения +5 В. А электромагнит замка питается от отдельного источника + 12 В. Напряжение питания, подаваемое на микроконтроллер, обязательно должно быть стабилизированным. Питание на электромагнит стабилизировать совершенно необязательно. Для повышения громкости звонка и для защиты от помех питание для звуковой схемы можно осуществлять от напряжения, поступающего на вход стабилизатора. Обычно напряжение на входе стабилизатора равно +7...+11 В. Поэтому можно электромагнит и звуковую схему запитывать от одного нестабилизированного источника +12 В. Те же 12 В можно подавать на вход стабилизатора, с выхода которого снимать напряжение +5 В для микроконтроллера.

Для экономии и уменьшения количества занятых выводов применяем матричную организацию клавиатуры 3х4. Выводы подключаются к порту PORTD.

Каждый вывод строчек клавиатуры подтянут к «плюсу» резистором 2 кОм. Это нужно для того, чтобы в случае, если ни одна кнопка не нажата, на входы контроллера приходила «1». Если этого не сделать - на входе будет так называемое 3-е состояние - не пойми чего. Это не пойми чего, контроллер может понять совершенно произвольно. Может посчитать «нулем», может - «единицей», что вызовет ложные «нажатия» клавиш.

2.2 Обоснование выбора микроконтроллера

Рисунок 2.2 - Расположение выводов ATtiny2313

Микросхема ATtiny2313 представляет собой восьмиразрядный микроконтроллер с внутренней программируемой Flash - памятью размером 2 Кбайт. Выполняя команды за один цикл, ATtiny2313 достигает производительности 1 MIPS при частоте задающего генератора 1 МГц, что позволяет разработчику оптимизировать отношение потребления к производительности. AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды. В результате эта архитектура позволяет обеспечить в десятки раз большую производительность, чем стандартная CISC архитектура.

ATtiny2313 имеет следующие характеристики:

· 2 Кбайт системной программируемой Flash - памяти программ

· 128 байт EEPROM

· 128 байт SRAM (ОЗУ)

· 18 линий ввода - вывода (I/O)

· 32 рабочих регистра

· однопроводной интерфейс для внутрисхемной отладки

· два многофункциональных таймера/счетчика с функцией совпадения

Ш поддержка внешних и внутренних прерывании; последовательный программируемый USART - порт

Ш универсальный последовательный интерфейс с детектором начала передачи

· программируемый сторожевой таймер с внутренним генератором

· три программно изменяемых режима энергосбережения

В режиме Idle происходит приостановка центрального процессора, остальные системы продолжают работать. Выход из этого режима возможен как по внешнему прерыванию, так и по внутреннему. Например, при переполнении таймера.

В режиме Power Down сохраняется содержимое регистров, но приостанавливается работа внутреннего генератора и отключаются все остальные функции микросхемы. Выход из режима возможен по внешнему прерыванию или после системного сброса. Такое решение позволяет совмещать быстрый старт с низким энергопотреблением.

Микросхема изготовлена с использованием уникальной высокоточной технологии фирмы Atmel. Внутренняя Flash - память программ может быть перепрограммирована при помощи ISP - интерфейса без извлечения микроконтроллера из платы. Объединение 8 - разрядного RISC - процессора внутрисистемной перепрограммируемой Flash - памятью на одном кристалле делают микросхему ATtiny2313 мощным средством, которое обеспечивает очень гибкие и недорогие решения многих прикладных задач управления.

3. Разработка алгоритма управляющей программы

Рисунок 3.1 - Алгоритм управляющей программы

4. Разработка управляющей программы

Псевдокоманды управления

.include "tn2313def.inc"; Присоединение файла описаний

.list; Включение листинга

.defdrebL = R1; Буфер антидребезга младший байт

.defdrebH = R2; Буфер антидребезга старший байт

.deftemp1 = R3

.deftemp = R16; Вспомогательный регистр

.defdata = R17; Регистр передачи данных

.defflz = R18; Фаза работы замка

.defcount = R19; Регистр передачи данных

.defaddre = R20; Текущий адрес в EEPROM

.defprewcode = R21; Временный буфер кода

.defKey = R22; Код клавиши

.defloop = R23; Регистр счетчика

.deffnota = R24; Частота текущей ноты

.defdnota = R25; Длительность текущей ноты

.DEFLastKey=r9

.DEFDelayVar=r7

Определение констант

.equbsize = 30; Размер буффера для хранения кода

.equzad= 3000; Порог чувствительности

.equkandr = 20; Константа антидребезга

Резервирование ячеек памяти (SRAM)

.dseg; Выбираем сегмент ОЗУ

.org0x60; Устанавливаем текущий адрес сегмента

bufr:.bytebsize; Буфер для приема кода

melod:.byte1; Номер текущей мелодии

Резервирование ячеек памяти (EEPROM)

.eseg; Выбираем сегмент ОЗУ

.org0x08; Устанавливаем текущий адрес сегмента

klen:.byte1; Резервирование ячейки для хранения длины кода

bufe:.bytebsize; Буфер для хранения кода

Начало программного кода

.cseg ; Выбор сегмента программного кода

.org0; Устанеовка текущего адреса на ноль

start:rjmpinit; Переход на начало программы

reti; Внешнее прерывание 0

reti; Внешнее прерывание 1

reti; Прерывание по захвату таймера T1

rjmppropr; Прерывание по совпадению T1

rjmppropr; Прерывание по переполнению T1

reti; Прерывание по переполнению T0

reti; Прерывание UART прием завершен

reti; Прерывание UART регистр данных пуст

reti; Прерывание UART передача завершена

reti; Прерывание по компаратору

reti; Прерывание по изменению на любом контакте

reti; Таймер/счетчик 1. Совпадение B

reti; Таймер/счетчик 0. Совпадение B

reti; Таймер/счетчик 0. Совпадение A

reti; USI Стартовая готовность

reti; USI Переполнение

reti; EEPROM Готовность

reti; Переполнение охранного таймера

Модуль инициализации *

init:

Инициализация стека

lditemp, RAMEND; Выбор адреса вершины стека

outSPL, temp; Запись его в регистр стека

Инициализация портов В/В

lditemp,0x18; Инициализация порта PB

outDDRB,temp

lditemp,0xE7

outPORTB,temp

lditemp, 0x0F; Инициализация порта PD

outDDRD, temp

lditemp, 0x7F

outPORTD, temp

Инициализация (выключение) компаратора

ldi temp, 0x80

outACSR, temp

Номер мелодии

lditemp,0

stsmelod,temp

;* Начало основной программы *

main:

Инициализация таймера

lditemp,high(zad); Записываем коэффициент задержки

outOCR1AH,temp

lditemp,low(zad)

outOCR1AL,temp

lditemp,0x03; Режим работы таймера

outTCCR1B,temp

m0:rcallincod; Ввод и проверка кода клавиш

brne m0

m1:intemp,PINB; Проверка кнопки звонка

sbrstemp,6

rjmpkk1; Если нажата, переходим к звуковой части

m2:ldiZH,high(bufr); Установка указателя

ldiZL,low(bufr); на начало буфера

clrcount; Сброс счетчика байт

Цикл ввода кода

m3:cli; Запретить все прерывания

ldidata,1; Вызываем задержку первого типа

rcallwait; К подпрограмме задержки

m5:rcallincod; Ввод и проверка кода кнопок

stZ+,Key; Записываем его в буфер

inccount; Увеличение счетчика байтов

cpicount,bsize; Проверяем не конец ли буфера

brshm7; Если конец, завершаем ввод кода

movprewcode,Key; Записываем код как старый

ldidata,2; Вызываем задержку второго типа

(подготовка к задержке)

rcallwait

m6:rcallincod; Ввод и проверка кода кнопок

cpKey,prewcode

brnem3; Если изменилось, записываем в буфер

cpiflz,1; Проверка окончания фазы ввода кода

brne m6

m7:sbicPINB,7; Проверка состояния тумблера

rjmpm9; Если тумблер в режиме"работы", то на проверку кода

ldiaddre,0x08; Адрес начала хранения кода

rcalleerd; Чтение значения ячейки из EEPROM

cpidata,0xFF; Сравнение со значением FF(пусто)

breqeewrite; Если равны, то пропускаем проверку и переходим к записи

Процедура проверки кода

m9:

ldiaddre,klen; Адрес хранения длины кода

rcalleerd; Чтение длины кода из EEPROM

cpcount,data; Сравнение с новым значением

brnem13; Если не равны, к началу

ldiaddre,bufe; В YL начало буфера в EEPROM

ldiZH,high(bufr); В регистровую пару Z записываем

ldiZL,low(bufr); адрес начала буфера в ОЗУ

m10:rcalleerd; Читаем байт из EEPROM и

ldtemp,Z+; Читаем байт из ОЗУ и

cpdata,temp; Сравниваем байты разных кодов

brne m13; Если не равны, переходим к началу

deccount; Уменьшаем содержимое счетчика байтов

brnem10

rjmp m11

Режим записи кода

eewrite:

mov data,count; Помещаем длину кода в data

ldiaddre,klen; Адрес хранения длины кода

rcalleewr; Записываем в длину кода EEPROM

ldiaddre,bufe; В регистр адреса начало буфера

ldiZH,high(bufr); В регистровую пару Z записываем

ldiZL,low(bufr); адрес начала буфера в ОЗУ

m8:lddata, Z+; Читаем очередной байт из ОЗУ

rcalleewr; Запись байта в EEPROM

deccount; Декримент счетчика байтов

brnem8

Открывание замка

m11:

sbiPORTB,4; Команда "Открыть замок"

ldidata,3; Вызываем задержку третьего типа

rcallwait

cbiPORTB,4; Команда "Закрыть замок"

m13:rjmpmain

;* Вспомогательные процедуры *

; Проверка прием данных от клавиатуры.

incod:

clrr31

clt ; Сброс признака что была нажата клавиша.

ldir31,$0E ; Младьшая тетрада-запрос в порт, старшая

rcallGetKeyAnswer ; смещение ответа.

brneKeyPressed

ldir31,$3D

rcallGetKeyAnswer

brneKeyPressed

ldir31,$6B

rcallGetKeyAnswer

brneKeyPressed

ldir31,$97

rcallGetKeyAnswer

brneKeyPressed

ret

KeyPressed:

set

swapr31

andir31,$0F

swapKey

andiKey,$07

CCFind:incr31; Поиск какой конкретно бит установлен.

lsrKey

brccCCFind

breqNoMul

clt; Если нажато несколько клавиш то не нажата ни одна.

NoMul:movKey,r31

ret

; Сканирование клавиатуры: установка на выходных линиях заданного кода и прием

; ответа вызывается из функции GetKey.

GetKeyAnswer:

movKey,r31

andiKey,$0F

outPORTD,Key

clrDelayVar

Delay1:decDelayVar

brneDelay1

inKey,PIND

comKey

andiKey,$70; Если что то было найдено флаг Z нулевой.

Ret

Подпрограмма задержки

wait:

cpidata,1; Проверяем код задержки

brnew1

lditemp,0x40 ; Разрешаем прерывание по совпадению

rjmpw2

w1:lditemp,0x80 ; Разрешаем прерывания по переполнению

w2:outTIMSK,temp; Записываем маску

clr temp; Обнуляем таймер

outTCNT1H,temp

outTCNT1L,temp

ldiflz,0; Сбрасываем флаг задержки

sei; Разрешаем прерывания

cpidata,2; Если это задержка 2-го типа

breqw4; Завершаем подпрограмму

w3:cpiflz,1; Ожидание окончания задержки

brne w3

w4:ret

Запись байта в ячейку EEPROM

eewr:

sbic EECR,EEWE; Проверяем готовность EEPROM

rjmpeewr; Если не готов ждем

outEEAR,addre; Записываем адрес в регистр адреса

outEEDR,data; Записываем данные в регистр данных

sbiEECR,EEMWE; Устанавливаем бит разрешения записи

sbiEECR,EEWE; Устанавливаем бит записи

incaddre; Увеличиваем адрес в EEPROM

ret

Чтение байта из ячейки EEPROM

eerd:

sbicEECR,EEWE; Проверяем готовность EEPROM

rjmpeerd; Если не готов ждем

outEEAR,addre; Записываем адрес в регистр адреса

sbiEECR,EERE; Устанавливаем бит инициализации чтения

indata, EEDR; Помещаем прочитанный байт в temp

incaddre; Увеличиваем адрес в EEPROM

ret

;* Процедура обработки прерываний *

propr:ldiflz,1; Установка флага задержки

reti; Завершаем обработку прерывания

;* Мелодичный звонок *

kk1:

Инициализация таймера T1

ldi temp, 0x09; Включаем режим CTC

outTCCR1B, temp

km1:ldi temp, 0x00; Выключаем звук

outTCCR1A, temp

Вычисление номера нажатой кнопки

ldscount,melod; Читаем код текущей мелодии

inccount; Увеличение номера мелодии на 1

cpicount,4; Проверка не последняя ли мелодия

brnekm2; Если не последняя, переход

clrcount; Обнуление счетчика

km2:stsmelod,count; Помещаем номер в ячейку памяти

Выбор мелодии

km3:

movYL, count; Вычисляем адрес, где

ldiZL, low(tabm*2); хранится начало мелодии

ldiZH, high(tabm*2)

rcalladdw; К подпрограмме 16-разрядного сложения

lpmXL, Z+; Извлекаем адреса из таблицы

lpmXH, Z; и помещаем в X

Воспроизведение мелодии

km4:movZH, XH; Записываем в Z начало мелодии

movZL, XL

km5:intemp, PINB; Читаем содержимое порт B

sbrctemp, 6; Проверяем нажата ли еще кнопка звонка

rjmpkm6; Если равно (кнопки отпущены) в начало

lpmtemp, Z; Извлекаем код ноты

cpitemp, 0xFF; Проверяем не конец ли мелодии

breqkm4; Если конец, начинаем мелодию сначала

anditemp, 0x1F; Отделяем от кода частоту

movfnota, temp; Записываем в регистр частоту ноты

lpmtemp, Z+; Еще раз берем код ноты

roltemp; Сдвигаем так, что бы три старших

roltemp; разряда стали младшими

roltemp

roltemp

anditemp, 0x07; Извлекаем код длительности задержки

movdnota, temp; Помещаеем ее в ячейку длительности

rcallnota; К подпрограмме воспроизведения ноты

rjmpkm5; В начало цикла (следующая нота)

km6:ldi temp, 0x00; Выключаем звук

outTCCR1A, temp

rjmpmain

;* Вспомогательные подпрограммы *

Подпрограмма 16-ти разрядного сложения

addw:pushYH

lslYL; Умножение первого слагаемого на 2

ldiYH, 0; Второй байт первого слагаемого = 0

addZL, YL; Складываем два слагаемых

adcZH, YH

popYH

ret

Подпрограмма исполнения одной ноты

nota:pushZH

pushZL

pushYL

pushtemp

cpifnota, 0x00; Проверка не пауза ли

breqnt1; Если пауза, переходим сразу к задержке

movYL, fnota; Вычисляем адрес, где хранится

ldiZL, low(tabkd*2); коэффициент деления для текущей ноты

ldiZH, high(tabkd*2)

rcalladdw; К подпрограмме 16-разрядного сложения

lpmtemp, Z+; Извлекаем мл. разр. КД для текущей ноты

lpmtemp1, Z; Извлекаем ст. разр. КД для текущей ноты

outOCR1AH, temp1; Записать в старш. часть регистра совпадения

outOCR1AL, temp; Записать в младш. часть регистра совпадения

lditemp, 0x40; Включить звук

outTCCR1A, temp

nt1:rcallwait1; Задержка

lditemp, 0x00; Выключить звук

outTCCR1A, temp

ldidnota,0; Сбрасываем задержку

rcallwait1; Пауза между нотами

poptemp

popYL

popZL

pop ZH

ret

Подпрограмма задержки

wait1:pushZH

pushZL

pushYH

pushYL

movYL, dnota; Вычисляем адрес, где хранитсяldiZL, low(tabz*2); нужный коэффициент задержкиl

diZH, high(tabz*2)

rcalladdw ; К подпрограмме 16-разрядного сложения

lpmYL, Z+ ; Читаем первый байт коэффициента задержки

lpmYH, Z ; Читаем второй байт коэффициента задержки

clrZL; Обнуляем регистровую пару Z

clrZH; Цикл задержки

ww1:ldiloop,255; Пустой внутренний цикл

ww2:decloop

brne ww2

adiwR30, 1; Увеличиваем регистр Z на единицу

cpYL, ZL; Проверка младшего разряда

brneww1

cpYH, ZH; Проверка старшего разряда

brneww1

popYL; Завершение подпрограммы

popYH

popZL

pop ZH

ret

;* Таблица задержек *

tabz: .dw 128,256,512,1024,2048,4096,8192

;* Таблица коэффициентов деления *

tabkd:.dw0

.dw4748,4480,4228,3992,3768,3556,3356,3168,2990,2822,2664,2514

.dw2374,2240,2114,1996,1884,1778,1678,1584,1495,1411,1332,1257

.dw1187,1120,1057, 998, 942, 889, 839, 792

;* Таблица начал всех мелодий *

tabm:.dwmel1*2,mel2*2,mel3*2,mel4*2

;* Таблица мелодий *

; В траве сидел кузнечик

mel1:.db109,104,109,104,109,108,108, 96,108,104

.db108,104,108,109,109, 96,109,104,109,104

.db109,108,108, 96,108,104,108,104,108,141

.db 96,109,111, 79, 79,111,111,112, 80, 80

.db112,112,112,111,109,108,109,109, 96,109

.db111, 79, 79,111,111,112, 80, 80,112,112

.db112,111,109,108,141,128, 96,255

; Песенка крокодила Гены

mel2:.db109,110,141,102,104,105,102,109,110,141

.db104,105,107,104,109,110,141,104,105,139

.db109,110,173, 96,114,115,146,109,110,112

.db109,114,115,146,107,109,110,114,112,110

.db146,109,105,136,107,105,134,128,128,102

.db105,137,136,128,104,107,139,137,128,105

.db109,141,139,128,110,109,176,112,108,109

.db112,144,142,128,107,110,142,141,128,105

.db109,139,128,173,134,128,128,109,112,144

.db142,128,107,110,142,141,128,105,109,139

.db128,173,146,128, 96,255

; В лесу родилась елочка

mel3:.db132,141,141,139,141,137,132,132,132,141

.db141,142,139,176,128,144,146,146,154,154

.db153,151,149,144,153,153,151,153,181,128

.db 96,255

Заключение

электронный кодовый замок микроконтроллер

В ходе выполнения курсового проекта мы рассмотрели особенности и возможности микроконтроллеров AVR. Также было разработано устройство на основе микроконтроллера ATtiny2313, а именно электронный кодовый замок и следующая документация:

· схема структурная

· схема электрическая принципиальная

· алгоритм управляющей программы

· листинг программы

Особенностью разработанного устройства является минимальное использование различных составляющих компонентов, а следовательно и низкая стоимость при значительных функциональных возможностях. Программа была разработана среде разработки AVR Studio, которая предоставляет большие возможности по отладке и разработке различных программ для AVR микроконтроллеров.

Кодовый замок может эксплуатироваться в диапазоне температур от -30 оС до +60 оС.

Список использованной литературы

1. Белов А. В. Микроконтроллеры AVR в радиолюбительской практике. -- СПб.: Наука и Техника, 2007. -- 352 е.: ил.

2. Белов А. В. Самоучитель разработчика устройств на микроконтроллерах AVR Наука и Техника, 2008. -- 544 с: ил.

3. Белов А. В. Создаем устройства на микроконтроллерах. -- СПб.: Наука и Техника, 2007. -- 304 с: ил.

4. Голубцов М. С. Микроконтроллеры AVR: от простого к сложному / М. С. Голубцов -- М.: СОЛОН-Пресс, 2003. 288 с. -- (Серия «Библиотека инженера»).

5. Гребнев В. В. Микроконтроллеры семейства AVR фирмы Atmel. -- М.: ИП РадиоСофт 2002-- 176 с: ил.

6. Евстифеев А.В. Микроконтроллеры AVR семейства Classic фирмы ATMEL - 3е изд., стер. -- М.: Издательский дом «Додэка_XXI», 2006. - 288 с.: ил. (Серия «Мировая электроника»).

7. Система команд 8-розрядных RISK микроконтроллеров семейства AVR

8. Трамперт В. AVR-RISC микроконтроллеры.: Пер, с нем, -- К,; "МК-Пресс", 2006,-- 464 с, ил.

9. ATtiny2313 Datasheet: 8-bit Microcontroller with 2K Bytes In-System Programmable Flash ATtiny2313/V Preliminary

Размещено на Allbest.ru

...

Подобные документы

  • Принцип работы кодового замка. Проектирование кодового замка с возможностью звуковой сигнализации при попытке подбора кода, на базе микроконтроллера с архитектурой MCS-51. Функциональная схема устройства, составление программы для микроконтроллера.

    курсовая работа [3,2 M], добавлен 14.11.2010

  • Электронный замок: общая характеристика и принцип действия. Анализ вариантов реализации устройства. Разработка алгоритма функционирования, структурной и электрической принципиальной схемы электронного замка. Блок-схема алгоритма работы программы.

    курсовая работа [363,3 K], добавлен 10.05.2015

  • Разработка электронного кодового замка с использованием микроконтроллера PIC16F676. Назначение отдельных функциональных блоков. Возможные варианты структурных схем. Обоснование выбора структурной схемы устройства. Алгоритм работы структурной схемы.

    курсовая работа [334,9 K], добавлен 18.06.2012

  • Общее описание восьмиразрядного высокопроизводительного однокристального микроконтроллера. Порты ввода-вывода. Разработка структурно-функциональной схемы. Выбор элементной базы, основные используемые процедуры. Описание алгоритма программы, ее листинг.

    курсовая работа [28,4 K], добавлен 23.12.2012

  • Разработка электронного кодового замка, предназначенного для запирания дверей, с возможностью ввода кодовой комбинации. Системотехническое и схемотехническое проектирование. Расчет условных размеров печатной платы. Комплексные показатели технологичности.

    курсовая работа [333,3 K], добавлен 26.12.2014

  • Технические характеристики цифрового кодового звонка. Принцип его действия: структурная и принципиальная схема. Разработка инструкции по настройке и регулировке. Характерные неисправности изделия, алгоритм их поиска. Электрический расчет мультивибраторов.

    курсовая работа [194,7 K], добавлен 24.05.2017

  • Разработка структурной и принципиальной схем электронного тахометра. Изучение принципа работы датчика магнитного поля. Выбор микроконтроллера. Проектирование управляющей программы для микроконтроллера. Адаптация устройства к промышленному применению.

    курсовая работа [1,1 M], добавлен 22.01.2015

  • Устройство, принцип работы, обозначения диодных и триодных тиристоров. Вольт-амперные характеристики диодных и триодных тиристоров. Порядок включения тринисторов в цепях постоянного тока. Схема устройства, выполняющего функции дверного кодового замка.

    реферат [663,7 K], добавлен 25.06.2014

  • В работе на базе PIC-контроллера реализуется цифровой секундомер. Выбор технических требований к устройству, к питанию. Разработка структурной схемы, принципиальной электрической схемы, алгоритма работы управляющей программы, управляющей программы.

    курсовая работа [427,1 K], добавлен 20.06.2008

  • Разработка структурной и принципиальной схемы устройства. Микроконтроллер PIC16F886, температурные и электрические характеристики. Четырехразрядный семисегментный светодиодный индикатор. Разработка алгоритма управляющей программы, общий алгоритм.

    курсовая работа [497,4 K], добавлен 31.01.2013

  • Основные типы микроконтроллеров. Разработка структурной схемы прибора. Работа матричного индикатора HCMS-2000. Разработка принципиальной схемы. Расчет режимов элементов. Разработка алгоритма программы. Последовательный интерфейс обмена данными.

    курсовая работа [650,6 K], добавлен 12.01.2016

  • Цифровые способы обработки электрических сигналов, передачи и приема их в цифровой форме. Принцип работы автоколебательного мультивибратора. Разработка схемы электрической принципиальной устройства управления. Моделирование электронного коммутатора.

    курсовая работа [584,8 K], добавлен 10.12.2012

  • Принцип работы музыкального звонка с двумя режимами работы: автономный и от сети. Аппаратные средства микроконтроллеров серии ATtiny2313. Расчет стоимости разработки конструкторской документации и сборки устройства. Описание и расчеты элементной базы.

    дипломная работа [3,9 M], добавлен 09.07.2010

  • Разработка принципиальной схемы, статический и динамический расчет. Выбор электронных элементов схемы (операционного усилителя, конденсаторов, резисторов) и конструирование печатной платы. Расчёт надёжности устройства и области его нормальной работы.

    курсовая работа [393,0 K], добавлен 22.12.2010

  • Синхронный дискретный автомат Мура как прототип проектируемого электронного автомата с заданными входными сигналами и контролируемыми параметрами. Разработка схемы дискретного автомата. Выбор элементной базы. Разработка устройств сопряжения по входу.

    курсовая работа [958,4 K], добавлен 29.07.2009

  • Микросхема 555 - таймер: история создания, фирмы производители и аналоги, основные технические характеристики. Принцип работы и практическое применение. Идеологически устройство чипа. Пример работы кодового замка. Переменный подстрочный резистор.

    курсовая работа [4,0 M], добавлен 16.06.2015

  • Изучение видов и особенностей электрического оборудования летательных аппаратов. Общие сведения об авиационных генераторах. Описание структурной схемы электронного регулятора напряжения. Выбор датчика, усилителя мощности и регулирующего элемента.

    курсовая работа [87,9 K], добавлен 10.01.2015

  • Описание алгоритма работы и разработка структурной схемы микропроцессорной системы управления. Разработка принципиальной схемы. Подключение микроконтроллера, ввод цифровых и аналоговых сигналов. Разработка блок-схемы алгоритма главной программы.

    курсовая работа [3,3 M], добавлен 26.06.2016

  • Назначение основных блоков электронного трансформатора. Выбор входного выпрямителя и фильтра. Расчет трансформатора, мощности разрядного резистора и схемы силового инвертора. Разработка системы управления силовым инвертором. Проектирование блока защиты.

    курсовая работа [443,4 K], добавлен 05.03.2015

  • Рассмотрение структуры и принципов работы таймеров/счетчиков (общего назначения, сторожевого, типов А, В, С, D, Е) микроконтроллеров и аналого-цифрового преобразователя семейства AVR с целью разработки обучающего компьютерного электронного пособия.

    курсовая работа [1,0 M], добавлен 06.03.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.