Технический Портал Левши Пятница, 03.05.2024, 05:23
| RSS
Меню сайта

Категории раздела
ПИТАНИЕ [17]
МЕТАЛЛО ДЕТЕКТОРЫ [1]
СВЯЗЬ [5]
НАЧИНАЮЩИМ [6]
МикроКонтроллеры [15]
АВТОМАТИКА [4]
АУДИО. [2]
СИСТЕМЫ ОХРАНЫ И БЕЗОПАСНОСТИ [6]
СИСТЕМЫ ДЛЯ САМООБОРОНЫ [1]
ТЕЛЕФОНИЯ [7]

Мини-чат

Главная » Статьи » РАДИОЭЛЕКТРОНИКА » МикроКонтроллеры

СИСТЕМА СИГНАЛИЗАЦИИ НА ATTiny2313
Предлагается несложное устройство сигнализации, построенное на микроконтроллере ATTiny2313, которое обеспечивает следующие функции:
- тумблер внутри гаража (или другого помещения), включаем тумблером сигнализацию, у нас задержка 10 секунд чтоб выйти и закрыть дверь.
- вышли закрыли,
- теперь утром открываем, снова задержка 10 секунд чтоб войти и выключить тумблер,иначе включается сигнализация (сирена).
- еще момент если сирена включилась, то выключить сигнализацию тумблером не должно быть возможным.
- для этого должна быть спрятанная кнопка сброса.

Схема устройства состоит из МК ATTiny2313, программа которого обеспечивает выполнение заданных функций. Напряжение питания +9..+12В подается на разъем ХР2. Интегральный стабилизатор DA1 вместе с конденсаторами С4-С6 обеспечивает питание схемы стабилизированным напряжением +5В.

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

Разъём XP1 типа ВН10 необходим для подключения программатора, например, ByteBlaster.
Резистор R1 подтягивает цепь сброса МК к +5В, для повышения стойкости к помехам. Сброс МК происходит при подачи на вывод ~RESET логического "0", а также при включении питания внутренними цепями сброса (Power-on reset).

Тумблер переключения режима работы схемы подключается через разъем Х1. Если тумблер соединяет верхний (по схеме) контакт разъема с +5В, сигнализация включена, иначе, сигнализация отключена.
Светодиод D1 служит для индикации режима работы.
Кнопкой SW1 можно отключить сигнализацию, если она сработала.
Датчики (герконы или другие) подключаются шлейфом к разъему XS1. Когда двери (или окна) открыты, магниты, установленые на них не действуют на герконы. После закрытия дверей, контакты герконов под действием магнитов замыкаются. Срабатывание устройства произойдет после того, как хотя бы один геркон разомкнулся (с учетом 10 секунд для отключения сигнализации). Когда герконы замкнуты, на порт PD2/INT0 подается лог. "0". В случае разрыва цепи на порт подается лог. "1", срабатывает прерывание INT0 контроллера по возрастающему фронту импульса.
Сброс тревоги происходит при появлении на порте PD3/INT1 лог. "0", прерывание INT1 (по падающему фронту).

Цепи R1R2C2 и R4R5C3 необходимы для фильтрации помех на входах прерываний, диоды VD1,VD2 защищают вход контроллера от возможных выбросов напряжения вследствие наводок на шлейфе, ведущем к датчикам.
Транзистор VT1 типа IRLZ44 коммутирует нагрузку, которая подключается к разъему XS2. Выбор этого транзистора объясняется тем, что он управляется логическими уровнями на затворе.


Рисунок 1 – Схема сигнализации
Алгоритм работы контроллера

Рисунок 7 - Печатная плата сигнализации

Желательно оставить свободными квадратные контактные площадки, которые находятся справа от МК, туда можно запаять разъем (контактные штырьки), и таким образом плату можно будет использовать для изготовления еще нескольких интересных несложных устройств, например, цифровой термометр с ЖКИ и многое другое.
После включения питания проходит инициализация портов, настройка условий генерации прерываний INT0 (по возрастающему фронту), INT1 (по падающему фронту сигнала на соотв. входе МК).
В прикрепленных архивах – проект в AVRStudio и печатная плата, схема и библиотека в P-CADе.

прикрепленные файлы:  http://elektron.ucoz.ru/AVRStudio.rar
                                     
                                      http://elektron.ucoz.ru/PCAD.rar


Все вопросы – в форум:  http://elektron.ucoz.ru/forum/9

                                      http://elektron.ucoz.ru/forum/24-89-1

После инициализации программа переходит в основной цикл, в котором происходит опрос тумблера установки режима работы сигнализации. Если на порте PD6 будет высокий уровень (сигнализация включена тумблером), то происходит взятие объекта на сигнализацию. В течении 10 сек. будет мигать сигнальный светодиод, за это время нужно выйти из помещения и закрыть двери (все контакты датчиков должны быть замкнуты), иначе сработает сигнал тревоги. Если контакты датчиков замкнуты, происходит очистка регистра флагов прерываний (GIFR или EIFR, в зависимости от типа МК). Далее программа снова проводит опрос флага режима работы (который выставляется при включении тумблера и снимается при отключении или нажатии на кнопку сброса тревоги).

