Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Частотомер (скважность и прочее и прочее и прочее)
Частотомер
Wictorych Дата: Пн, 16.08.2010, 17:09  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Понимаю
Сообщений: 61
Репутация: 0   ±
Замечания:   ±
На сайте с 11.07.2010

Статус: Offline

Итак, допустим на PORTC.0 приходит импульс.
Какими средствами я могу "узнать" его параметры (т.е. какие и как команды использовать):

t, tau, где в последствии они будут фигурировать

f = 1 / T (f - частота, Т - период)
T = t + tau (t - длительн. импульса tau - длит. "паузы")
S = T / t (S - скважность)

МК 16F876A, 10Mhz

Какие минимальные и максимальные значения при данном "оборудовании" смогу увидеть ? wink

ЗЫ Хочется заодно научиться работать с прерываниями и таймерами на этом примере... biggrin

ЯНДЕКС Дата: 16.08.2010
retas Дата: Пн, 16.08.2010, 21:47  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 462
Репутация: 10   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Лутше подавать на portB.0 - внешнее прерывание, запускаете таймер (если имп. очень длинный, "ставьте" счетчик подсчитывающий
переполнения таймера). По окончании импульса подсчитываете складывая все результаты и держите. Сбрасываете таймер и
считаете длительность паузы (таки же макаром до появлжния имп.).
Если точность нужна высокая, берите мах частоту осцилятора МК.


Новый подход к питанию потребителей переменного тока: http://ekolaif.ucoz.ru
terrarus Дата: Пн, 16.08.2010, 22:06  |                                                                                                                Сообщение # 3
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Quote (Wictorych)
Итак, допустим на PORTC.0 приходит импульс.
Какими средствами я могу "узнать" его параметры (т.е. какие и как команды использовать):

Если вы действительно начинающий, то нужно начать с команд:
1. PulsIn - переключает выбранный вывод микроконтроллера в состояние входа и измеряет длительность импульса поступающего на этот вход. http://www.terrarus.ucoz.ru/proton_....in.html
2. Counter - считает количество импульсов, которые поступают на вывод - Pin за время - Period, а результат сохраняет в переменной - Var. http://www.terrarus.ucoz.ru/proton_....er.html
А вот когда разберетесь с ними, следующими шагами могут быть команды:
1. On Interrupt инициализирует так называемую программную обработку прерываний http://www.terrarus.ucoz.ru/proton_....pt.html
2. On_Interruptпроизводит аппаратную обработку прерываний и осуществляет переход к подпрограмме обозначенной меткой Label, когда происходит аппаратное прерывание. http://www.terrarus.ucoz.ru/proton_....pt.html


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Пн, 16.08.2010, 22:08
Wictorych Дата: Пт, 20.08.2010, 12:37  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Понимаю
Сообщений: 61
Репутация: 0   ±
Замечания:   ±
На сайте с 11.07.2010

Статус: Offline

retas, Что делать, если подавать импульс на другой вывод ? Т.е. Как обрабатывать внешние прерывания не на RB0 и RB4-7, а на других портах ?
И еще есть, например, 4 источника импульсов, тогда как их подконнектить ? У меня LCD на RC2-7 сидит, на RA0-7 АЦП вход для датчиков, на RB кнопки (количество не утверждено еще biggrin )
Quote (retas)
Лутше подавать на portB.0 - внешнее прерывание, запускаете таймер (если имп. очень длинный, "ставьте" счетчик подсчитывающий
переполнения таймера). По окончании импульса подсчитываете складывая все результаты и держите. Сбрасываете таймер и
считаете длительность паузы (таки же макаром до появлжния имп.).

Как "запускается" таймер ? Как оперировать флагами таймера, и определить необходимость этого ?

вот например:

1. Запуск TMR0 на 1 сек

2. t1 = PulsIn PORTC.0, High
f = Counter PORTC.0, 100

3. если есть импульс, то дальше, если нет, то TMR0 на 3 сек., еще иначе на 10 сек

4. Остановка TMR0, считаем что нужно и выводим результаты

Freq = f * 10
S = t1 / Freq
Print At 1, 1, "Частота = ", Dec Freq
Print At 2, 1, "Скважность = ", Dec S

5. повтор сначала ...

Так что ли ? wink

terrarus, с первыми двумя в общем и целом все ясно, разбираюсь с остальными двумя... cry

На этом сайте есть "калькулятор расчета значений таймеров".... Есть пункт "подстройка TMR0", внизу окошко "TMR0" и в поле выводиться таже цифра, что и в подстройке...
А как эти данные в программу занести ? OPTION_REG понятно wink , а "корректировку" ?

Что за маскированные и не маскированные прерывания ? Как их "маскировать" и зачем ?

retas Дата: Вс, 22.08.2010, 01:28  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 462
Репутация: 10   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

1. Если измерять импульсы на любых лапах, придётся обойтись, ПМ, бес прерывов и
жертвовать точностью что для прибора будет не приемлимо. Лутче взять чъю то разработку и
пробовать переделать на свои нужды. Если не для прибора, смотрите дальше.

