Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 2«12
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Сравнение импульсов. (И использование таймеров.)
Сравнение импульсов.
slavauk Дата: Пн, 31.08.2009, 00:02  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 14.03.2009

Статус: Offline

Quote (xxxmonejall)
ДА я там уже был. Что-то почитал. Но ниче толком про таймеры не нашел.

http://terrarus.ucoz.ru/proton_....mr1.pdf
http://terrarus.ucoz.ru/proton_....mr0.pdf
http://terrarus.ucoz.ru/proton_....mr2.pdf
http://terrarus.ucoz.ru/proton_....iya.pdf
ЯНДЕКС Дата: 31.08.2009
brown Дата: Пн, 31.08.2009, 00:30  |                                                                                                                Сообщение # 17
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 337
Репутация: 11   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Есть одно но! Если будет использоваться 16Ф84, как указывал xxxmonejall, в теме http://www.picbasic.ru/forum/9-263-1  то у него нет TMR1, TMR2 , а только TMR0.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
slavauk Дата: Пн, 31.08.2009, 08:43  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 14.03.2009

Статус: Offline

Quote (brown)
Есть одно но! Если будет использоваться 16Ф84, как указывал xxxmonejall, в теме, то у него нет TMR1, TMR2 , а только TMR0.

Это понято.
Мы тут пытаемся разобратся с принципом работы таймера и
управления им в Picbasic-e.
А 16f84 взят только для примера,как самый простой
xxxmonejall Дата: Сб, 05.09.2009, 16:23  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Так я могу взть контролер по сложнее не в том дело. Мне просто этот больша нравится. За точ то у него выводовмало.

Добавлено (05.09.2009, 16.23.15)
---------------------------------------------
Что я сделал не так????
Читал вот это, по нему и делал???


Читал вот это, по нему и делал???

Code
@ device pic16F877A, 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 main
INTCON=%10010000 ' разрешение прерывания

First var byte
Second var byte
Sczet var byte
If Second > First then Sczet = 0
goto ingect

ingect:
If sczet = 30 then goto start

goto ingect

Start:
pulsout portb.2, 200
goto ingect

main:
If First = 1 then goto tmr_f
If Second = 1 then goto tmr_s

Tmr_f:
If Sczet >= 1 then Sczet = Sczet + 1
tmr1h = 1
t2con = 0
second = tmr0
tmr11:
Portb.1 = 1
Portb.1 = 0
goto tmr11

Tmr_s:
If Sczet >= 1 then Sczet = Sczet + 1
tmr1h = 0
t2conA = 1
First = tmr1h
tmr12:
Portb.1 = 1
Portb.1 = 0
goto tmr12
slavauk Дата: Сб, 05.09.2009, 21:14  |                                                                                                                Сообщение # 20
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 14.03.2009

Статус: Offline

А Вы компилить Это пробовали?
Quote (xxxmonejall)
t2conA = 1
?????
Тяжело понять мысли другого человека.
Пишите коментарии-сами увидите ощибки
Quote (xxxmonejall)
tmr11:
Portb.1 = 1
Portb.1 = 0
goto tmr11

??????????????
Quote (xxxmonejall)
tmr12:
Portb.1 = 1
Portb.1 = 0
goto tmr12

??????????????
Это что?Если попадаем в цикл-бесконечно генерим импульсы?
Quote (xxxmonejall)
tmr1h = 1
t2con = 0
second = tmr0

это как? Записываем tmr1,конфигурируем tmr2,а данные читаем tmr0? happy
Прерывания обсуждали angry ,но.......(disable, resume,enable )
xxxmonejall Дата: Вс, 06.09.2009, 19:50  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Так в то прикол что в се компилится. А вот tmr0 эт точно втык. Завтра переделаю!

Добавлено (06.09.2009, 19.50.52)
---------------------------------------------
Люди добрые ну покажите мне пример работы ТМР1 И ТМР2??? На кусочке программы.

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

Статус: Offline

Quote (xxxmonejall)
Есть первые результаты прилагаю фото.
Короче получилось! Отследил я итот импульс и после 30 импульса делаю что хочу.

Все очевидное не так просто.Попробуйте в программе с 9-го сообщения поставить
if czet = 20 then pulsout portb.1,300
или
if czet = 20 then pulsout portb.1,100
Прога явно работает не правильно.
Связано это в первую очередь с тем,что у вас даже короткий период =1 мс.
И tmr0 успевает 3 раза переполнится.Поэтому без предделителя не обойтись.
Немного пепеделанная программа.
Попробуйте разобратся.
Code
@ device pic16F84A, xt_osc, wdt_off, protect_off, pwrt_on
INCLUDE "MODEDEFS.BAS"
DEFINE OSC 4
trisb.0 = 1
time var byte
timp var word 'время вых импульса
pol var byte ' № вх. импульса после
' которого генерится вых. импульс
czet var byte
d var byte 'признак начала отсчета
pol=20
timp=300
time=0
d=0
option_reg=%10000100 'предделитель 1/32
on interrupt goto te
INTCON=%10010000

loop:

if time > 40 then
czet=0
d=1
endif

if (czet =pol and d=1) then
disable
pulsout portb.1,timp
tmr0=0
d=0
enable
endif
goto loop

disable
te:
time=tmr0
czet = czet + 1
tmr0=0
option_reg=%10000100
intcon.1=0
resume
enable

Добавлено (08.09.2009, 00.15.05)
---------------------------------------------
pol=20
timp=300
Эти переменные можно менять.
pol-опережение
timp-длительность впрыска
Осталось "только" рассчитать рабочие карты(трехмерные графики),привязать их
к датчикам и ..........будет вам счастье(впрыск) smile smile smile

Сообщение отредактировал slavauk - Пн, 07.09.2009, 23:55
k2mozganet Дата: Пн, 07.03.2011, 11:42  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 23
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Доброго времени суток.... Есть вопросик.... а как узнать что таймер переполнился???
retas Дата: Ср, 09.03.2011, 10:19  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 462
Репутация: 10   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

.If TimerX = 0 then и есть переполнение при условии что подсчет импульсов в нём вы начнёте с началной установки TimerX = 0.
.Т.е. , как только в таймере будет насчитанно 255 имп., следующий имп. его опустошит и его содержимое станет равен 0.
.Любые сравнения следует стараться делать равным нулю - програ их делает наиболее быстро.
.Если по каким либо причинам неподходит началная установка TimerX = 0, с некоторой неточностью можно указать TimerX = 1,
(это на случай когда нежелательно чтоб ваша програ вашу началную установку посчитала за переполнение, хотя такое
можно обойти, скажем, в тот момент запретив прерывания).


Новый подход к питанию потребителей переменного тока: http://ekolaif.ucoz.ru
brown Дата: Ср, 09.03.2011, 12:53  |                                                                                                                Сообщение # 25
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 337
Репутация: 11   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Quote (k2mozganet)
а как узнать что таймер переполнился???

По установке флага переполнения таймера. Подробнее смотрите в даташите на МК в раделах про таймеры и регистрах с ними связанные.


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Форум Picbasic.ru » Программирование МК » PicBasicPro » Сравнение импульсов. (И использование таймеров.)
Страница 2 из 2«12
Поиск: