Как сделать автосигнализацию с бесконтактными ключами на PIC



Категория: Микроконтроллеры


Программирование микроконтроллеров семейства PIC12CXXX вызывает известные трудности в связи с ограничеными ресурсами и неудобствами вызываемыми структурой памяти. Компиляторы с языков более высокого уровня могут представить некоторый выход из ситуации. Как оказалось компилятор HI-TECH C представляет собой очень даже неплохой выход.

Здесь приведен вариант автомобильной сигнализации: реализация небольшого мелкосерийного проекта. Главная цель: минимальная цена; вторая повышение эффективности противоугонных свойств введением дополнительных секретов.

Управление сигнализацией производиться с помощью одного транспондера и двух приемных антен. Транспондеры для управления выбраны ввиду их высокой надежности (по сравнению с технологией контактных идентификаторов TouchMemory) и неприхотливости в обслуживании (по сравнению с радио-брелками). Подробнее о примененной технологии см. проект "Как сделать простую систему бесконтактной идентификации".

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

Принципиальная схема

width=710>
Рисунок не помещается на странице и поэтому сжат!
Для того, чтобы просмотреть его полностью, щелкните здесь.


*Номиналы некоторых элементов могут нуждаться в корректировке

Особенности компилятора

Несмотря на желание использовать все возможности синтаксиса C, следует все время держать в памяти схемы трансляции C конструкций в asm код и представлять во что это может превратиться. Например, при использовании максимальной оптимизации предоставляемой компилятором конструкция
Flag1=!Flag1
может занять около 11-ти операторов в зависимости от физического расположения бита Flag1, а эквивалентная конструкция
if (Flag1) Flag1=0; else Flag1=1;
займет всего 5-ть операторов .

Оптимизатору HI-TECH компилятора довольно часто приходиться помогать, когда речь заходит о предельной компактности кода. Например, в блоке цепочки присвоений переменным значений может оказаться, что переменные находяться в различных банках памяти. Компилятор в таком случае начинает дополнительно вставлять команды переключения банков bcf 4,x и bsf 4,x . При этом от того, в какой последовательности инициализируются переменные зависит число дополнительных команд. Для минимизации числа команд я использую такую последовательность: переменные из банка 0, 1, 3, 2.

Проблемы компиляции

Компиляция оказалась проблемой нетривиальной, что и можно было ожидать учитывая присутствие ассемблерного модуля и непростых ограничениях при использовании страниц программной памяти. Увидев в документации обнадеживающую фразу о том, что использовать команды линкера программисту никогда не понадобиться я попытался не вникая в подробности в лоб скомпилировать С и asm модули. Естественно, произошла ошибка размещения моего ассемблерного модуля. Беда в том, что в модуле используются переходы с использованием модификации регистра PCL, а такой код может распологаться только в областях с маской x0xxxxxxxx . Попытки манипулирования опциями в описании областей psect в ассемблерном файле ни к чему не привели, а только обнаружили отказ компилятора в обработке опций LIMIT и WITH. Стало очевидно, что на такую интеграцию ассемблера и C разработчики, явно, не раcсчитывали. Пришлось скачать всю документацию, какая была на сайте HI_TECH и методом ненаучного тыка пробовать создавать командный файл для линкера. Попыток с 50-и линкер перестал выдавать сообщение об ошибках.

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

Компиляция

Компиляция производится запуском командного файла Koyot.bat содержащего строку:

picc < koyot.cmd

где koyot.cmd - файл содержащий управляющие опции компилятора:

-G -O -16C505 -Zg9 -INTEL -D24
-EKOYOT.ERR -PSECTMAP -ASMLIST
-IC:_MYKOYOT
-MKOYOT.MAP
-L-Preceipt=210h
KOYOT.C Task_Gen.c Task_LED.c Task_Sir.c Task_Opn.c Task_Cls.c
CRECEIPT.as

Для ассемблерной секции receipt явно указан адрес размещения 210h в связи с тем, что программный модуль настроен на исполнение во второй странице программной памяти. Смещение в 10h от начала страницы определяется с учетом размещения в начале страницы служебной таблицы для адресов возврата из подпрограмм генерируемой компилятором..

Состав проекта Исходные тексты (zip 11 Kb)

Проект состоит из следующих файлов:

koyot.c - модуль инициализации и основной процесс Task_Cls.c - модуль задачи обслуживания сигнала "Закрыть" Task_Gen.c - модуль задачи обслуживания режимов сигнализации Task_led.c - модуль задачи сигнала светодиода Task_Opn.c - модуль задачи обслуживания сигнала "Открыть" Task_Sir.c - модуль задачи обслуживания сигнала сирены koyot.h - заголовочный файл модуля основного процесса main.h - главный заголовочный файл creceipt.as - модуль процесса приема сигналов транспондеров
Готовые изделия

В настоящее время фирма SKARTAS (тел. +370-2-436054 Вильнюс, Станислав Картонович ) может предложить серию недорогих автомобильных охранных устройств пригодных для любых автомобилей. Описания устройств приведены ниже.


Простейшее противоугонное средство.
Описание (pdf 128 KB)


Простой иммобилайзер на транспондерах.
Описание (pdf 307 KB)


Противоугонная сигнализация на транспондерах.
Описание (pdf 416 KB)

Авторы:
Александр Елисеев (software),
Станислав Картонович (hardware).



[






Рекомендуемый контент




Copyright © 2010-2017 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.