Вопрос по Ассемблеру PIC

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Сообщение Матроскин Андрей »

спасибо всем за ответы, разбираюсь потихоньку.
Настя писал(а):и правда - отвлеклись.
Если мое мнение интересно - работайте в этом направлении
http://gsm-c45.narod.ru/

АТ-команды поддерживаются GSM-модемами (готовые модули)
У вас, кстати, Настя помоему нереализована функция постановки снятия на/с охраны/у.
То есть если я зайду в помещение, то мне же и придет сигнал тревоги.
А я вот и пытаюсь это сделать в своей сигналке.
Реклама
Аватара пользователя
Настя
Мявтор!
Сообщения: 878
Зарегистрирован: Чт авг 07, 2008 09:12:38
Откуда: не скажу
Контактная информация:

Сообщение Настя »

"То есть если я зайду в помещение, то мне же и придет сигнал тревоги".

А ому он должен прийти - соседу?

Зашли в помещение. Сигнализация ещё не ругается,
но уже начала обратный отсчет 10 сек. За это время
вы и снимаете с охраны (блокируете).
натуральная блондинка
Реклама
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Сообщение Матроскин Андрей »

Не ну может я туплю сижу ,поздно уже, но в упор не вижу чем она ставится снимается с охраны, может звонком на сигналку......Помоему, не очень удобно..
Аватара пользователя
Настя
Мявтор!
Сообщения: 878
Зарегистрирован: Чт авг 07, 2008 09:12:38
Откуда: не скажу
Контактная информация:

Сообщение Настя »

Настя писал(а): схемотехника и решение задачи иначе видится:
1) одна или несколько линий в сторону МК - от датчиков
2) одна или несколько линий от МК - к сирене и/или мигалке
3) одна линия в сторону МК - блокировка сигнализации
4) одна линия в сторону МК - постановки на охрану

(пункты 3 и 4 могут быть одной линией)

алгоритм
по факту срабатывания "1" запускается таймер 10 сек
во время выполнения таймера мы можем сделать "3".
если "3" не сделано - отыгрывает "2".
во время отыгрывания "2" мы можем сделать "3".
если "3" всё-таки сделано - гасится "2"
и переходим к
отслеживанию "4" или повторному срабатыванию "3".
если событие "4" (или "3") произошло

запускается новый таймер 10 сек для того
чтобы успеть свалить из зоны контроля
натуральная блондинка
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Сообщение Матроскин Андрей »

Ладно, все понятно. Вопрос по теме, выражаясь "Настиным" языком :
1 одна линия в сторону МК от кнопки (снятие/постановка)
2 одна линия в сторону МК от датчика(охрана)
3 одна линия от МК в сторону пищалки.
4 Опрос датчика
5 Неопрос датчика.

Алгоритм:
Если есть 1 , кратковременно(0,5сек) сделать 3 и 4
Если есть 1, кратковременно сделать 3 и 5
Вопрос как сделать 3 совмесно с 4 и 5 , если 4 и 5 опрашиваюстя постоянно, а 3 надо сделать один раз?
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Как сделать?
Берешь лист бумаги рисуеш квадратики пишешь в них состояния между ними стрелочки рядом с которыми подписываешь события вызывающие эти переходы, и ... получаешь схему т.н. конечного автомата.
квадратиков должно быть от 2-х (на охране/снят с охраны) до ...
насколько фантазии хватит., потом по этим квадратикам составляет алгоритм (он уже должен быть подробным) и наконец по алгоритму пишется програмка.
Как видите все очень просто. :)))
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
Аватара пользователя
Настя
Мявтор!
Сообщения: 878
Зарегистрирован: Чт авг 07, 2008 09:12:38
Откуда: не скажу
Контактная информация:

Сообщение Настя »

Матроскин Андрей писал(а):Ладно, все понятно. Вопрос по теме, выражаясь "Настиным" языком :
1 одна линия в сторону МК от кнопки (снятие/постановка)
2 одна линия в сторону МК от датчика(охрана)
3 одна линия от МК в сторону пищалки.
4 Опрос датчика
5 Неопрос датчика.

Алгоритм:
Если есть 1 , кратковременно(0,5сек) сделать 3 и 4
Если есть 1, кратковременно сделать 3 и 5
Вопрос как сделать 3 совмесно с 4 и 5 , если 4 и 5 опрашиваюстя постоянно, а 3 надо сделать один раз?
В вашем алгоритме много неопределенностей,
а именно перевожу как вас бы понял МК:
- нажимая кнопку по вашему алгоритму, МК не знает -
охраняем мы или не_охраняем (а вы это явно не оговорили);
- ну хорошо, пикнули мы и переходим к опросу датчика;
- опрашиваем датчик и дальше что; что должно стать
результатом опроса... ступор

Плюс ко всему создается впечатление, что у вас кнопка
с фиксацией или тумблер.

Мне лично понятно, что вы хотите делать - а именно озвучивать
факт нажатия кнопки. Пищание должно быть связано именно
с фактом нажатия, а не с тем как дальше будет работать программа.

Как это видется

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

Reg_1 equ h'20'
Reg_2 equ h'21'
Reg_3 equ h'22'

#define кнопка PORTB,0 ; кнопка на RB0 (на вход + подтяжка)
#define бузер   PORTB,1 ; бузер на RB1 (на выход)

; бузер - buzzer - с англ зуммер (например, HCM1206)

            bсf бузер ; выкл пищалку (т.к. здесь состояние неизвестное)
            btfsс       кнопка ; если кнопка=1, выполн след инструкция
            goto        $-1      ; на 1 шаг назад, т.е. перепроверить
; далее обрабатываем факт нажатия, а именно пищим
            call         писк    ; переходим в подпрограмму пищания
; далее контролируем отжатие кнопки (если нужно)
            btfss       кнопка ; если кнопка=0, выполн след инструкция
            goto        $-1      ; на 1 шаг назад, т.е. перепроверить
; далее смотрим "состояние" (охраняем/не_охраняем)
; меняем его на противоположное 
; в зависимости от "состояния" выполняем те или иные действия


; === подпрограмма пищания
писк
           bsf бузер ; вкл пищалку
           call пауза ; уйти в подпрограмму паузы
           bсf бузер ; выкл пищалку
           return ; возврат из подпрограммы (по стеку)

; === подпрограмма паузы 0,5
; Задержка 500 000 машинных циклов
; Длительность задержки 500000 микросекунд
; Частота задающего генератора 4 МГц
пауза
            movlw       .85
            movwf       Reg_1
            movlw       .138
            movwf       Reg_2
            movlw       .3
            movwf       Reg_3
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            decfsz      Reg_3,F
            goto        $-5
            nop
            nop
            return ; возврат из подпрограммы (по стеку)
Последний раз редактировалось Настя Пт июл 10, 2009 09:30:07, всего редактировалось 1 раз.
натуральная блондинка
Аватара пользователя
Настя
Мявтор!
Сообщения: 878
Зарегистрирован: Чт авг 07, 2008 09:12:38
Откуда: не скажу
Контактная информация:

Сообщение Настя »

Матроскин Андрей - и на будущее. Учитесь логичнее делать связи.
Всё довольно просто. Отслеживаются внешние события,
анализируется факт и момент их появления и выполняются
управленческие воздействия средствами МК.

А теперь прочитайте анекдот на тему определенности.

Rimfa:
Мальчик упал с четырёх ступенек и сломал ногу.
Сколько ног сломает мальчик, если упадёт с сорока ступенек?

AzazeLHAck:
Ответ не может быть однозначным

Rimfa:
В смысле?

AzazeLHAck:
1) Мы не знаем, кому он сломал ногу.
2) Не факт, что за каждые 4 ступеньки он будет и далее ломать одну ногу (будь то себе, или кому-либо).
3) Если ноги всё же его, то после первых восьми ступенек ноги кончатся, и он начнёт ломать всё остальное и к концу сломаны будут даже уши.
4) Важен размер тех сорока ступенек. Если масштаб 1:10, то он по-прежнему сломает одну ногу.
5) Если учесть теорию вероятности, то сломаться могут ступеньки, а не ноги.
6) Гравитация и сила трения...
Сложная задача.

Rimfa:
ОДНУ ОН СЛОМАЕТ! ПЕРВАЯ УЖЕ СЛОМАНА НА ЧЕТЫРЁХ СТУПЕНЬКАХ!!!

Rimfa:
ТЫ СЛОЖНЫЙ, А НЕ ЗАДАЧА!!! КОМПЬЮТЕРА КУСОК!!!
натуральная блондинка
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Сообщение Матроскин Андрей »

Спасибо, спасибо это очень хорошо что вы уделяете мне свое внимание.
Я потихоньку разбираюсь и вторая версия программы уже получше и, помоему работоспособная :) сеичас отлажу -выложу.
А в первои версии я сделал так- кнопка постановки/снятия без фиксации. Поэтому, задеиствовал регистр-тригер, при нажатии на кнопку ( магнитный брелок к геркону подносим) тригер меняет состояние и вдальнейшем опрашиваю его на наличие "1" или"0".Вот тут я и запутался как еще зумер прикрутить сюда.
Но во второи версии проблема решена . При нажатии уходим в прерывания где меняем триггер-регистр и сигналим 0,5сек, выходим . Попадаем на цикл проверки триггера и далее....
Аватара пользователя
Настя
Мявтор!
Сообщения: 878
Зарегистрирован: Чт авг 07, 2008 09:12:38
Откуда: не скажу
Контактная информация:

Сообщение Настя »

Матроскин Андрей - не усложняйте.
К чему здесь прерывания. Я не удивлюсь, если через пару постов
еще и ШИМ предложат "прикрутить". Алгоритм прост до безобразия.
Ресурсов МК хватает с головой. Подумайте - 1 млн операций в сек
(на частоте тактирования 4 МГц).

И с терминологией. "Триггер-регистр" - лучше называть регистром
состояния. Это обычный регистр общего назначения, в котором
реально нужен один бит.