2. Если вы хотите мерить длительность импульса и потом количество их на той же ноге,
я бы писал где то так (только принцип)
k = PulsIn PORTC.0, High...................мерим длительность имп. (неизбежно теряем время - если имп. длинный,
..........................................................лутше инкрементировать счетчик, обойти другие ноги и опять с начала)
if k>0 then.......................................есть ли имп.
...t1=k................................................да, запомним его значение
...INC Count1.....................................инкрементируем Count1 (сначала он =0)
... k=0................................................скидываем
if Count=3(10)сек then Count1=0 и делаемХ.................в реале не секунды а число импульсов соответсвующее соответсвенному времени.

3. Быть может можно применить и TMR0 для длинных интервалов. Как только нужно начать измерение, делайте сброс его и Count1=0
В прерывах пишите "INC Count1" а в прогре частенько "if Count1=3(10)сек then делаемХ"
*лутше, правда, стараться декрементировать а не инкрементировать и переменную проверять не на соответсвие какому то числу(>0), а нулю -
програ тогда проверит быстрее.

Надеюсь сильно не напутал и не попутал.


Новый подход к питанию потребителей переменного тока: http://ekolaif.ucoz.ru
Wictorych Дата: Вс, 22.08.2010, 23:09  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Понимаю
Сообщений: 61
Репутация: 0   ±
Замечания:   ±
На сайте с 11.07.2010

Статус: Offline

retas, большое спасибо за подробное разжевывание, пошел пережевывать... cool
bulat Дата: Вт, 07.04.2015, 08:59  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 26
Репутация: 0   ±
Замечания:   ±
На сайте с 05.04.2015

Статус: Offline

Написал программку частотомера,проверил в железе-работает,возникло несколько вопросов
1)Подсчет идет на таймере1,но он считает только до 65535,пришлось извернуться(по программе видно),можно ли как-то подсчитывать количество переполнений таймер1?
2)когда ставлю время счета 1 сек показания ниже в 2,5 раза,пришлось время подсчета ставить 400 мсек-частоту показывает точно(вернее,частота/10)-почему так?
3)в протеусе ошибается на 62 гц при измерении 25,000000 мгц,а в железе все точно-где правда?
Прикрепления: fregmetr.rar(36Kb)
dimvad Дата: Вт, 07.04.2015, 14:17  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 9   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Я, когда-то так делал простейший частотомер. До 30 Мгц сносно работал.
Прикрепления: FRQ876A.zip(66Kb)
Broka Дата: Вт, 07.04.2015, 19:44  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

dimvad
Ну работает то.


Наладчик КИП и А
Сообщение отредактировал Broka - Вт, 07.04.2015, 19:45
bulat Дата: Вт, 07.04.2015, 21:16  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 26
Репутация: 0   ±
Замечания:   ±
На сайте с 05.04.2015

Статус: Offline

dimvad   спасибо  изучу,в баском авр есть счетчик переполнений overlov,и здесь должен быть...

так у вас идет без переполнения...но все равно спасибо!

Сообщение отредактировал bulat - Вт, 07.04.2015, 21:29
MiXaS Дата: Вт, 07.04.2015, 22:44  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

bulat,  что Вас заставило изучать пики?
bulat Дата: Ср, 08.04.2015, 06:13  |                                                                                                                Сообщение # 12
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 26
Репутация: 0   ±
Замечания:   ±
На сайте с 05.04.2015

Статус: Offline


Цитата
bulat,  что Вас заставило изучать пики?
намек понял-удаляюсь...
а вообще давно хотелось их изучить-до этого работал с авр в среде баском,и нужен под мои нужды частотомер-в сети такой не нашел-точность до 7-го знака и переключаемые режимы 0,1 сек/1 сек/10 сек,использование предделителя SAB6456 1:1,1:64,1:256,автоотключение,простой измеритель уровня сигнала-для настройки антеннн передатчиков,есть еще хотелки,пока промолчу о них
разобрался почему занижало в 2,5 раза-был включен предделитель в таймере1
MiXaS Дата: Ср, 08.04.2015, 14:46  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

bulat, я спросил потому что сам, например, хочу АВР поизучать, мне они показались дешевле
AndrF Дата: Ср, 08.04.2015, 21:20  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 148
Репутация: 3   ±
Замечания:   ±
На сайте с 03.02.2012

Статус: Offline

IMHO - для дома цена вообще не вопрос. Пики с 32 кб памяти можно взять рублей за 100-150 прямо в Москве... Их же не сотни надо...

А так с десяток я для себя заказывал и на сайте микрочипа - тоже получил без проблем...
bulat Дата: Ср, 08.04.2015, 21:56  |                                                                                                                Сообщение # 15
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 26
Репутация: 0   ±
Замечания:   ±
На сайте с 05.04.2015

Статус: Offline

MIXaS а просто не так понял,можно с баском авр начать,информации полно в сети,если надо подскажу 3 сайта,синтаксис почти такой же как протон но все равно есть свои грабли,мои наработки не большие-я их складывал сюда на вртп,на коте вообще целая тема-инфы море...я вообще набрал меги 16 по 50 рэ,16 кб

вообще честно говоря накупил когда-то много пиков(12f629,675,16f627-630,676,684 и т д) ,лежат,хочется их пощупать,так сказать...
частотомер вроде получается по тихоньку,считает правильно,разбираюсь с кнопками,жаль протон с ограничением 2 кб,все хотелки не полезут
Прикрепления: 8544385.jpg(292Kb)
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Частотомер (скважность и прочее и прочее и прочее)
Страница 1 из 212»
Поиск: