Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Частотомер на PIC, Как заставит PIC подсчитать значение F 
:(
    Опции темы
konst696
Дата 1.9.2004, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 10.8.2004

Репутация: нет
Всего: нет



Привет всем!
Хочу написать прогу для частотомера под p16f84a
Столкнулся с проблемой, как заставить поделить контроллер кол-во полученых импульсов на время.
Покопался в инете на эту тему, посмотрел исходники для частотомеров, но это меня еще больше запутало.
Помогите разобраться, может вообще следует использовать другой метод измерения частоты.
Заранее благодарен. qstn.gif
PM MAIL   Вверх
serg1
Дата 2.9.2004, 05:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я бы использовал такой алгоритм.
Подавал на вход прерывания INT0 импульсы, чпстоту которых надо измерить, и по передним фронтам запускал и останавливал таймер. Помоему фсё wink.gif
  Вверх
cardinal
Дата 2.9.2004, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(konst696 @ 1.9.2004, 12:38)
Покопался в инете на эту тему, посмотрел исходники для частотомеров, но это меня еще больше запутало.

konst696, выкладывай те места, которые тебя запутали...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
PILOT
Дата 2.9.2004, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Зачем делить?
Показываешь кол-во импульсов за 1 сек и все.

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
lummox
Дата 30.9.2004, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.6.2003

Репутация: нет
Всего: нет



Цитата(PILOT @ 2.9.2004, 13:23)
Зачем делить? Показываешь кол-во импульсов за 1 сек и все.

Ну да, если частоты порядка кГц, а требуемая точность порядка 3 знаков. Если же меряются десятки Герц, то для достижения той же точности понадобятся десятки секунд. Быстрый результат можно получить измерив период сигнала, а частоту вычислить взяв обратную величину. Видимо это имелось ввиду.
Тогда придётся делить эталонную частоту на кол-во импульсов этой частоты за период измеряемого сигнала.

PM MAIL   Вверх
avtar
Дата 18.11.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.11.2004

Репутация: нет
Всего: нет



пример деления 32/32
на PIC16F628 при 20МГц время выполнения 265 мкС

;---------------------------------------------------------------------

;------- HEADER ----------
;---------------------------------------------------------------------
; FredMaher Madrid 30 Sept 02 [email protected]
; Tony Newton's 24џ24 routine with worked example
;Доработано до 32/32 Тарасов А.в.

LIST P=16F628 ; 16F628 Runs at 20 MHz
INCLUDE "p16F628.inc"

__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC & _PWRTE_ON & _LVP_OFF & _BODEN_OFF

ERRORLEVEL -224 ; suppress annoying message because of tris
ERRORLEVEL -302 ; suppress message because of page change

;__FUSES _PWRTE_ON & _CP_OFF & _WDT_ON & _HS_OSC & _LVP_OFF & _MCLRE_OFF & _BODEN_OFF

; asds


; Define Information
;#DEFINE RS PORTA, 2
;#DEFINE E PORTA, 3
;#DEFINE TOGGLESW PORTB, 6 ; not used at the moment
;#DEFINE LED PORTB, 5

; Macro
Bank0 macro
bcf STATUS, RP0 ;Выбор bank 0
bcf STATUS, RP1
endm

Bank1 macro
bsf STATUS, RP0 ;Выбор bank 1
bcf STATUS, RP1
endm


;---------------------------------------------------------------
CBLOCK 20H ; from 20C to 7F = 67
;---------------------------------------------------------------

; MATH ROUTINES
; 32 / 32 Div --> 32

; TONY NIXON's Algorithm starts here + my retouching+ДОРАБОТКА ДО 32 РАЗРЯДОВ

; SUBROUTINE - 32/32 Деление
; Константа или делимое: nratorC nratorH nratorM nratorL
; Делитель: denomC denomH denomM denomL
;
; Результат: nratorC nratorH nratorM nratorL
; Остаток: remainC remainH remainM remainL
nratorC ;20Н константа или делимое для деления,при выходе из п.п. результат деления
nratorH
nratorM
nratorL
denomC ;24Н делитель из счетчика импульсов
denomH
denomM
denomL
remainC ;28Н Остаток
remainH
remainM
remainL
shiftC ;32H Временный регистр счетчик сдвигов
shiftH
shiftM
shiftL
BCount


;-------------------------------------------------------------------
ENDC ; end of definition block
;-------------------------------------------------------------------




ORG 0 ; Старт с 0
goto Main ; jump over to main routine

Main:
call Div32
Homesweethome
nop
goto Homesweethome

Div32

;Пример 1000000000/625= 3B9ACA00h / 271h =1600000 ( remainder... remain/denom gives the decimal correctly... = Dec 0.962)



movlw 0x3B ; Ввод константы (делимого)
movwf nratorC
movlw 0x9A
movwf nratorH
movlw 0xCA
movwf nratorM
movlw 0x00
movwf nratorL
movlw 0x00 ; Ввод делителя
movwf denomC
movlw 0x00
movwf denomH
movlw 0x00
movwf denomM
movlw 0x01
movwf denomL


divizn movlw .32
movwf BCount
movf nratorC,w
movwf shiftC
movf nratorH,w
movwf shiftH
movf nratorM,w
movwf shiftM
movf nratorL,w
movwf shiftL
clrf nratorC
clrf nratorH
clrf nratorM
clrf nratorL
clrf remainC
clrf remainH
clrf remainM
clrf remainL
dloop bcf STATUS,C
rlf shiftL,f
rlf shiftM,f
rlf shiftH,f
rlf shiftC,f
rlf remainL,f
rlf remainM,f
rlf remainH,f
rlf remainC,f
;
movf denomC,w
subwf remainC,w
btfss STATUS,Z
goto nochk
;
movf denomH,w
subwf remainH,w
btfss STATUS,Z
goto nochk
;
movf denomM,w
subwf remainM,w
btfss STATUS,Z
goto nochk
;
movf denomL,w
subwf remainL,w
nochk btfss STATUS,C
goto nogo
;
movf denomL,w
subwf remainL,f
btfss STATUS,C
decf remainM,f
movf remainM,w
xorlw 0xff
btfsc STATUS,Z
decf remainH,f
movf denomM,w
subwf remainM,f
btfss STATUS,C
decf remainH,f
movf denomH,w
subwf remainH,f
btfss STATUS,C
decf remainC,f
movf denomC,w
subwf remainC,f
bsf STATUS,C

nogo:
rlf nratorL,f
rlf nratorM,f
rlf nratorH,f
rlf nratorC,f
decfsz BCount,f
goto dloop
;




Return

end












PM MAIL   Вверх
konst696
Дата 8.12.2004, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 10.8.2004

Репутация: нет
Всего: нет



Благодарю всех за ответы
PM MAIL   Вверх
Гость_Alex
Дата 4.1.2005, 15:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можно сделать следующим образом: у таймера есть предделитель и есть синхронизация с внешним сигналом. Внешним сигналом у нас будет опорный генератор, допустим на 32768 Гц. Тогда установив предделитель Мы можем добиться чтобы таймер работал ровно секунду. А пока он работает мы считаем импульсы. По кривому, а можно другим таймером юзая его как счетчик, а по прерывания от первого таймера останавливаем счет импульсов. Таким образом у нас будет переменная соджержащая кол-во импульсов за интервал времени, который задается предделителем и точность нашего частотомера зависит от точности задающего генератора

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0742 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.