Рисунок 2 - Алгоритм основного цикла программы

В обработчике прерывания INT0 происходит обработка нарушения шлейфа (срабатывания датчиков). Сначала на протяжении 10 сек. мигает сигнальный светодиод, за это время нужно отключить тумблер. Если тумблер отключен, то снимаются флаги и происходит выход из обработчика, а далее переход в дежурный режим. Если тумблер остался включенным, на затвор транзистора VT1 подается лог. "1", он открывается, и через нагрузку течет ток, таким образом подается сигнал тревоги. Одновременно блокируется реагирование на состояние тумблера и шлейфа. Сигнализацию можно отключить только спрятанной кнопкой. После этого происходит выход из прерывания.

В обработчике прерывания INT0 происходит обработка нажатия на кнопку сброса тревоги. При этом очищаются флаги и отключается сигнал тревоги.

Рисунок 3 - Алгоритм обработчиков прерываний

Создаем проект в AVR Studio


Рисунок 4 - Начало создания проекта

Выбираем NewProject, далее указываем тип проекта (Atmel AVR Assembler) место сохранения и наименование


Рисунок 5 – Продолжение

Следующим шагом выбираем симулятор и контроллер


Рисунок 6 - Завершение создания проекта

Написание программы
Краткое описание инструкций ассемблера, использованных в программе
brne - Branch if Not Equal - Переход к метке если результатом предыдущего сравнения двох чисел есть "не равно"
cbi - Clear Bit in I/O Register - Очистка определенного бита в регистре ввода/вывода
cbr - Clear Bits in Register - Очистка определенных битов в регистре
cli - Clear Global Interrupt Flag - Глобальное запрещение прерываний
cpi - Compare with Immediate - Сравнение регистра с константой
dec - Decrement - Уменьшение на 1 регистра
ldi - Load Immediate - Загружает 8-битную константу в регистры с 16 по 31
out - Store Register to I/O Location - Сохраняет данные из регистра в память ввода/вывода (Порты, таймеры, конфигурационные регистры и т.д.)
pop - Pop Register from Stack - Загружает байт из стека в регистр
push - Push Register on Stack - Сохраняет содержимое регистра в стек
rcall - Relative Call to Subroutine - Относительный вызов подпрограммы
ret - Return from Subroutine - Выход из подпрограммы
reti - Return from Interrupt - Возврат из обработчика прерывания
rjmp - Relative Jump - Относительный переход по адресу
sbi - Set Bit in I/O Register - Устанавливает бит в регистре ввода/вывода
sbic - Skip if Bit in I/O Register is Cleared - Проверяет бит регистра ввода/вывода и если он равен 0 то пропускается выполнение следующей инструкции
sbis - Skip if Bit in I/O Register is Set - Проверяет бит регистра ввода/вывода и если он равен 1 то пропускается выполнение следующей инструкции
sbr - Set Bits in Register - Установка определенных битов в регистре ввода/вывода
sbrs - Skip if Bit in Register is Set - Проверяет бит регистра и если он равен 1 то пропускается выполнение следующей инструкции
sei - Set Global Interrupt Flag - Глобальное разрешение прерываний

Конфигурационные регистры -
MCUCR - MCU control register (регистр управления микроконтроллера), GIMSK - global interrupt mask register (общий регистр маскирования прерываний) , EIFR - external interrupt flag register (регистр флагов внешних прерываний), SPL - stack pointer (low) (нижний регистр указателя стека).

Включение файла описания
Code

.include

Определение переменных
Code

.def temp =r16 ;временный регистр
.def flags =r18 ;флаги программы

Описание битов регистров и портов
Code

;биты регистра флагов
.equ f_alarm =1 ;бит флаг тревоги, 1-тревога, 0-шлейф цел
.equ f_mode =2 ;бит флаг режима работы, 1-включено, 0-отключено
;биты порта D
.equ sensor =2 ;шлейф
.equ al_rst =3 ;сброс тревоги
.equ gate =4 ;затвор мосфета
.equ LED =5 ;сигнальный светодиод
.equ MODE =6 ;режим работы


Сама программа

Code

;Вектор прерываний
.ORG 0x00 ;Начало программы
reset:
rjmp start
.ORG INT0addr
rjmp irq0 ;Переход к обработчику срабатывания датчика
.ORG INT1addr
rjmp irq1 ;Переход к отключению сигнализации
.ORG 0x30
;Отсюда программа начинает работать после подачи питания
;
start:
; Инициализация указателя стека
ldi R16, RAMEND
OUT SPL, R16 ;у 2313 8-битный указатель стека

;Настройка порта PORTD
ldi temp, (1< out DDRD, temp

ldi temp, (1< out PORTD, temp

;Настраиваем порты А и В как выходы с лог. "0"
ldi temp, 0x00
out PORTA, temp
out PORTB, temp
ldi temp, 0xFF
out DDRA, temp
out DDRB,temp

;Очистка регистра флагов
ldi flags, 0x00

;Небольшая задержка в работе программы
rcall delay
;enable Interrupt on High Level on Int0 pin and on falling edge on Int1 pin
ldi temp, (1< out MCUCR, temp

;====================================
;Проверка режима работы устройства
;основной цикл программы
forever:
cli ;запрещаем глобальные прерывания
ldi temp, 0x00
out GIMSK, temp ;очищаем регистр управления прерываниями
ldi temp, 0xFF
out EIFR, temp ;очищаем регистр флагов прерываний

sbic PIND, MODE ;Если тумблер режима замкнут на землю, пропускаем
;следующую строчку кода
rjmp Dev_on ;Иначе переход на метку Dev_on
sbi PORTD, LED ;Светодиод отключен
cbr flags, (1< rcall delay ;небольшая задержка
ldi temp, 0xFF
out EIFR, temp ;очищаем регистр флагов прерываний
rjmp forever ;цикл ожидания в отключеном состоянии

Dev_on:
cbi PORTD, LED ;Включаем сигнальный светодиод
sbr flags, (1< rcall delay ;небольшая задержка

;10 сек. на то, чтобы уйти из помещения, светодиод мигает
ldi R17,0x12;
loc1:
sbi PORTD, LED
rcall ldelay
cbi PORTD, LED
rcall ldelay
dec R17
brne loc1
;если в течении 10 сек. шлейф остался нарушен, вкл. тревогу
sbis PIND, sensor
rjmp loc2 ;переход, если шлейф цел
;иначе
sbi PORTD, gate ;включаем сигнализацию
ldi temp, 0xFF
out EIFR, temp ;очищаем флаги прерываний
sbr flags, (1< ldi temp, (1< out GIMSK, temp
sei ;разрешаем глобальные прерывания
rjmp wait

loc2:
ldi temp, 0xFF ;
out EIFR, temp ;очищаем регистр флагов прерываний
ldi temp, (1< out GIMSK, temp
sei ;разрешаем глобальные прерывания

wait:
sbrs flags, f_mode ;Выход из цикла в случае снятия с сигнализации
rjmp forever ;и переход в режим ожидания в откл. состоянии

rcall delay

rjmp wait ;Цикл в дежурном режиме


;Обработчик прерывания INT0
irq0:
;в протяжении 10 сек. ждем и мигаем светодиодом
ldi R17,0x12
irq0_1:
sbi PORTD, LED
rcall ldelay;ldelay
cbi PORTD, LED
rcall ldelay;ldelay
dec R17
brne irq0_1
;проверка состояния тумблера
;если за 10 сек. шлейф цел и тумблер отключен, значит все ОК
;иначе ставим флаг тревоги и включаем сигнализацию
sbis PIND, MODE ;если шлейф цел, тумблер включен, тревога
rjmp OK ;все ОК иначе

notOK:
sbr flags, (1< sbi PORTD, gate ;включаем сигнализацию
;запрещаем прерывания от шлейфа и разрешаем прерывание от
;кнопки сброса сигнализации
ldi temp, (1< out GIMSK, temp
reti ;выход из прерывания в случае тревоги

OK:
;сброс флага режима
cbr flags, (1< ;сброс флага тревоги
cbr flags, (1< ;запрещение прерывания int0
ldi temp, 0x00
out GIMSK, temp
reti

;Обработчик прерывания INT1

irq1:
;сброс флага тревоги
cbr flags, (1< ;сброс флага режима
cbr flags, (1< ;выключение сигнализации
cbi PORTD, gate
;очистка GIMSK
ldi temp, 0x00
out GIMSK, temp
;очистка флагов
ldi temp, 0xFF
out EIFR, temp
ldi R17,0x12
irq1_1:
sbi PORTD, LED
rcall ldelay
cbi PORTD, LED
rcall ldelay
dec R17
brne irq1_1
reti


;**********************************
; Delays Library
;**********************************
delay:
ldi temp, 0xFF
ld1:
dec temp
cpi temp, 0x00
brne ld1
ret
;**********************************
ldelay:
ldi temp, 0xFF
ld2:
push temp
rcall delay
pop temp
dec temp
cpi temp, 0x00
brne ld2
ret
;**********************************
wdelay:
ldi temp, 0x0A
ld3:
push temp
rcall ldelay
pop temp
dec temp
cpi temp, 0x00
brne ld3
ret
;**********************************










                                     






 
Категория: МикроКонтроллеры | Добавил: ЛЕВША (26.02.2008) | Автор: Vasyl' Yefymchuk
Просмотров: 10038 | Рейтинг: 5.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Статистика

Наш опрос
КАКАЯ ОБЛАСТЬ ЭЛЕКТРОНИКИ ВАС ИНТЕРЕСУЕТ?
Всего ответов: 2531

Друзья сайта
  • Форумы Игростроя
  • CЛОВЕНСК
  • RemEXpert
  • ПАЯЛЬНИК
  • МЕДТЕХНИКА

  • Copyright MyCorp © 2024