Сравнение импульсов.
|
|
slavauk |
Дата: Пн, 31.08.2009, 00:02 | Сообщение # 16 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 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
|
|
|
|
brown |
Дата: Пн, 31.08.2009, 00:30 | Сообщение # 17 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 14.03.2009
Статус:
Offline
|
Quote (brown) Есть одно но! Если будет использоваться 16Ф84, как указывал xxxmonejall, в теме, то у него нет TMR1, TMR2 , а только TMR0. Это понято. Мы тут пытаемся разобратся с принципом работы таймера и управления им в Picbasic-e. А 16f84 взят только для примера,как самый простой
|
|
|
|
xxxmonejall |
Дата: Сб, 05.09.2009, 16:23 | Сообщение # 19 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 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? Прерывания обсуждали ,но.......(disable, resume,enable )
|
|
|
|
xxxmonejall |
Дата: Вс, 06.09.2009, 19:50 | Сообщение # 21 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Так в то прикол что в се компилится. А вот tmr0 эт точно втык. Завтра переделаю! Добавлено (06.09.2009, 19.50.52) --------------------------------------------- Люди добрые ну покажите мне пример работы ТМР1 И ТМР2??? На кусочке программы.
|
|
|
|
slavauk |
Дата: Вт, 08.09.2009, 00:15 | Сообщение # 22 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 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-длительность впрыска Осталось "только" рассчитать рабочие карты(трехмерные графики),привязать их к датчикам и ..........будет вам счастье(впрыск)
Сообщение отредактировал
slavauk - Пн, 07.09.2009, 23:55
|
|
|
|
k2mozganet |
Дата: Пн, 07.03.2011, 11:42 | Сообщение # 23 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
23
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Доброго времени суток.... Есть вопросик.... а как узнать что таймер переполнился???
|
|
|
|
retas |
Дата: Ср, 09.03.2011, 10:19 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
.If TimerX = 0 then и есть переполнение при условии что подсчет импульсов в нём вы начнёте с началной установки TimerX = 0. .Т.е. , как только в таймере будет насчитанно 255 имп., следующий имп. его опустошит и его содержимое станет равен 0. .Любые сравнения следует стараться делать равным нулю - програ их делает наиболее быстро. .Если по каким либо причинам неподходит началная установка TimerX = 0, с некоторой неточностью можно указать TimerX = 1, (это на случай когда нежелательно чтоб ваша програ вашу началную установку посчитала за переполнение, хотя такое можно обойти, скажем, в тот момент запретив прерывания).
|
|
|
|
brown |
Дата: Ср, 09.03.2011, 12:53 | Сообщение # 25 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Quote (k2mozganet) а как узнать что таймер переполнился??? По установке флага переполнения таймера. Подробнее смотрите в даташите на МК в раделах про таймеры и регистрах с ними связанные.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|