Как сделать автосигнализацию с бесконтактными ключами на PIC16C505 с использованием компилятора HI-TECH C 7.85 |
Программирование микроконтроллеров семейства PIC12CXXX вызывает известные трудности в связи с ограничеными ресурсами и неудобствами вызываемыми структурой памяти. Компиляторы с языков более высокого уровня могут представить некоторый выход из ситуации. Как оказалось компилятор HI-TECH C представляет собой очень даже неплохой выход.
Здесь приведен вариант автомобильной сигнализации: реализация небольшого мелкосерийного проекта. Главная цель: минимальная цена; вторая повышение эффективности противоугонных свойств введением дополнительных секретов.
Управление сигнализацией производиться с помощью одного транспондера и двух приемных антен. Транспондеры для управления выбраны ввиду их высокой надежности (по сравнению с технологией контактных идентификаторов TouchMemory) и неприхотливости в обслуживании (по сравнению с радио-брелками). Подробнее о примененной технологии см. проект "Как сделать простую систему бесконтактной идентификации".
Для отключения сигнализации и снятия блокировки необходимо последовательно поднести транспондер к обеим антеннам. Идентификация транспондера первой антенной отключает сигнал тревоги, идентификация второй антенной снимает блокировку. При отключенной тревоге, но не снятой блокировке, двигатель можно завести на короткое время, которое уменьшается с каждой новой попыткой запуска двигателя. Процесс напоминает деградацию системы зажигания и заканчивается включением сигнала тревоги и переходом в режим охраны. Такой режим расчитан на сценарий насильственного угона и дает водителю больший простор для действий. Секретом служит расположение приемных антенн и сценарий активизации блокировок, в рассчете на злоумышленников незнакомых с системой (некая вариация функции AntiHiJack). Введена также возможность обнаружения сканирования кодов транспондеров.
Принципиальная схема
*Номиналы некоторых элементов могут нуждаться в корректировке |
Особенности компилятора
Несмотря на желание использовать все возможности синтаксиса 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 содержащего строку:
где 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 от начала страницы определяется с учетом размещения в начале страницы служебной таблицы для адресов возврата из подпрограмм генерируемой компилятором..
Состав проекта
Проект состоит из следующих файлов:
- 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)
|
C этой схемой также часто просматривают: |
КАК ПОВЫСИТЬ СЕЛЕКТИВНОСТЬ ПРИЕМНИКА КАК УЛУЧШИТЬ КАЧЕСТВО ПРИЕМА Как собрать стробоскоп. В подробностях... Как подключить светодиод к 5В. Как запустить FC-PGA процессор на PPGA плате. Как сделать простую систему бесконтактной идентификации Приёмник POCSAG кода Контроллер графического ЖКИ высокого разрешения Низкочастотный синусоидальный генератор с шагом сетки 0,01 Гц
| |
Подключение энкодера к микроконтроллеру PIC Счётчик людей в помещении, управляющий освещением Велокомпьютер на микроконтроллере PIC16F628A Устройство ввода-вывода на микроконтроллера Два термометра на PIC16F628A и DS18B20 Светодиодные часы с циферблатом Двоичные часы Два вывода микроконтроллера PIC управляют шестью светодиодами Цифровой программируемый таймер на микроконтроллере PIC16F628A Устройство рисования в воздухе на ATtiny2313 |