Сравнение импульсов. - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Сравнение импульсов. (И использование таймеров.)
Сравнение импульсов.
xxxmonejall Дата: Сб, 29.08.2009, 15:22  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 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
ЯНДЕКС Дата: 29.08.2009
slavauk Дата: Сб, 29.08.2009, 20:25  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Большое спасибо slavauk!!!
С єтим все понятно, а как сделать так чтобі не пропустить ни одного импульса???
slavauk Дата: Сб, 29.08.2009, 23:44  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

А вы не могли бы написать этот кусочек программы??? А то с таймерами я не работал, и не знаю как ими пользоваться. Или хотя-бы поделитесь где про них можно почитать. В Хилинском я там такого не нашел может просто не заметил!

Добавлено (30.08.2009, 16.59.34)
---------------------------------------------
Люди. Так как же таймером пользоваться?????

slavauk Дата: Вс, 30.08.2009, 18:22  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 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 кГц можно соответственно настроить
предделитель или например считать количество переполнений таймера.
Путей решения множество и ограничено только воображеним програмиста smile
Все вышеописанное относится к TMR0

Сообщение отредактировал slavauk - Вс, 30.08.2009, 18:25
brown Дата: Вс, 30.08.2009, 19:53  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Очень огромное спасибо!!!!!!!!!!!!!!!!

Добавлено (30.08.2009, 20.58.53)
---------------------------------------------
И снова не понятки. 1 когда запускается таймер???
2 где второй таймер??? 3 и самое главное как это все работает????
Сильно не ругайте. Я ведь только учусь!

xxxmonejall Дата: Вс, 30.08.2009, 21:54  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 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

Прикрепления: 6213028.zip(26Kb) · 4443950.jpg(43Kb)

Сообщение отредактировал xxxmonejall - Вс, 30.08.2009, 22:51
slavauk Дата: Вс, 30.08.2009, 22:50  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 14.03.2009

Статус: Offline

попробуйте
pulsout portb.1 , time/100
генерируемый импульс должен быть меньше периода входного
сигнала, для правильной работы прерывания
и интересно какая загрузка ЦПУ при моделировании
Quote (xxxmonejall)
когда запускается таймер

Quote (brown)
Почитайте техдокументацию на среднее семейство пиков

Quote (xxxmonejall)
где второй таймер

это не готовая прога,а только демонстрация работы TMR0
Quote (xxxmonejall)
самое главное как это все работает

самое главное упорство и побольше читать wink
Удачи

Пока писал верхнее сообщение поменялось happy

Сообщение отредактировал slavauk - Вс, 30.08.2009, 22:54
xxxmonejall Дата: Вс, 30.08.2009, 22:53  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Загрузка проца порядка 60% . У меня 2 ядра.

Добавлено (30.08.2009, 22.53.43)
---------------------------------------------
Так все таки когда то таймер запускается???

slavauk Дата: Вс, 30.08.2009, 23:02  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 14.03.2009

Статус: Offline

TMR0 работает всегда,его нельзя остановить.
запустить-остановить можно TMR1 (регистр T1CON bit 0) TMR2 (регистр T2CON bit 2)
xxxmonejall Дата: Вс, 30.08.2009, 23:07  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

А какая команда его запускает и останавлевает????
slavauk Дата: Вс, 30.08.2009, 23:42  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

ДА я там уже был. Что-то почитал. Но ниче толком про таймеры не нашел.
Форум Picbasic.ru » Программирование МК » PicBasicPro » Сравнение импульсов. (И использование таймеров.)
Страница 1 из 212»
Поиск: