Контроллер сирены автосигнализации «Анти-ПИК» вер. 2

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

v.2.0

Конструктивно устройство выполнено на двухсторонней плате. Для экономии места выводные компоненты размещены на одной стороне, а SMD-шки с другой. Вместо винтовых клеммников применены угловые штыревые разъемы. Это для меня, как для разработчика, связано с удобством демонтажа устройства из автомобиля для коррекции прошивки. Ведь симулятор и даже лабораторный стенд не учитывают реальные условия эксплуатации. Т.к. некоторые сирены потребляют довольно большой ток, для силовых линий, параллельно задействованы по 4 контакта.

Копия 3дВ

Резисторы и конденсаторы типоразмера 1206. Электролиты обычные, выводные. Стабилизатор напряжения в 8-ногом корпусе SOIC-8 только потому, что был такой. Микроконтроллер в узком SOIC-8, который с индексом SU.

Вместо реле теперь мощный N-канальный полевик IRLZ44. Обязательно в названии должна быть буква L – это значит, что он управляется уровнем лог. «1», т.е. при 5В он полностью открыт. Но если сирена не слишком мощная можно любой MOSFET. Применение N-канального полевика обусловлено его распространением и доступностью, но это изменило способ подключения сирены. Теперь «плюс» сирены должен быть постоянно подключен к «плюсу» бортовой сети автомобиля, а «минус» подключается к выходу OUT устройства.

Конденсатор С1 и стабилитрон D1 нужны для повышения надежности устройства. Дьявол, как говорится, кроется в мелочах – так один раз пожопившись можно потом об этом пожалеть. С этой же целью в схему добавлены R1, R6 и стабилизатор питания сделан на интегральной микросхеме, а не на стабилитроне. Диод D3 нужен для защиты от переполюсовки питания.

Схема

Несколько слов об управляющей программе:

Первым делом конфигурация микроконтроллера. Здесь используется файл attiny13.dat потому, что BASCOM отказывается признавать ATtiny13A. МК работает на частоте «по умолчанию» поэтому при программировании «фьюзов» нужно только убрать деление частоты на 8.

$regfile = «attiny13.dat»

$crystal = 4800000

$hwstack = 32

$swstack = 8

$framesize = 16

Конфигурируем ноги микроконтроллера за раз одной строкой – все на выход, кроме PB1. Здесь после DDRB = &B слева направо PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0. Присваиваем порту PB3 имя LED.

DDRB = &B11111101

Led Alias Portb.3

Далее объявляем переменные и разрешаем прерывания. В tiny13 только одно внешнее прерывание Int0, срабатывать оно будет по лог «1»:

Dim Peekcount As Byte

Dim Timercount As Byte

Enable Interrupts

Config Int0 = Rising : On Int0 Priem : Enable Int0

Основной текст программы начинается здесь. Предусмотрительно отключаем сирену и приветственно мигаем светодиодом:

Portb.0 = 0

Led = 1 : Waitms 200 : Led = 0

В основном цикле организуем задержку перед срабатыванием сирены, периодически проверяя кол-во сигналов, которые выдает сигнализация на сирену. После первого старта МК, быстренько проскакиваем до оператора Idle и засыпаем, экономя 1мА электроэнергии. Когда сигнализация «пикнет» сработает внешнее прерывание и увеличит значение переменной Peekcount тем самым считая количество «пиков». Микроконтроллер проснется и начнет выполнять цикл Do…Loop. В цикле проверяется количество «пиканий» и если их 1 или 2, то в зависимости от наличия сигнала на входе устройства переходим в подпрограмму подачи тревоги или сбрасываем счетчик «пиканий» и снова засыпаем.

Многие сигнализации перед срабатыванием тревоги выдают несколько предупредительных сигналов. Допустим, что сигнализация сработала и выдала 3 предупредительных «пика». Программа пропустит 2 сигнала, а 3-й будет негодяй услышит.

Do

   For Timercount = 1 To 100

     If Peekcount = 3 Then Goto Alarm

     Waitms 10

   Next

   If Pinb.1 = 1 Then Goto Alarm

   If Pinb.1 = 0 Then Peekcount = 0

Idle

Loop

End

Здесь стоит обратить внимание на способ выдержки времени, после которого, при наличии сигнала на входе, срабатывает тревога. Дело в том, что прерывания прерывают исполнение программы только между операторами и если, например, когда выполняется Waitms 100, сработало внешнее прерывание, программа сначала закончит ожидание 100мс, а потом перейдет на подпрограмму прерывания. Это неудобно когда нужно одновременно подсчитывать кол-во сигналов и одновременно выдержать заданное время. Поэтому в цикле For…Next происходит 1000 задержек по 1мс вместо одной 1-секундной.

В подпрограмме обработки внешнего прерывания мигаем светодиодом, подтверждая прием сигнала, обнуляем счетчик задержки срабатывания тревоги и увеличиваем счетчик количества «пиков». Задержка между переключением состояния светодиода 50мс и повторная проверка состояния порта PB1 обеспечивают антидребезговую защиту от ложных срабатываний.

Priem:

Led = 1 : Waitms 50 : Led = 0

Timercount = 0

If Pinb.1 = 1 Then Peekcount = Peekcount + 1

Return

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

Alarm:

Portb.0 = 1

Do

   If Pinb.1 = 0 Then Waitms 50 : If Pinb.1 = 0 Then Return

   Toggle Led : Waitms 100

Loop

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

Фьюзы

Копия DSCN5911

Копия DSCN5912

Скачать материалы к статье

Первая версия устройства

Посмотреть кино о том, как это работает

Есть еще одна плата под микроконтроллер ATtiny13A в «широком» корпусе SOIC-8 (209mil) и 3-х выводной стабилизатор напряжения L78L05 в корпусе SOT-89. Также для 3D использованы модели из стандартного набора DipTrace 3.0.

DSCN5356

Копия DSCN6408

Копия DSCN6407

Скачать второй вариант платы

По просьбам пользователей кратко опишу процесс подключения устройства в Вашем авто. Изначально, у всех, «минус» сирены подключен на «массу» автомобиля, а «плюс» к выходу сигнализации. Устройство подключается силовым ключом в разрыв «минусового» провода сирены. Т.е. «минус» сирены теперь идет в устройство, а в то место, где прикручивался «минус» сирены идет «минус» устройства. «Плюс» для питания устройства берется откуда угодно главное, чтобы он был всегда, даже когда машина на охране (что особенно важно). Сигнал с выхода сигнализации (который раньше шел на сирену) теперь подключается к входу устройства.

v.2.1

Незначительные отличия в печатной плате. Подправлена схема.

Скачать архив для версии 2.1