Сигнализация на ATtiny13a

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Вс апр 20, 2014 18:10:15
Откуда: Москва

Сообщение Kusok »

Доброго дня!

Делаю простенькую сигнализацию для квартиры на ATtiny13a, пишу на ассемблере, частота камня 4.8 МГц, + утсновлен предделитель частоты на 8.

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

А теперь суть просьбы: напишите, пожалуйста, кусок кода, чтобы реализовать счётчик открывания двери и работу пищалки постоянно.

Всё, что мне удалось написать - это включение пищалки по нажатию кнопки (открытию двери):
.include "tn13Adef.inc"

.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def zero=R20
.def status=R21

.cseg ;начало программного сегмента
.org 0 ;начальный адрес = 0

;******************
;Векторы прерываний
;******************

rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp PCINT0t ; PCINT0 Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TIM0_COMPA ; Timer0 CompareA Handler
rjmp TIM0_COMPB ; Timer0 CompareB Handler
rjmp WATCHDOG ; Watchdog Interrupt Handler
rjmp AnDC ; ADC Conversion Handler

;RESET
EXT_INT0:
PCINT0t:
TIM0_OVF:
EE_RDY:
ANA_COMP:
TIM0_COMPA:
;TIM0_COMPB:
WATCHDOG:
AnDC:

reti

;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset:
ldi Temp,low(RamEnd) ;установка указателя стека
out SPL,Temp

sbi DDRB,4

ldi Temp,(TIMSK0|0b00001000) ;разрешить прерывание компаратора
out TIMSK0,Temp

ldi Temp,(TCCR0B|0b00000010) ;тактовый сигнал = CK/8
out TCCR0B,Temp

ldi Temp,0x01 ;инициализация компаратора
out OCR0B,Temp

sbi PORTB,3 ;подтянуть PB3 к Vcc

ldi Temp,0
ldi Temp2,250
ldi Temp3,5
ldi zero,0
ldi status,0 ; 0 = тишина, 1 = писк
out TCNT0,zero ;обнуление таймер

;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
main:

sbis PINB,3
sei
sbic PINB,3
cli

rjmp main ;бесконечный цикл


;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************

TIM0_COMPB:
out TCNT0,zero ;обнуление таймера

cpi status,1
breq pisk
;;;;;;;;;;;;;;;;;;;; Тишина ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dec Temp2
brne exit
dec Temp3
brne exit

ldi Temp2,250
ldi Temp3,5
inc status
;;;;;;;;;;;;;;;;;;;;; Писк ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
pisk: sbis PINB,4
sbi PORTB,4
sbic PINB,4
cbi PORTB,4

dec Temp2
brne exit
dec Temp3
brne exit
ldi Temp2,250
ldi Temp3,5
dec status
reti

exit: reti ;выход из обработчика
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

В код не вникал, но режет глаз ошибка.

Код: Выделить всё

ldi Temp,(TIMSK0|0b00001000)	;разрешить прерывание компаратора
out TIMSK0,Temp
Ассемблер язык низкого уровня, бит3 Вы конечно включите таким образом, но включите или выключите другие биты. Чтобы включить бит3, сделайте вот так.

Код: Выделить всё

in Temp,TIMSK0	
ori Temp,0b00001000
out TIMSK0,Temp
З.Ы. Если кто то возжелает написать Вам код, то без схемы все равно не сможет.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Вс апр 20, 2014 18:10:15
Откуда: Москва

Сообщение Kusok »

Спасибо за ценные советы!

Код поправил, схему прилагаю.

Изображение
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

По схеме. Коллектор с эммитером местами поменяйте. А лучше + пищалки подключите к +V, минус пищалки к коллектору, эммитер на землю. Сопротивление базы наверняка нужно будет больше поставить (посчитать надо).
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

резистор не меньше 1-2k
Реклама
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Вс апр 20, 2014 18:10:15
Откуда: Москва

Сообщение Kusok »

Z_h_e, спасибо, стало значительно громче.

