У вас, кстати, Настя помоему нереализована функция постановки снятия на/с охраны/у.
То есть если я зайду в помещение, то мне же и придет сигнал тревоги.
А я вот и пытаюсь это сделать в своей сигналке.
Настя писал(а):
схемотехника и решение задачи иначе видится:
1) одна или несколько линий в сторону МК - от датчиков
2) одна или несколько линий от МК - к сирене и/или мигалке 3) одна линия в сторону МК - блокировка сигнализации
4) одна линия в сторону МК - постановки на охрану (пункты 3 и 4 могут быть одной линией)
алгоритм
по факту срабатывания "1" запускается таймер 10 сек
во время выполнения таймера мы можем сделать "3". если "3" не сделано - отыгрывает "2".
во время отыгрывания "2" мы можем сделать "3".
если "3" всё-таки сделано - гасится "2" и переходим к
отслеживанию "4" или повторному срабатыванию "3".
если событие "4" (или "3") произошло
запускается новый таймер 10 сек для того
чтобы успеть свалить из зоны контроля
Ладно, все понятно. Вопрос по теме, выражаясь "Настиным" языком :
1 одна линия в сторону МК от кнопки (снятие/постановка)
2 одна линия в сторону МК от датчика(охрана)
3 одна линия от МК в сторону пищалки.
4 Опрос датчика
5 Неопрос датчика.
Алгоритм:
Если есть 1 , кратковременно(0,5сек) сделать 3 и 4
Если есть 1, кратковременно сделать 3 и 5
Вопрос как сделать 3 совмесно с 4 и 5 , если 4 и 5 опрашиваюстя постоянно, а 3 надо сделать один раз?
Как сделать?
Берешь лист бумаги рисуеш квадратики пишешь в них состояния между ними стрелочки рядом с которыми подписываешь события вызывающие эти переходы, и ... получаешь схему т.н. конечного автомата.
квадратиков должно быть от 2-х (на охране/снят с охраны) до ...
насколько фантазии хватит., потом по этим квадратикам составляет алгоритм (он уже должен быть подробным) и наконец по алгоритму пишется програмка.
Как видите все очень просто.
Матроскин Андрей писал(а):Ладно, все понятно. Вопрос по теме, выражаясь "Настиным" языком :
1 одна линия в сторону МК от кнопки (снятие/постановка)
2 одна линия в сторону МК от датчика(охрана)
3 одна линия от МК в сторону пищалки.
4 Опрос датчика
5 Неопрос датчика.
Алгоритм:
Если есть 1 , кратковременно(0,5сек) сделать 3 и 4
Если есть 1, кратковременно сделать 3 и 5
Вопрос как сделать 3 совмесно с 4 и 5 , если 4 и 5 опрашиваюстя постоянно, а 3 надо сделать один раз?
В вашем алгоритме много неопределенностей,
а именно перевожу как вас бы понял МК:
- нажимая кнопку по вашему алгоритму, МК не знает -
охраняем мы или не_охраняем (а вы это явно не оговорили);
- ну хорошо, пикнули мы и переходим к опросу датчика;
- опрашиваем датчик и дальше что; что должно стать
результатом опроса... ступор
Плюс ко всему создается впечатление, что у вас кнопка
с фиксацией или тумблер.
Мне лично понятно, что вы хотите делать - а именно озвучивать
факт нажатия кнопки. Пищание должно быть связано именно
с фактом нажатия, а не с тем как дальше будет работать программа.
Матроскин Андрей - и на будущее. Учитесь логичнее делать связи.
Всё довольно просто. Отслеживаются внешние события,
анализируется факт и момент их появления и выполняются
управленческие воздействия средствами МК.
А теперь прочитайте анекдот на тему определенности.
Rimfa:
Мальчик упал с четырёх ступенек и сломал ногу.
Сколько ног сломает мальчик, если упадёт с сорока ступенек?
AzazeLHAck:
Ответ не может быть однозначным
Rimfa:
В смысле?
AzazeLHAck:
1) Мы не знаем, кому он сломал ногу.
2) Не факт, что за каждые 4 ступеньки он будет и далее ломать одну ногу (будь то себе, или кому-либо).
3) Если ноги всё же его, то после первых восьми ступенек ноги кончатся, и он начнёт ломать всё остальное и к концу сломаны будут даже уши.
4) Важен размер тех сорока ступенек. Если масштаб 1:10, то он по-прежнему сломает одну ногу.
5) Если учесть теорию вероятности, то сломаться могут ступеньки, а не ноги.
6) Гравитация и сила трения...
Сложная задача.
Rimfa:
ОДНУ ОН СЛОМАЕТ! ПЕРВАЯ УЖЕ СЛОМАНА НА ЧЕТЫРЁХ СТУПЕНЬКАХ!!!
Rimfa:
ТЫ СЛОЖНЫЙ, А НЕ ЗАДАЧА!!! КОМПЬЮТЕРА КУСОК!!!
Спасибо, спасибо это очень хорошо что вы уделяете мне свое внимание.
Я потихоньку разбираюсь и вторая версия программы уже получше и, помоему работоспособная сеичас отлажу -выложу.
А в первои версии я сделал так- кнопка постановки/снятия без фиксации. Поэтому, задеиствовал регистр-тригер, при нажатии на кнопку ( магнитный брелок к геркону подносим) тригер меняет состояние и вдальнейшем опрашиваю его на наличие "1" или"0".Вот тут я и запутался как еще зумер прикрутить сюда.
Но во второи версии проблема решена . При нажатии уходим в прерывания где меняем триггер-регистр и сигналим 0,5сек, выходим . Попадаем на цикл проверки триггера и далее....
Матроскин Андрей - не усложняйте.
К чему здесь прерывания. Я не удивлюсь, если через пару постов
еще и ШИМ предложат "прикрутить". Алгоритм прост до безобразия.
Ресурсов МК хватает с головой. Подумайте - 1 млн операций в сек
(на частоте тактирования 4 МГц).
И с терминологией. "Триггер-регистр" - лучше называть регистром
состояния. Это обычный регистр общего назначения, в котором
реально нужен один бит.
Да. И слово "прикрутить" звучит не профессионально.
Уверена, что поковорявшись вдоволь с этим проектом
вы отлюбите упортреблять это слово, при условии
если этот проект завершите.
Мне кажется в первой версии, хотя и применялся самый простои алгоритм, но код получился уж очень запутанным. ( написав его ночью, я утром не могу понять, как это работает:)) , а сеичас попроще. Но еще остался один "хвост", т.е - 10ти секундная задержка с опросом кнопки
; Задержка 10 000 000 машинных циклов
; Длительность задержки 10 секунд
; Частота задающего генератора 4 МГц
movlw .223
movwf Reg_1
movlw .187
movwf Reg_2
movlw .51
movwf Reg_3
; именно здесь опрос кнопки, т.е. в цикле задержки
btfss Trig,0 ; Если Тригг
goto Deg ; "0" переход в дежурный режим
decfsz Reg_1,F
goto $-3
decfsz Reg_2,F
goto $-5
decfsz Reg_3,F
goto $-7
nop
nop
Задержка сгенерирована утилиткой PIC_Delay - 1.7.
Вставка двух строчек опроса кнопки увеличит длительность
Если это критично - можно изменить значения, помещаемые
в Reg_3, Reg_2 и т.д. и измерить Стоп-вотчем (Stopwatch)
при прогоне симулятором MPLAB SIM
Точно, как я сам не догадался...
Мое сообщение сегодня не в тему, но как результат моих вопросов и ваших ответов, выкладываю рабочую прогу и проэкт в протеусе 7.2. Помоему неплохо получилось, только при нажатии на Gerkon колонки булькают, все-таки надо подать переменное напряжение, но это легко сделать, если кто-то заинтересован, спрашивайте:).
У меня все хорошо компилируется
Вот измененный код к программе, теперь динамик пищит (1000Гц)
Но еще есть недочет в алгоритме программы, когда ставишь на охрану нет задержки 10сек, что-бы выити из помещения.
Извеняюсь исправил и этот баг, теперь уж все точно как-надо
Все таки не надо было опрашивать регистр состояния в течение 10сек, ведь он меняется по прерыванию, а это значит когда выдем из прерывания досчитываем до конца 10сек и смотрим на триггер. Вобщем вот исходник и хекс в файле signpic3.rar , проект протеуса тот-же.
Ну подумайте сами, логически... АЦП нужен для измерения напряжени. Если быть точнее - для Преобразования Аналоговова сигнала в Цифровой. А что-бы померять частоту, нужно мерить длительность между приходящими импульсами(период), либо число импульсов за еденицу времени(частоту).
Теперь подумайте, нужен ли АЦП в частотомере
... где почитать про измерение частоты на ассемблере для PIC
Нигде. Нужно понять как это делается, сесть и самому написать программу.
Господа, я в тупике. Программа была написана под PIC16f73, у меня есть pic16f873a, пики в используемой ппрограмме одинаковы, но симуляция зацикливается в одном месте , от чего на седьмом знакоместе индикатора горит постоянно "0", проверьте код , пожалуиста.