Меню сайта |
|
|
Категории раздела |
|
|
Мини-чат |
|
|
|
СИСТЕМА СИГНАЛИЗАЦИИ НА 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
|
Просмотров: 10040
| Рейтинг: 5.0/2 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
|
Поиск |
|
|
Статистика |
|
|
Наш опрос |
|
|
|