Mishany, спасибо, сделал 1К.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Свою задачу то осилили?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Kusok писал(а):Суть работы сигналки в следующем: при выходе из квартиры человек включает потайной переключатель, который подаёт питание на МК.
Пока дверь открыта (люди выходят), сигналка должна пищать, оповещая о своей работе.
Когда дверь закрылась (все вышли), пищалка выключается, сигалка ждёт открытия двери.
Когда дверь снова открывается (например, вошёл злоумышленник), пищалка включается и пищит без остановки (до выключения питания).
Какой-то странный у Вас алгоритм.
Kusok писал(а):Когда дверь снова открывается (например, вошёл злоумышленник)
А если не злоумышленник? Если дверь "снова открывается", потому что хозяева вернулись? Пищалка будет пищать? Смысл в такой "сигналке"? Помните сказку про мальчика, который кричал "Волки!"?
Сигналку нужно снабдить минимум двумя "входными" контактами - один - это "концевик" на двери, а второй, к примеру, спрятанный геркон.
Сигналка включается в охранный режим после воздействия на геркон магнитом, после чего начинает отслеживать состояние "концевика" входной двери. Следующее воздействие на геркон выводит сигналку из охранного режима.
Алгоритм работы следующий - вышли из квартиры, поднесли магнит к геркону, включили охрану (при этом будет нелишней индикация включенного режима охраны в виде мигающего светодиода). Вернулись - воздействовали на геркон магнитом, сняли охрану, вошли - сигналка уже не отслеживает "концевик" на двери, пищалка молчит.
Злоумышленник не знает про геркон, поэтому при несанкционированном открытии двери сигналка срабатывает.

P.S. Лучше использовать даже не геркон, а "полярный" датчик Холла, срабатывающий только на магнит определенной "полярности" - дополнительная мера безопасности в отличие от геркона, срабатывающего на любое магнитное поле.
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Вс апр 20, 2014 18:10:15
Откуда: Москва

Сообщение Kusok »

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

Z_h_e писал(а):Свою задачу то осилили?
Увы, нет, поэтому пока будет пищать только при открытой двери.
Собственно не могу сообразить, как организовать счётчик открытия/закрытия двери, чтобы он прибавлял (или лучше убавлял) значение при изменении состояния двери.
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Kusok писал(а):
Alkul писал(а):Какой-то странный у Вас алгоритм.
Возможно это от того, что я не упомянул, что сигналка включается и выключается потайным выключателем, о котором знает только хозяин.
А на приведенной Вами схеме этого нет. Если Вы просите помощи, то надо давать ВСЮ схему и ставить задачу (описывать алгоритм) ПОЛНОСТЬЮ.
Ну да ладно.
Kusok писал(а): Собственно не могу сообразить, как организовать счётчик открытия/закрытия двери, чтобы он прибавлял (или лучше убавлял) значение при изменении состояния двери.
Я не понял, что именно должен считать счетчик. В том алгоритме, который написал я, ничего считать не надо.
Вот рассмотрим Ваш алгоритм:
Kusok писал(а):Суть работы сигналки в следующем: при выходе из квартиры человек включает потайной переключатель, который подаёт питание на МК.
Пока дверь открыта (люди выходят), сигналка должна пищать, оповещая о своей работе.
Когда дверь закрылась (все вышли), пищалка выключается, сигалка ждёт открытия двери.
Когда дверь снова открывается (например, вошёл злоумышленник), пищалка включается и пищит без остановки (до выключения питания).
Где здесь счет чего-либо?
Или Вы снова чего-то не упомянули?
И еще мне непонятно:
Kusok писал(а):Пока дверь открыта (люди выходят), сигналка должна пищать, оповещая о своей работе.
...
Когда дверь снова открывается (например, вошёл злоумышленник), пищалка включается и пищит без остановки
Вообще смысл Вашей сигнализации в чем? Оповестить соседей о несанкционированном проникновении (хозяев-то в это время дома нет)?
Тогда зачем пищать во время выхода законных хозяев квартиры? Срабатывание пищалки должно быть только во время чужого проникновения, иначе соседи привыкнут к постоянному писку и вообще не будут реагировать на него. Даже когда дверь откроет злоумышленник.
Гораздо логичней
Kusok писал(а):потайным выключателем, о котором знает только хозяин.
не рвать питание МК, а подавать сигнал включения охраны. Прочтите еще раз описание моего алгоритма. Там пищалка при открытой двери включается только если сигналка находится в режиме охраны, пока сигналка на охрану не поставлена, можно сколько угодно раз открывать дверь, пищалка не включится.
И вообще, уж коль скоро Вы решили заниматься электроникой, то учитесь правильно рисовать схемы электрические принципиальные. Схема Вашей сигналки выглядит так:
Сигнализация.JPG
(88.24 КБ) 645 скачиваний
S1 - выключатель питания,
S2 - потайной выключатель, служащий для включения режима охраны. Вместо него лучше использовать датчик Холла.
S3 - контакт на двери
Контакт S3 не мешает цепям программирования МК. У выводов PB0 и PB3 должны быть программно активированы внутренние резисторы подтяжки (pull-up), таким образом, лог.1 - неактивный уровень, лог.0 - активный.
Резистор R2 подтягивает линию RESET к питанию. Конденсатор С1 - блокировочный, его необходимо разместить как можно ближе к выводам МК.

И в дальнейшем при выкладывании схем лучше давать их именно в таком виде. На схемах должно быть абсолютно все. А то, что нарисовали Вы, больше похоже на топологию печатной платы, притом неполную и слабочитаемую.
Вымогатель припоя
Аватара пользователя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Сообщение zhu4er »

Детская забава Ваша сигналка. Для бомжей ещё пугнёт, а для настоящего домушника фигня. Вот вор открыл, сигналка сработала, он взял и оторвал от стены коробочку или динамик, вот она и замолчала. Другое дело оповещение по СМС. Даже если вор обесточит квартиру(дом) то СМС всё равно улетит, если питание от аккума. А вообще воры тоже стали умнее, они глушилки включают. Так что всё это из разряда детская забава для "потренироваться в написании быдлокода"
Даже у стен есть уши...
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

zhu4er писал(а):"потренироваться в написании быдлокода"
Зачем же так грубо? Я думаю человек просто учится и хочет сделать что-то сам. Пускай делает и имеет право попросить помощи у котов.

Kusok, пищалкой не надо пищать программно. Используйте выход OCO. Настройте его на нужную частоту (он работает от таймера) и Вам всего лишь нужно будет включать или выключать таймер и все само будет пищать :).
На счет счетчика я не понял что Вам нужно. Считать то не проблема. Как Вы хотите передать эту информацию в мозг? Дисплей?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс май 20, 2012 16:21:11

Сообщение Lihouzov »

Я тоже согласен с тем, что творчество надо поощрять.

Попробовал собрать Ваш проект на блоках, вот что получилось:
Изображение

Единственный вопрос, зачем счетчик?
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс май 20, 2012 16:21:11

Сообщение Lihouzov »

Доработал:
Суть работы сигналки в следующем: при выходе из квартиры человек включает потайной переключатель, который подаёт питание на МК.
Пока дверь открыта (люди выходят), сигналка должна пищать, оповещая о своей работе.
Когда дверь закрылась (все вышли), пищалка выключается, сигалка ждёт открытия двери.
Когда дверь снова открывается (например, вошёл злоумышленник), пищалка включается и пищит без остановки (до выключения питания).
Изображение
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Вс апр 20, 2014 18:10:15
Откуда: Москва

Сообщение Kusok »

Alkul писал(а): Вообще смысл Вашей сигнализации в чем? Оповестить соседей о несанкционированном проникновении (хозяев-то в это время дома нет)?
Тогда зачем пищать во время выхода законных хозяев квартиры? Срабатывание пищалки должно быть только во время чужого проникновения, иначе соседи привыкнут к постоянному писку и вообще не будут реагировать на него. Даже когда дверь откроет злоумышленник.
Смысл - попытаться отпугнуть вора, имитируя наличие охранной системы в квартире. (Ну вдруг подумает, испугается и не полезет дальше).
Звукоизлучатель подобен тем, что ставят на материнках, и пищит он довольно негромко.
У меня тут посто квартира, а никак не военный склад, поэтому (пока) мне достаточно просто пищалки.
zhu4er писал(а): Так что всё это из разряда детская забава для "потренироваться в написании быдлокода"
Мой код далёк от идеала, но если это интересно и к тому же работает, по почему бы и нет.
Z_h_e писал(а): На счет счетчика я не понял что Вам нужно. Считать то не проблема. Как Вы хотите передать эту информацию в мозг? Дисплей?
Ну вот на примере:

включается питание
инициализация системы | счётчик = 3 если дверь в это время закрыта, 2 - если открыта
счётчик = 2 | дверь открыта (все выходят) - пищит
счётчик = 1 | дверь закрыта (дома никого нет) - не пищит
счётчик = 0 | дверь открылась - пищит без остановки
Сброс системы - только выключением питания (сейчас этого достаточно)

По моей задумке, контроллер сам всё посчитает, в мозг ничего передавать не нужно.
Lihouzov писал(а):
Спасибо за участие и новый взгляд на поставленную задачу!
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс май 20, 2012 16:21:11

Сообщение Lihouzov »

Доработал алгоритм:

1. ввел задержку включения сигнализации (5-10 минут), данная функция для удобства, чтобы не приходилось по новой взводить сигнализацию. На практике иногда приходится возвращаться домой (например проверил свет)
2. ввел задержку срабатывания сигнализации, время необходимое для снятия сигнализации (20-50 сек)

Получилась следующая программа:
Изображение

В программе выводы взяты произвольно.
Грызет канифоль
Аватара пользователя
Сообщения: 291
Зарегистрирован: Вт сен 02, 2008 04:03:21
Откуда: Тихорецк

Сообщение Valeriy L »

Lihouzov В какой программе это делалось.
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс май 20, 2012 16:21:11

Сообщение Lihouzov »

Программа: http://horizontautomatics.ru/Configurat ... ?id=setup1

После установки необходимо обновить.
Ответить

Вернуться в «AVR»