Да. И слово "прикрутить" звучит не профессионально.
Уверена, что поковорявшись вдоволь с этим проектом
вы отлюбите упортреблять это слово, при условии
если этот проект завершите.
натуральная блондинка
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Сообщение Матроскин Андрей »

Мне кажется в первой версии, хотя и применялся самый простои алгоритм, но код получился уж очень запутанным. ( написав его ночью, я утром не могу понять, как это работает:)) , а сеичас попроще. Но еще остался один "хвост", т.е - 10ти секундная задержка с опросом кнопки

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

Alarm       movlw       .221       ; Через 100мсек спраш. тригг
            movwf       SecL
            movlw       .130
            movwf       SecM
            decfsz      SecL,F
            goto        $-1
            decfsz      SecM,F
            goto        $-3
            nop
            btfss       Trig,0   ; Если Тригг 
            goto        Deg      ; "0" переход в дежурный режим
            movlw       .221     ; Через 100мсек спраш. тригг
и так 100 раз.....
Может есть какои вариант получше, доступный новичку?
Аватара пользователя
Настя
Мявтор!
Сообщения: 878
Зарегистрирован: Чт авг 07, 2008 09:12:38
Откуда: не скажу
Контактная информация:

Сообщение Настя »

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

; Задержка 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
натуральная блондинка
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Сообщение Матроскин Андрей »

Точно, как я сам не догадался...
Мое сообщение сегодня не в тему, но как результат моих вопросов и ваших ответов, выкладываю рабочую прогу и проэкт в протеусе 7.2. Помоему неплохо получилось, только при нажатии на Gerkon колонки булькают, все-таки надо подать переменное напряжение, но это легко сделать, если кто-то заинтересован, спрашивайте:).
Вложения
signpic.rar
(13.89 КБ) 163 скачивания
Аватара пользователя
Настя
Мявтор!
Сообщения: 878
Зарегистрирован: Чт авг 07, 2008 09:12:38
Откуда: не скажу
Контактная информация:

Сообщение Настя »

Исходник к проекту Протеуса подключила, запустила...
"Source code build FAILED with 2 error(s)"

Создала проект в MPLAB, откомпилила исходник,
подключила к проекту Протеуса...
"Source code build FAILED with 2 error(s)"

что-то где-то криво
вышлите ваш hex

ПС. Интересен не столько проект, сколько рождение конструкции :))
Вложения
.GIF
(7.41 КБ) 392 скачивания
натуральная блондинка
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Сообщение Матроскин Андрей »

У меня все хорошо компилируетсяИзображение
Вот измененный код к программе, теперь динамик пищит (1000Гц)
Но еще есть недочет в алгоритме программы, когда ставишь на охрану нет задержки 10сек, что-бы выити из помещения.
Извеняюсь исправил и этот баг, теперь уж все точно как-надо
Все таки не надо было опрашивать регистр состояния :) в течение 10сек, ведь он меняется по прерыванию, а это значит когда выдем из прерывания досчитываем до конца 10сек и смотрим на триггер. Вобщем вот исходник и хекс в файле signpic3.rar , проект протеуса тот-же.
Вложения
signpic3.rar
(1.75 КБ) 162 скачивания
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Re: Вопрос по Ассемблеру PIC

Сообщение Матроскин Андрей »

Здравствуйте еще раз, подскажите, где в этом коде хранится результат преобразования АЦП, ну не вижу и все! Должен же быть регистр Adres??
Вложения
f.rar
(3.18 КБ) 160 скачиваний
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопрос по Ассемблеру PIC

Сообщение Аlex »

А с чего Вы взяли что там задейсвован АЦП ? Это частотомер.
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Re: Вопрос по Ассемблеру PIC

Сообщение Матроскин Андрей »

Аlex писал(а):А с чего Вы взяли что там задейсвован АЦП ? Это частотомер.
Блин, а где почитать про измерение частоты на ассемблере для PIC.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопрос по Ассемблеру PIC

Сообщение Аlex »

Ну подумайте сами, логически... АЦП нужен для измерения напряжени. Если быть точнее - для Преобразования Аналоговова сигнала в Цифровой. А что-бы померять частоту, нужно мерить длительность между приходящими импульсами(период), либо число импульсов за еденицу времени(частоту).
Теперь подумайте, нужен ли АЦП в частотомере :)
... где почитать про измерение частоты на ассемблере для PIC
Нигде. Нужно понять как это делается, сесть и самому написать программу.
Аватара пользователя
Матроскин Андрей
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт янв 20, 2009 07:46:26
Откуда: Sakhalin

Re: Вопрос по Ассемблеру PIC

Сообщение Матроскин Андрей »

Господа, я в тупике. Программа была написана под PIC16f73, у меня есть pic16f873a, пики в используемой ппрограмме одинаковы, но симуляция зацикливается в одном месте , от чего на седьмом знакоместе индикатора горит постоянно "0", проверьте код , пожалуиста.
Вложения
f.rar
(3.19 КБ) 162 скачивания
Prob873.rar
(17.04 КБ) 149 скачиваний
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»