Сравнение импульсов.
|
|
xxxmonejall |
Дата: Сб, 29.08.2009, 15:22 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
У важаемые форумчани!!! Мне нужно постояно сравнивать импульсы не пропуская ни одного, и если первый импульс больше второго мне нужно что-то выполнить. Вот написал програму, думаю что она должна работать правильно залил в протеус и ничего не происходит. wFirst var byte ; переменая для первого импульса wNext var byte ;переменая для второго импульса trisb = %00000001 main: pulsin portb.0,1,wFirst ;щетаем первый импульс pulsin portb.0,1,wNext ; а теперь другой if wNext >= wFirst +1 then goto main2 ; если первый больше второго допустим на 1 ( Хотелось бы что бы это была не 1 а полтора раза но как так записать я не знаю) goto main main2: pulsout portb.1, 200 goto main
|
|
|
|
slavauk |
Дата: Сб, 29.08.2009, 20:25 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 14.03.2009
Статус:
Offline
|
Quote (xxxmonejall) Хотелось бы что бы это была не 1 а полтора раза но как так записать я не знаю wFirst+(wFirst*5)/10
Сообщение отредактировал
slavauk - Сб, 29.08.2009, 20:49
|
|
|
|
xxxmonejall |
Дата: Сб, 29.08.2009, 22:18 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Большое спасибо slavauk!!! С єтим все понятно, а как сделать так чтобі не пропустить ни одного импульса???
|
|
|
|
slavauk |
Дата: Сб, 29.08.2009, 23:44 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 14.03.2009
Статус:
Offline
|
Единственный верный способ применить прерывания по порту rb.0 для отслеживания импульсов и таймеров для подсчета длительности импульсов. Лучше использовать Протон,судя по описанию там можно использовать апаратные прерывания. По фронту на portb.0 запускай один таймер по фронту следующего импульса 1.останов первого таймера 2.запуск второго таймера 3.сохранение значения первого таймера 4.обнуление его по фронту следующего импульса 1.останов второго таймера 2.запуск первого таймера 3.сохранение значения второго таймера 4.обнуление его дальше тот же цикл теперь есть 2 переменные которые можно обработать в основной програме. Quote (xxxmonejall) Вот написал програму, думаю что она должна работать правильно залил в протеус и ничего не происходит. если импульсы одинаковые ничего и не будет, так как wNext никогда не будет >= wFirst +1 Удачи
Сообщение отредактировал
slavauk - Вс, 30.08.2009, 00:13
|
|
|
|
xxxmonejall |
Дата: Вс, 30.08.2009, 16:59 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
А вы не могли бы написать этот кусочек программы??? А то с таймерами я не работал, и не знаю как ими пользоваться. Или хотя-бы поделитесь где про них можно почитать. В Хилинском я там такого не нашел может просто не заметил! Добавлено (30.08.2009, 16.59.34) --------------------------------------------- Люди. Так как же таймером пользоваться?????
|
|
|
|
slavauk |
Дата: Вс, 30.08.2009, 18:22 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 14.03.2009
Статус:
Offline
|
Quote (xxxmonejall) А вы не могли бы написать этот кусочек программы??? Quote (xxxmonejall) Люди. Так как же таймером пользоваться????? trisb.0=1 ' time var byte 'время (период) который будем мерять time=0 ' option_reg.6=1 'прерывание по фронту portb.0 option_reg.5=0 'приращение таймера от внутреннего генератора option_reg.3=0 'предделитель включен перед таймером on interrupt goto t' INTCON=%10010000 ' разрешение прерывания ---------------------- ' loop: ' тут должна быть прога ' обработки измеренного time' goto loop ' ---------------------- ' disable ' t : ' time=tmr0 'переносим значение таймера ' в переменную tmr0=0 ' обнуляем таймер intcon.1=0 ' resume ' enable ' end ' тут следует учитывать ,что без предделителя таймер заполнится за 256 mks. Если частота вх.импульсов будет меньше 4 кГц можно соответственно настроить предделитель или например считать количество переполнений таймера. Путей решения множество и ограничено только воображеним програмиста Все вышеописанное относится к TMR0
Сообщение отредактировал
slavauk - Вс, 30.08.2009, 18:25
|
|
|
|
brown |
Дата: Вс, 30.08.2009, 19:53 | Сообщение # 7 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Quote (xxxmonejall) Люди. Так как же таймером пользоваться????? Почитайте техдокументацию на среднее семейство пиков или Даташит на 16Ф62х он на русском, может есть на русском на 16Ф84, но я не встречал. Эту инфу можно найти на сайте у terrarus :http://www.terrarus.ucoz.ru или microchip.ru
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
xxxmonejall |
Дата: Вс, 30.08.2009, 20:58 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Очень огромное спасибо!!!!!!!!!!!!!!!! Добавлено (30.08.2009, 20.58.53) --------------------------------------------- И снова не понятки. 1 когда запускается таймер??? 2 где второй таймер??? 3 и самое главное как это все работает???? Сильно не ругайте. Я ведь только учусь!
|
|
|
|
xxxmonejall |
Дата: Вс, 30.08.2009, 21:54 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Есть первые результаты прилагаю фото. Короче получилось! Отследил я итот импульс и после 30 импульса делаю что хочу. Ну правда это все на одной частоте. Так вот что я думаю сделать дальше измереть значения самого длиного импульса во всем диапазоне частоты, собрать это все в таблицу с диапазонами длины этого импульса. И по этой таблицы сравнивать длину импульсов! @ device pic16F84A, xt_osc, wdt_off, protect_off, pwrt_on INCLUDE "MODEDEFS.BAS" DEFINE OSC 4 trisb.0 = 1 ' time var byte 'время (период) который будем мерять czet var byte time=0 ' option_reg.6=0 'прерывание по фронту portb.0 option_reg.5=0 'приращение таймера от внутреннего генератора option_reg.3=0 'предделитель включен перед таймером on interrupt goto te INTCON=%10010000 ' разрешение прерывания loop: if time > 10 then czet = 0 if czet = 30 then pulsout portb.1, 200 goto loop disable te: time=tmr0 'переносим значение таймера ' в переменную czet = czet + 1 tmr0=0 ' обнуляем таймер intcon.1=0 resume enable end
Сообщение отредактировал
xxxmonejall - Вс, 30.08.2009, 22:51
|
|
|
|
slavauk |
Дата: Вс, 30.08.2009, 22:50 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 14.03.2009
Статус:
Offline
|
попробуйте pulsout portb.1 , time/100 генерируемый импульс должен быть меньше периода входного сигнала, для правильной работы прерывания и интересно какая загрузка ЦПУ при моделировании Quote (xxxmonejall) когда запускается таймер Quote (brown) Почитайте техдокументацию на среднее семейство пиков Quote (xxxmonejall) где второй таймер это не готовая прога,а только демонстрация работы TMR0Quote (xxxmonejall) самое главное как это все работает самое главное упорство и побольше читать Удачи Пока писал верхнее сообщение поменялось
Сообщение отредактировал
slavauk - Вс, 30.08.2009, 22:54
|
|
|
|
xxxmonejall |
Дата: Вс, 30.08.2009, 22:53 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Загрузка проца порядка 60% . У меня 2 ядра. Добавлено (30.08.2009, 22.53.43) --------------------------------------------- Так все таки когда то таймер запускается???
|
|
|
|
slavauk |
Дата: Вс, 30.08.2009, 23:02 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 14.03.2009
Статус:
Offline
|
TMR0 работает всегда,его нельзя остановить. запустить-остановить можно TMR1 (регистр T1CON bit 0) TMR2 (регистр T2CON bit 2)
|
|
|
|
xxxmonejall |
Дата: Вс, 30.08.2009, 23:07 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
А какая команда его запускает и останавлевает????
|
|
|
|
slavauk |
Дата: Вс, 30.08.2009, 23:42 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 14.03.2009
Статус:
Offline
|
TMR1 T1CON.0=1 - запуск T1CON.0=0 - стоп TMR2 T2CON.2=1 - запуск T2CON.2=0 - стоп Советую скачать и почитать техдокументацию на среднее семейство пиков с www.microchip.ru или www.terrarus.ucoz.ru Найдете ответы на 90% вопросов которые были тут заданы
|
|
|
|
xxxmonejall |
Дата: Вс, 30.08.2009, 23:44 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
ДА я там уже был. Что-то почитал. Но ниче толком про таймеры не нашел.
|
|
|
|