Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Частотомер на PIC (PIC16F628A)

Вс июл 18, 2021 11:21:17

Дежавю 8) : Частотомер на PIC, в случае: на PIC16F628A, XTAL = 4 MHz, CCS, PIC-C Compiler.
Рядом со мной не менее 5 частотомеров :)). Вопрос больше об алгоритме. Деятельность для хобби, для самой деятельности.

1. При алгоритме с timer0: время для отчетов, напр. 1 сек, timer1 - вход (pin 12, RB6, T1CKI)
код сработал после нескольких попыток. Без prescaler на входе, при тестовый монолитный генератор 20 000 000 Hz, с нормальной мин ошибкой (которую можно исправить как аппаратно (конденсаторы к кварца), так и программно (дополнительные циклы микроконтроллера), последний знак почти "не прыгает" +/- 1. Хорошее разрешение 1 Hz, со временем отслеживаю изменение частоты с температуры даже двух кварцевых генераторов. Максимальная частота пока не интересует и, вероятно, будет соответствовать параметрам в pdf.

2. При алгоритме с timer0 - вход (pin 3, RA4, T0CKI), timer1 - время для отчетов, напр. 1 сек
максимальная входная частота timer0 должна быть max Fosc / 4 (~ 961 kHz), т.е. нужен предварительный делитель.

При вход 20 MHz -> prescaler = 32..256 все работает. Но теряем разрешение на более низких частотах. То есть, по крайней мере, мне нужно переключить prescaler в зависимости от входа. Где взять инфо нормально ли работает или не переключается (если не переключить, то показания случайны, хаотичны)? Потом по табличке, с расчетом и во многом способы может ...

Попробовал считать prescaler динамично: проверка с (pre-1), начиная с самого большого: 256->128->64->32 -> дааа, это искомый делитель и используем его; нет, стоп уменьшения делителя. От большого к маленькому" прескалера способ работает почти ОК. Наоборот: "от малого к большому" я еще не думал о етом как это сделать, но, вероятно, есть более простые способы?

Хочу уточнить для себя вариантов решения по timer0 во втором случае.
(частично пользуюсь переводчиком)
Вложения
DSC04771.JPG
(85.57 KiB) Скачиваний: 214

Re: Частотомер на PIC (PIC16F628A)

Пт авг 06, 2021 10:08:17

Для повышения точности измерений целесообразно разделить измеряемый диапазон частот на два:
- свыше 10 кГц измерять частоту методом досчета, используя пределитель на 256
- менее 10 кГц измерять период с последующим преобразованием в частоту.

Re: Частотомер на PIC (PIC16F628A)

Пт авг 06, 2021 11:51:08

Да, досчет прескалера с помощью коллега с форума и AN592 - Frequency Counter Using PIC16C5X.
Нравится, последний разр. не мерцает, на 50 MHz я видел - работает.

А для калибровки?

Хардуерное понятно (конденсаторы кварца), выполнено.

А программно?
Попытка компенсировать задержку вычисления в прерывании приводит к непостоянной ошибке во всем рабочем диапазоне (ошибка должна быть пропорциональной).
В итоге я просто умножил получившуюся частоту на float :) (как float мне не очень нравится).

freq *= 0.99995705188971685245849182635964;
из win-калькулятора Freal / Fизм ... :))) и все -> Fизм компенсируется по всему частотному диапазону.
(понимать конечно как 7-9 (?) зн. после запятой на мантиссе 23-bit)

Другой способ компенсации частоты кварцевого генератора есть?

Re: Частотомер на PIC (PIC16F628A)

Вс авг 08, 2021 08:49:56

У меня примерно похожий вопрос, тему решил не создавать новую. Есть описание алгоритма, вопрос примерно с помощью каких команд, или псевдокода он реализован именно на PIC контроллерах.
И можно ли будет это использовать с 8мГц кварцем и PLL на STM32?
Суть, есть внешний кварц на 20мГц и LC колебательный параллельный контур на 19кГц. Измеряется частота колебаний последнего. Камень PIC12F629.
Описание алгоритма: "Кварц там не спроста высокий - чтобы выше было разрешение. Считается не количество периодов генератора LC за период времени, а наоборот - количество периодов кварца относительно LC генератора. Благодаря этому в реалтайме видно сдвиг на доли Герца."
Так вот, можно ли это будет реализовать на STM32 и PLL который домножит частоту до 48мГц?
Ответить