Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » измерение длительности импульса (измерение длительности импульса при помощи pulsin...)
измерение длительности импульса
vova5812 Дата: Чт, 12.08.2010, 10:36  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 32
Репутация: 0   ±
Замечания:   ±
На сайте с 18.01.2010

Статус: Offline

Как измерить длительность импульса командой pulsin, если он по длительности больше 655350 микросекунд?
С уважением, Владимир.
ЯНДЕКС Дата: 12.08.2010
retas Дата: Пт, 13.08.2010, 00:39  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Как вариант - уменьшить частоту осцилятора МК.
ADMIN Дата: Пт, 13.08.2010, 07:31  |                                                                                                                Сообщение # 3
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote
Как вариант - уменьшить частоту осцилятора МК

А как это поможет?
Вопрос такой: какова частота МК? Какой МК?
Какова максимальная длительность импульса?

Вариант - по фронту импульса запускать TMR1 и при его переполнении по прерыванию инкрементировать переменную-счетчик и считать дальше. Естественно, подпрограмму обработки прерывания желательно минимализировать, высчитать, за сколько циклов она отработает и внести поправку в TMR1. И так далее.

Dmitry Дата: Пт, 13.08.2010, 21:08  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Quote (ADMIN)
Естественно, подпрограмму обработки прерывания желательно минимализировать, высчитать, за сколько циклов она отработает и внести поправку в TMR1. И так далее.

Не надо минимизировать, просто TMR1 не останавливать, пусть дальше считает, пока идет обработка прерывания
vova5812 Дата: Пт, 13.08.2010, 21:31  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 32
Репутация: 0   ±
Замечания:   ±
На сайте с 18.01.2010

Статус: Offline

MK PIC16F84A, F=4mHz, длительность импульса 750 милисекунд.
Сообщение отредактировал vova5812 - Пт, 13.08.2010, 21:39
retas Дата: Пт, 13.08.2010, 22:54  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Ну вот, при F=4mHz минимальный вес единицы измерения будет равно 10 мкс а, скажем, при 40кГц
она будет в 100 раз больше, т.е. 1000мкс.
Обратите внимание - автор хочет применять pulsin, хотя в его случае это наверное не разумно.
ADMIN Дата: Сб, 14.08.2010, 06:57  |                                                                                                                Сообщение # 7
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote
Ну вот, при F=4mHz минимальный вес единицы измерения будет равно 10 мкс а, скажем, при 40кГц
она будет в 100 раз больше, т.е. 1000мкс.

А какова же будет точность измерения при таком подходе?

Quote
Не надо минимизировать, просто TMR1 не останавливать, пусть дальше считает, пока идет обработка прерывания

Ну да, правильно, он же не останавливается на время прерывания.
vova5812 Дата: Пн, 16.08.2010, 11:48  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 32
Репутация: 0   ±
Замечания:   ±
На сайте с 18.01.2010

Статус: Offline

Спасибо всем, кто подключился к этой теме!
Нарезка в 10 мксек меня вполне устраивает по точности измерения.
Я ,как начинающий, с прерываниями еще не писал код ни разу.
Если возможно, покажите фрагмент программы на PicBasic для обработки длительности импульса
с использованием прерываний.
terrarus Дата: Пн, 16.08.2010, 12:12  |                                                                                                                Сообщение # 9
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Команда PulsIn может максимально считать до 65535 и не более, поэтому максимальная измеряемая длительность примерно равна 750мсек. при частоте тактового генератора 4 мгц. Естественно разрешение составит 10 мксек. http://www.terrarus.ucoz.ru/proton_....in.html

PS. Можно аппаратно увеличить измеряемый интервал в два раза , если с датчика будет приходить не один импульс, а два. Затем обсчитывать и потом приводить к одному.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Пн, 16.08.2010, 12:16
vova5812 Дата: Пт, 27.08.2010, 15:55  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 32
Репутация: 0   ±
Замечания:   ±
На сайте с 18.01.2010

Статус: Offline

Все дело в том, что с датчика Холла(автомобильное зажигание), приходит импульс очень большой
длительности (в момент раскрутки двс стартером),а мне надо измерить длительность и 1 и 0, чтобы
затем вычислить скважность.
Все дело в том, что по трамблерам для ВАЗов, в частности, идет большой разброс по скважности
выходного импульса.
Чтобы программа, управляющая углом зажигания, не зависела от разброса по скважности,
пусть микроконтроллер сам измеряет скважность на старте двс, таким образом настраиваясь
на данный экземпляр трамблер-ДХ, внося коррективы программно в длительность уже
своего управляющего импульса на своем выходе плюс естественно собственная расчетная
длительность по углам в зависимости от заложеной математики расчета углов по оборотам двс.
Программа уже обкатывается на Вазовском двигателе(НИВА), на сегодняшний день корректировать
приходится пока вручную, измеряя длительности 1 и 0 на выходе ДХ(датчик Холла) осциллографом,
для того чтобы установить устройство на другой ДВС. Делать это приходится один раз,
для данного экземпляра ДХ, но этот процесс можно автоматизироать, тогда устройство
будет самонастраиваться и не зависеть от этого досадного обстоятельства.

Добавлено (27.08.2010, 15.55.23)
---------------------------------------------
Спасибо огромное всем, кто откликнулся!
Решение нашел сам, как всегда все рядом...
Проект не коммерческий...

terrarus Дата: Пт, 27.08.2010, 16:15  |                                                                                                                Сообщение # 11
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Ну если проект не коммерческий, поделитесь найденным решением. Интересно все же....

Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
ЯНДЕКС Дата: 27.08.2010
vova5812 Дата: Ср, 01.09.2010, 22:47  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 32
Репутация: 0   ±
Замечания:   ±
На сайте с 18.01.2010

Статус: Offline

Просто измерения провожу на более высоких оборотах ДВС, после того, как он завелся.

Вот вопрос, на который в имеющейся литературе, я ответ найти не могу пока...
Задавать вопросы-тоже способ познания предмета!
Пример из моей практики начинающего ниже.
Как при помощи PicBasicPro более-менее точно разделить 3500/1500.
На калькуляторе ответ 2,33333...
У меня в PicBasicPro получается ответ 3500/1500=2(целое)
Если продолжить деление 3500//1500=500(остаток)
Что с этими результатами деления дальше делать, неужели имитировать деление столбиком,
умножая остаток на 10 и т.д.?

ivan_fd Дата: Ср, 01.09.2010, 23:49  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ну можно уйти с PicBasicPro, и перейти на Proton.
А можно использовать библиотеку в PicBasicPro для работы с дробными числами.

Ссылка была на сайте, но что то не могу найти.
Доступно только для пользователей

Сообщение отредактировал ivan_fd - Ср, 01.09.2010, 23:49
terrarus Дата: Чт, 02.09.2010, 08:58  |                                                                                                                Сообщение # 14
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Quote (vova5812)
Как при помощи PicBasicPro более-менее точно разделить 3500/1500.
На калькуляторе ответ 2,33333...

Quote (ivan_fd)
Ну можно уйти с PicBasicPro, и перейти на Proton

Dim VR1 as Float
Dim VR2 as Word
VR1 = 3500
VR2 = 1500
VR1 = VR1 / VR2 ' Результат будет равен 2.333


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Dmitry Дата: Пт, 03.09.2010, 02:40  |                                                                                                                Сообщение # 15
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Разбаловались тут с Протоном, а в PBP тоже можно точно поделить:

Code

a VAR WORD   
b VAR WORD   
tmp VAR WORD   
res VAR WORD

a = 3500   
b = 1500   

DISABLE                ' Нужно ставить, если в программе есть On Interrupt   
tmp = a * 1000      '  в tmp записывается младшие 16 бит результата, а во внутренней переменной компилятора -   
                             ' полный 32-битный результат (точнее 31-битный, число не более 2 147 483 648)
                             ' tmp больше нигде не используется, это просто переменная-заглушка
res = DIV32 1500   ' Внутренняя 32-битная переменная делится на 1500, получаем res=2333
                    ' Не допускается никаких других команд между предыдущим умножением и командой DIV32,
                    ' иначе потеряется результат умножения во внутренней переменной компилятора
ENABLE                 ' Нужно ставить, если в программе есть On Interrupt   

Дальше работаем с переменной res, зная, что число в ней на 3 порядка больше.
По другому с дробными числами в PBP нельзя, только увеличивать на 2-3 порядка
и учитывать это в дальнейших расчетах. Зато экономия памяти по сравнению с Протоновским
float сумасшедшая. Применяю сей метод и в протоне на мелких процах с 2-4 Кб памяти.

Сообщение отредактировал Dmitry - Пт, 03.09.2010, 02:44
Форум Picbasic.ru » Программирование МК » PicBasicPro » измерение длительности импульса (измерение длительности импульса при помощи pulsin...)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: