www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 04 Дек 2021, 01:54

Часовете са според зоната UTC + 2 часа [ DST ]




Напиши нова тема Отговори на тема  [ 2 мнения ] 
Автор Съобщение
МнениеПубликувано на: 18 Юли 2021, 13:02 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1261
Местоположение: Силистра
Дежавю :rolleyes : Честотомер с PIC, в случая: PIC16F628A, XTAL = 4 MHz, CCS, PIC-C Compiler.
В стаята виждам поне 5 честотомера :biggrin. Въпросите са по-скоро за алгоритъма. Занимание в хобито за самото занимание.

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 трябва да е по-малка от Fosc / 4 (~ 961 kHz), т.е. необходимо е да се включи prescaler.

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

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

Искам за себе си да уточня вариантите за решение с timer0 във втория случай.


Прикачени файлове:
pic_fc.jpg
pic_fc.jpg [ 85.57 KiB | Прегледано 188 пъти ]
Върнете се в началото
 Профил  
 
МнениеПубликувано на: 31 Юли 2021, 15:48 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1261
Местоположение: Силистра
С помощта на колега по хоби въпросът е решен по AN592 - Frequency Counter Using PIC16C5X, по един извод: RA4, представящ се като изход /LOW/ и вход и досчитане на вътрешния прескалер.
---
Къде да извърша калибрацията? Заради матем. действия измервателния период 1 сек не е точно 1 сек, а повече с времето за изпълнеие на наколко инструкции. Пробвах с пресмятане и съответното компенсиране (< 1 сек). За конкретна честотна област показанието се калибрира, но в целия диапазон има неточности.

Днес просто умножих измерената честота по коефициент = реална честота / измерена честота.
freq *= 0.99996900097336943619970332931546; Добър FLOAT коефициент, копиран директно от калкулатора :cool.

Честотомерът заработи точно в целия си честотен обхват, вкл. входния си prescaler /64. Проверено напр. на 433 MHz ... :super.

Не че повече от 6-7 са значещите цифри слез запетаята във float ... ама нали работи ... не пипам повече! :smt041

Други вариати за калибрация?


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 2 мнения ] 

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com