PDA

Просмотр полной версии : Простой частотомер на pic16f628a



Slav9n
01.04.2016, 07:27
Помогите пожалуйста. Собрал простой частомер, у него оказалось время счета 1 сек. Так как частомер будет служить в качестве цифровой шкалы в конструкции US5QBR (Малосигнальный тракт SSBTRX’a прямого преобразования на диапазон 80м), ей не очень удобно пользоваться. Не могли-бы помочь изменить прошивку на 0.1 сек. Скажу сразу, я в программировании почти ноль (немного изучал с++). Пытался сам переделать, просидел с 7 вечера до 7 утра, к сожалению не чего не вышло. Попросил помощи на другом форуме в ответ тишина, уверен здесь люди более отзывчивые.
Схема:
230343
прошивка:
230344

RV9CQQ
01.04.2016, 08:42
попробуйте это
Все вопросы к uk8ad@mail.ru

Slav9n
01.04.2016, 09:00
Спасибо конечно, но это не то. Вы вне предлагаете совсем другую конструкцию. Мне нужно исходник поправить, который я выложил или хотя-бы сказать что исправить. Да забыл, прошивку уже правили для двух строчного дисплея, я тоже примирил 16x2.

RV9CQQ
01.04.2016, 09:12
С прошивкой ни чем помочь не могу. Сам в этом деле не очень . А вот схема вроде та же. И индикатор можно поставить любой. И еще, вот что пишет автор, по моему очень интересно именно для шкалы.

Slav9n
01.04.2016, 09:36
Не схемы разные, у них обшившего только входной формировать. Да и ПЧ мне корректировать не нужно, схема TRXса работает на той же частоте что ГПД.
Ладно буду ждать человека который с pic может не на <<ты>> , но за <<руку>> здоровается.:smile:

ra3rbe
01.04.2016, 09:44
Изменить время пересчета непросто. Это практически заново программу написать. Время пересчета в таких конструкциях задается программно. Для того, чтобы точно его выставить, приходится порой вставлять холостые команды и идти на прочие ухищрения. Это приходится делать на работающем образце, как это сделать вслепую не представляю.
Знаю это потому, что у меня давно есть такая конструкция. Ей уже под 20 лет.

RV9CQQ
01.04.2016, 09:45
Slav9n (http://www.cqham.ru/forum/member.php?30773-Slav9n) А Вы обратитесь к автору. Адрес выше.
И да, Александр ПРАВ!

uk8adi
01.04.2016, 09:50
Обратите внимание на частотомер (автор JG6DFK) примененный в конструкции SWR анализатор Сергея 4Z5KY:
http://www.cqham.ru/SWR_17.htm
Для прямого преобразования должно пойти.

Slav9n
01.04.2016, 10:16
uk8adi, перешел по ссылки, на что мне надо было обратить внимание? Pic 84 , а у меня 628, схематичное решение другое, не прошивки не говоря об исходнике.
ra3rbe, RV9CQQ, Да мне хоть чуток информации куда капать. Я настойчивый, методом "тыка" переделаю, а то 800 строк кода и я один.:-P

ra3rbe
01.04.2016, 11:03
Измерение состоит из двух этапов - это основной цикл измерения и извлечение значения прескалера методом досчета.

Нужно определить основной цикл измерения в программе. Так сказать локализовать его. Если у вас точность измерений 1 гц, то этот цикл должен длиться ровно 1 секунду. Внутри цикла наверняка стоят подпрограммы задержки. Наверное не одна. Нужно изменить задержки так, чтобы цикл измерения был ровно 0.1 сек. Т.к. в программе происходят ветвления, то нужно отслеживать, чтобы времена выполнения цикла были всегда одинаковыми, независимо от того, по какой ветке пошло исполнение. Это вкратце. На деле кроме задержек в программе могут встретиться холостые копанды nop , служащие для точной корректировки времени. Могут быть казалось бы ненужные бесполезные блоки типа PUSH какой-то регистр и тут же POP его. Все это автор делал для точного выставления времени цикла измерения. Ничего выбрасывать и "улучшать" не нужно.
Это самое важное в этой программе. Если не выставить время цикла точно, то работать частотомер не будет.
К тому же делать это наобум что-то изменяя во временах не стоит. Нужно разобрать весь цикл по косточкам, чтобы знать точно в микросекундах сколько времени занимает полезная программа и сколько нужно ставить задержки.

А если с этим справитесь, то наверняка придется переделывать индикацию, т.к. измеренное значение будет не в герцах, а в десятках герц. Либо нужно будет домножать на 10 результат, либо переделывать разбор и индикацию результата.

В общем как я и говорил - это уже новая программа будет

Гораздо проще попробовать другую конструкцию. Вам уже предлагали несколько, посмотрите мои. Хотя сразу скажу под 2х строчный индикатор я не делал частотомера и дорабатывать что-то в этих старых конструкциях не собираюсь.
http://ra3rbe.r3r.ru/digiscal.htm
http://ra3rbe.r3r.ru/scallcd.htm
http://ra3rbe.r3r.ru/scalafc.htm

Владимир_К
01.04.2016, 11:04
Исходник есть? Если есть, попробую помочь.

RV9CQQ
01.04.2016, 11:04
Как мне говорили в свое время, они заменяются друг с другом. Выводы те же.

ra3rbe
01.04.2016, 11:22
84 и 628? Выводы те же, но внутри это разные микросхемы. Программы не взаимозаменяемые.

Владимир_К,

Исходник есть? Если есть, попробую помочь.
Исходник в начале темы.

Slav9n
01.04.2016, 11:25
Владимир_К, конечно есть!В первом посту данной теме, файл RAR, там исходник.
ra3rbe, 628. Я не знаю почему мне все предлагаю схему на 84.

ra3rbe
01.04.2016, 11:35
Принципиальной разницы между ними нет. По крайней мере в этом проекте. 628 более современные. 84А кажется сняты с производства, сейчас их порой сложнее купить, а возможно они и дороже. Просто раньше они были наиболее доступными и на них наделали много конструкций.

Slav9n
01.04.2016, 11:43
Ну да. Я читал не много про них, у 84 таимеров вроде меньше и FLASH.

Владимир_К
01.04.2016, 11:45
Исходник в начале темы.
Спасибо. Я не открывал, прочитал в сообщении "прошивка" и не стал заглядывать.. Я этим делом занимаюсь от случая к случаю. И оно все забывается понемногу, вот и приходится иногда возобновить в памяти:smile:.

LY3OS
01.04.2016, 12:40
Я несколько лет назад сделал такой-же частотомер, от EI9GQ (http://homepage.eircom.net/~ei9gq/counter.html).
У него на странице имеются прошивки для 0.4 сек. и 0.1 сек. Заливайте смело в свое устройство.
Единственно придется заменить кварц с 4 МГц на 10.240Мгц и 10 минут займет перерезать дорожки на плате и перекинуть проводки, потому что в его схеме к дисплею идут 10, 11, 12, 13, а у вас 6, 7, 8, 9.

Вот выкладываю прошивку на 0.1 сек, как сам автор oписывает "100mS gate time version for use as a frequency display in a receiver/transmitter".
230369

Личные впечатления от этой конструкции - точность вполне нормальная, работает до 31 МГц.

230368

AlexSh
01.04.2016, 13:46
http://ra4nal.qrz.ru/chlcd16.shtml

uk8adi
01.04.2016, 15:49
перешел по ссылки... Pic 84 , а у меня 628
Если дать поиск по:"замена PIC16F84 на 628" , можно найти много интересного.


не прошивки не говоря об исходнике
За исходник не скажу, а прошивка - внимательней если смотреть, открывается кликом по позывному JG6DFK (http://www.cqham.ru/ftp3/pic_fc1.zip) :
http://www.cqham.ru/ftp3/pic_fc1.zip

Slav9n
01.04.2016, 18:57
LY3OS, это уже ближе к теме.Есть несколько загвоздок, кварца у меня токового отродясь не было, не хотелось бы курочить плату (покрыта маской).
AlexSh, схему видал. Только было уже поздно.
Буду ждать что скажет Владимир_K. Если у него не получится оставлю как есть, сам виноват, поторопился плату делать.

Владимир_К
01.04.2016, 19:43
Буду ждать что скажет Владимир_K.
Немного посмотрел исходник, пока, конечно не все понятно. К сожалению завтра на несколько дней надо уехать, дачный сезон начался:smile::smile :. Поэтому, если время терпит... то надо подождать.

Slav9n
01.04.2016, 21:21
Владимир_К, конечно подожду. Если не трудно, ответе на вопрос. Вот я поставлю кварц на 12Мгц, время измерения составит 0.3 секунды. Что для меня вполне хватает показания также изменятся в три раза. Сам вопрос: в языке с я искал бы переменную куда записывается число приходивших импульсов и умножил бы их на 3, нельзя ли сделать так в ассемблере? Если можно как бы выглядела бы запись?

Владимир_К
01.04.2016, 22:43
Ну в ассемблере так не сделать. переменная в ассемблере это всего-лишь ячейка памяти или регистр процессора. Которая может иметь число до 255 (если процессор восьмиразрядный). Есть несколько объединенных в два. Измеренное число в ассемблере распихано по ячейкам памяти или регистрам процессора, понятно в двоичной системе. Если это многоразрядное число, его надо преобразовать в двоично-десятичный код. Например, число 12D687, это то, что мы имеем в памяти. Каждая ячейка восьмиразрядного процессора может иметь число от 0 до 255 или в шестнадцатиричной системе -до FF. Таким образом число 12D687, будет занимать три регистра. Вот это число надо умножить на 3. В ассемблере проще всего сложить числа с переносом три раза. Потому как умножение для него (и для меня сложно). Это надо искать библиотеку.
Хотя конечно, современные Ассемблеры много чего умеют. Но, я этим делом занимаюсь от случая к случаю. Всех премудростей ассемблера не знаю.
Для этого частотомера надо всего лишь изменить время счета, уменьшить его в 100 раз, можно в десять, но последнюю цифру не показывать. Так лучше (в десять раз) - меньше будет дергаться последняя цифра. Ну и понятно, надо изменить вывод на дисплей.
Чтобы не заниматься подсчетом времени, запустил симулятор. Время, что которое задано в программе, симулятор эти циклы крутит уже около двух часов. А если считать, скорее всего можно ошибиться. Был бы этот частотомер под руками, можно было бы "методом тыка". Изменить цифры в программе и на реальном девайсе посмотреть, что оно покажет. Так было бы быстрее намного.

movlw .10 ; берем цифру 10, пишем ее в TTt
movwf TTt
movlw .176 :; берем цифру 176, пишем ее в Temp1
movwf Temp1
clrf TMR1H
clrf TMR1L
bcf PIR1,0
bsf T1CON,0 ;Включаем счетчик
DelayT100
movlw .189 ; берем цифру 189, пишем ее в Temp2
movwf Temp2
decfsz Temp2,1 ; уменьшаем Temp2 на 1. Если не ноль, возвращаемся на шаг назад и вычитаем снова единицу и так пока станет равной 0.
goto $-1
decfsz Temp1,1 ;Темp2 стало равным нулю, пришли сюда, на 1 единицу уменьшили Temp1 и, опять вернулись на метку DelayT100. Снова записали в Тemp2 189 и
goto DelayT100 ;пошли по второму кругу, а ниже еще несколько кругов. Вот так ассемблер формирует задержки.
movlw .175 ;Попробуйте, может если понятно, изменить цифры. Надо закачать какой-нибудь MPLaB. У меня еще древний 6.40. Они все бесплатные.
movwf Temp1 ;Пока я буду ковыряться на даче, может и сами справитесь.
decfsz TTt,1
goto DelayT100
movlw .50
movwf Temp3
decfsz Temp3,1
goto $-1
bcf T1CON,0

Вот кусок программы, задающий одну из выдержек.

Slav9n
01.04.2016, 22:50
Понятно.:-( LY3OS выложил исходник с 0.1 сек, глянулиб его. Не будет ли вам легче программно изменить порты вода-вывода под мою схему?
Там только кварц какой-то "кривой" но по ссылке которую LY30S вроде есть на 10mgz.

Владимир_К
01.04.2016, 23:10
Вот ссылка на архив компиляторов:
http://www.microchip.com/mplab/mplab-x-ide
Исходник от LY30S гляну, но уже не сегодня.

Oleg 9
01.04.2016, 23:15
Slav9n, есть ещё один вариант, без вмешательства в программу - поставить кварц на 20 МГц и между усилителем на транзисторе и входом 12 контроллера добавить делитель на 2, например на 74HC74. В итоге получите частоту обновления показаний 5 раз в секунду и точность измерения 10 Гц.

Slav9n
01.04.2016, 23:30
Владимир_К, Программы уже есть.

Исходник от LY30S гляну, но уже не сегодня.
Я вас не в коем случаи не тороплю.

Oleg 9, Так наверное и сделаю если не получится не чего программно.
P.S. Жалко плату курочить.

Oleg 9
01.04.2016, 23:41
Oleg 9, Так наверное и сделаю если не получится не чего программно.
P.S. Жалко плату курочить.Если придётся так делать, то имейте ввиду, что возможно снова придётся запрограммировать контроллер этой же прошивкой, и поменять конфигурацию в программе для заливки прошивки на высокочастотный кварц. HS, если правильно помню. Там ничего сложного нет, просто сейчас нет смысла расписывать подробности. Если непосредственно будет нужно, Вам подскажут, что и как сделать. Дело в том, если просто припаять кварц на 20 МГц, вместо 4 МГц, то он может и не загенерить, если в конфигурации контроллер настроен на среднечастотный XT резонатор.

Slav9n
02.04.2016, 00:20
Oleg 9, Я Знаю, читал про биты конфигурации.
Но, все таки надеюсь решить проблему с програмнно.

Добавлено через 33 минут(ы):

Всем огромное спасибо в особенности Владимир_К!

Пока я буду ковыряться на даче, может и сами справитесь.
Я успел справится за 30 минут, вот что значит правильно объяснить!
P.S. Я ещё раз убедился, что на этом форуме полно отзывчивых и квалифицированных!!!

Владимир_К
02.04.2016, 08:32
Я успел справится за 30 минут,
Не забудьте, там вроде три цикла. Один - 1 сек, в это время считаем герцы, второй -1 ms - килогерцы. И так далее. Но, конечно для подсчета МГц, вряд ли цикл 1мкс.Скорее там поболее, а потом коррекция.

Slav9n
02.04.2016, 13:02
Да так есть. Там nop корректируют первый разряд. А так я полностью разобрался с прошивкой.

Slav9n
03.04.2016, 14:32
Владимир_К, Нельзя ли в данной прошивки ещё добить десятки герц, пусть даже в урон максимальной частоты измерения. Я имею в веду старший разряд пусть показывает не 10ки МГц XX.XXXкГц, а лишь только единицы X.XXX.XXГц или вообще убрать, чтоб частотомер показывал в первых трех разрядах килогерцы и в двух оставшийся герцы, а тройку я напишу сам. Мне все ровно выше 3.8МГц и ниже 3.5МГц измерять не нужно.
Надеюсь Вы меня поймёте.

Владимир_К
04.04.2016, 19:15
чтоб частотомер показывал в первых трех разрядах килогерцы и в двух оставшийся герцы,
Добрый день! Я не вижу смысла в этом. Дело в том, что частотомер с таким алгоритмом как у Вас(да не только у Вас, некоторые также), основное время затрачивает на цикл измерения единиц герц. И этот цикл самый длительный. Для измерения килогерц (единиц, десятков и сотен) цикл теоретически можно сделать в районе 1-10 миллисекунд. Для мегагерц и того меньше. То есть, выигрыша никакого. Вот когда Вы избавляетесь от единиц герц, это дает эффект, так как цикл значительно уменьшается и не надо ждать секунды пока обновится информация. Если индикатор имеет мало разрядов, то тоже не проблема, просто ненужные цифры, например десятки мегагерц, не будете выводить.
Кстати, выше я писал, что не надо забывать о том, что в этом частотомере три цикла... То я погорячился... Циклы, когда измеряются килогерцы и мегагерцы трогать совершенно не надо.
Но, если уж так захочется, пишите на Си, а кусок, который считает время, вставите ассемблерный. На Си только сделаете вывод на индикатор. Библиотеки есть. Но тут я Вам не помощник, на Си написал только одну программу синтезатора и ту пока не полностью. Опыта никакого, так могу только пофилософствовать. Хотя, мне кажется, тут сложностей особых не должно быть. Надо только цифры, что насчитал счетчик, из ассемблерного кода вытащить в переменную на Си. Как это сделать, хрен его знает (читать надо:smile::smile:)

Slav9n
05.04.2016, 01:29
Владимир_К, да я разобрался в алгоритме программы. Получается разрядность в ущерб времени счета и на оборот. Решил мерить до сотых герца с временем измерения 0.3сек . Да когда вписывал новые значения, сильно удивила не приязнь компилятора к десятичном дробям приходилось округлять до целых. Неужели в Ассемблере нет возможности записать тоже число Пи?
А, так общей вывод от ассемблера: Ассемблер ужасный не логичный язык, что влезает 100 строк кода в ассемблере я могу уместить в три на С++.
Кроме размера программы я преимущество в ассемблере не вижу. Так зачем себя мучить?

UN7GCE
05.04.2016, 06:54
...я разобрался в алгоритме программы... ...общей вывод от ассемблера: Ассемблер ужасный не логичный язык...Только сегодня увидел эту тему. Быстро пролистал, посмотрел исходник. В данном девайсе применен несколько громоздкий способ счета. Такие алгоритмы применяли в простейших ПИКах (84). 628 содержит уже продвинутый таймер, который позволяет за один проход считать всю частоту с любой разрядностью. Например, - для точности счёта в 10 Гц требуется 0,1 сек, а не 0,3 сек как в данном исходнике. Заниматься правкой у меня желания нет, могу только подсказать, как писать на асме. И выкладываю свой кусочек исходника, где работает таймер T1CON (TimerL, TimerM и TimerH регистры частоты, опора 4МГц). Программировать на ассемблере конечно долго, но технические возможности этого языка меня восхищают! И, если время позволяет, лучше писать на асме. Хотя каждый пишет на том, что знает лучше.

Slav9n
05.04.2016, 07:37
UN7GCE,ну вот зачем Вы это написали?!:-P Я только что решил что не реально на ассемблере написать, быстрою и одновременно точную школу, теперь придется опять просидеть несколько бессонных ночей. Если не жалко, не кинете весь исходник?

UN7GCE
05.04.2016, 08:03
Если не жалко, не кинете весь исходник?Исходник не скину. Он довольно объёмный (http://www.cqham.ru/forum/showthread.php?26707-%D6%E8%F4%F0%EE%E2%E 0%FF-%D8%EA%E0%EB%E0-%C0%EB%EC%E0%F2%E8%E D%F1%EA%E0%FF-(%D6%D8-%C013)&p=915923&viewfull=1#post91592 3), девайс имеет много функций, без поллитры не разберешься. Если Вы хорошо пишете на С, то зачем голову себе морочить. Я выложил кусочек кода для того, чтобы показать как работает таймер T1CON. У него два регистра TMR1L и TMR1H, включается счёт установкой бита T1CON,TMR1ON и выключается сбросом бита T1CON,TMR1ON . Для наращивания используется флаг по переполнению PIR1,TMR1IF. Таким образом можно организовать три и четыре и более регистров для счёта. Время кольца берётся по необходимой точности. В данном случае это 100 mS. Использую эту информацию, я думаю, легко вставить этот кусок кода в нужное место.

Владимир_К
05.04.2016, 08:05
быстрою и одновременно точную школу,
Какой цикл счета был в Вашем частотомере до изменения прошивки? Разве 3 сек? Не думаю. Было, наверное чуть больше 1 сек.. На пару миллисекунд. Так как для измерения килогерц во втором цикле счета достаточно 1 миллисекунды. А для мегагерц и того меньше. Думаю, Евгений просто не досмотрел до конца исходник (хотя я его тоже до того конца не досмотрел:smile:). Потому "быструю и точную" не получите и за бессонную ночь.
Чтобы было более понятно, как работает данный алгоритм.. Представим счетчик с тремя декадами. Понятно, что такой счетчик может считать только до 999. А нам надо посчитать до 50 мгц. Поэтому, счет выполняется за три цикла:
- первый, считаем одну секунду. Если частота, скажем 1234567 герц, то счетчик за время 1 сек переполнится 1234 раза. Пусть переполняется. Нам верхние цифры не нужны. В счетчике останутся последние цифры 567, то есть герцы. Их мы переписываем в память. Затем считаем 1 миллисекунду. В счетчике останутся цифры 234 - килогерцы. Таким образом, для точности 1 герц надо время 1,001 сек. В реальном частотомере не совсем так. Там счетчик задействован 16-разрядный. Он может считать до 65536. То есть он может посчитать не только герцы, но и десятки килогерц. Да и числа там двоичные, но, скорее всего, принцип тот же. Я привел пример с декадными счетчиками, лишь для того чтобы был понятен принцип. А если цифры двоичные, то 65536 - это 10000 в шестнадцатиричной системе. Как видим, последние - нули. То есть, при переполнении счетчика, справа остаются неизменными цифры,соответствующи е герцам, Надо их только перевести в десятичные и вывести на экран.
В общем, что-то примерно так.

Slav9n
05.04.2016, 14:46
Владимир_К, ну, я так себе и представлял алгоритм вычисления частоты. Для себя усвоил из того что вы сказали и un7gce, мне проще написать на С под себя чем исправлять изначально "кривую" прошивку на языке который я с трудом понимаю. Нетли у кого исходника на С частотомера желательно с lcd? Эта конструкция пусть остаётся как есть. Просто хотел поточней, а то как сейчас в эфире, на 50 Герц не так подошел и узнаешь о себе и о своём трансивере такие вещи...

Владимир_К
05.04.2016, 15:30
Просто хотел поточней, а то как сейчас в эфире, на 50 Герц не так подошел
Я не совсем понимаю, что Вы имеете ввиду "поточней". Если с точностью до 1 герца, то время счета будет никак не меньше одной секунды, независимо на чем написана программа частотомера, на Си или Ассемблере. Если достаточно точности 10 герц, время счета будет около 0,1 сек. И что значит "кривая" прошивка? Вполне "ровная". Вот если бы Вы попробовали изменить время счета в частотомере с динамической индикацией, где процессор постоянно занят выводом цифр на экран, и постоянно отвлекается на проверку флагов переполнения счетчика, если есть переполнение - записывает единицу в память, опять возвращается к выводу на индикатор. И все эти телодвижения должны в общей сложности составлять 1 сек, или 0,1 сек. И ни одного цикла ни больше ни меньше.

rx3apf
05.04.2016, 16:47
С такой схемотехникой счетного узла, как по схеме из первого поста - да, разрешение не лучше 10 Hz за 100 ms. Но в общем-то нет никаких принципиальных сложностей иметь и 1 Hz за те же 100 ms, причем не вводя дополнительных компонентов. А эту схему "рихтовать" - только время тратить...

Владимир_К
05.04.2016, 17:30
А эту схему "рихтовать" - только время тратить...
И причем здесь схема...

Но в общем-то нет никаких принципиальных сложностей иметь и 1 Hz за те же 100 ms, причем не вводя дополнительных компонентов.
С этого места хотелось бы подробнее.

rx3apf
05.04.2016, 18:09
И причем здесь схема...

"При том" (c) Выход источника сигнала заведен на вход таймера и только на него. Это накладывает определенные ограничения на используемые методы счета.


С этого места хотелось бы подробнее.
Обсуждалось (в том числе и на этом форуме) неоднократно. Гуглить - "reciprocal counting". Не стану утверждать, что в архитектуре таймеров семейства PIC16 реализуется без внешней обвязки (хотя по-любому это простейшая логика), но вот, например, в AVR - легко.

Без применения интерполяторов разрешающая способность определяется временем счета и тактовой частотой опорника (с поправкой на коэффициенты деления тактовой частоты, обусловленные архитектурой). Т.о., если таймер тактируется опорником без деления, то при опорнике 20 MHz и времени счета 100 ms разрешение 5E-7. Для, скажем, 1.8 MHz входной это 0.9 Hz.

UR4UDT
05.04.2016, 18:50
Без применения интерполяторов разрешающая способность определяется временем счета и тактовой частотой опорника (с поправкой на коэффициенты деления тактовой частоты, обусловленные архитектурой). Т.о., если таймер тактируется опорником без деления, то при опорнике 20 MHz и времени счета 100 ms разрешение 5E-7. Для, скажем, 1.8 MHz входной это 0.9 Hz.
Прикиньте на листе бумаги в клеточку и в столбик. Интересен будет читателям форума результат.
Какие интерполяторы в цифровой шкале? Очнитесь.

rx3apf
05.04.2016, 19:00
Прикиньте на листе бумаги в клеточку и в столбик. Интересен будет читателям форума результат.

Я и "прикидывал", и делал (как раз на PIC16F628, причем больше десяти лет назад). Вполне успешно. Цифры уже назвал.



Какие интерполяторы в цифровой шкале? Очнитесь.
Никакой сложности добавить интерполятор нет, но для коротковолновых диапазонов практического применения не имеет, избыточно.

Udar
05.04.2016, 19:12
[
Не стану утверждать, что в архитектуре таймеров семейства PIC16 реализуется без внешней обвязки (хотя по-любому это простейшая логика), но вот, например, в AVR - легко.

Пример интерполятора на PIC можно ?
У Ридико интерполятор сделан на EPM

rx3apf
05.04.2016, 19:18
Пример интерполятора на PIC можно ?
У Ридико интерполятор сделан на EPM
У себя я обходился чисто взаимным счетом, с опорником 13 MHz (~1E-7 на односекундном интервале). У Леонида Ивановича есть вариант и через ADC с простой логикой (тема про GPS-эталоны), а если интересует именно чисто интерполятор и обязательно на PIC - гуглить "PICTIC".

Udar
05.04.2016, 21:10
rx3apf,

а если интересует именно чисто интерполятор и обязательно на PIC - гуглить "PICTIC".
Спасибо , ознакомился. Еще раз убедился в том что без корпусов дополнительной логики , чисто на контроллере будь то AVR или PIC интерполятор не построить.
Что конструкция от Л.И. и подтверждает.
Вы же утверждаете , что легко построите интерполятор на AVR без дополнительной логики:

Не стану утверждать, что в архитектуре таймеров семейства PIC16 реализуется без внешней обвязки (хотя по-любому это простейшая логика), но вот, например, в AVR - легко.

rx3apf
05.04.2016, 21:36
Вы же утверждаете , что легко построите интерполятор на AVR без дополнительной логики:
Вы неверно поняли. Я говорил о возможности реализации метода "взаимного счета" (reciprocal), позволяющего увеличить разрешение до Fin/(T*Fref) без использования дополнительной логики. Интерполятор, естественно, требует дополнительных внешних ресурсов.

UR4UDT
05.04.2016, 23:23
Еще раз убедился в том что без корпусов дополнительной логики , чисто на контроллере будь то AVR или PIC интерполятор не построить.
Что конструкция от Л.И. и подтверждает.
Не стоит быть таким категоричным. Например можно посмотреть DS для PIC18F46J50 раздел CTMU (Charge Time Mesurement Unit) и мнение может измениться.
Успехов в нелегком труде измерений.

rx3apf
06.04.2016, 00:53
А ведь и в самом деле любопытное устройство. Внешняя логика, правда, все равно потребуется (самый минимум), но решение существенно упрощается, практически до смешного.

И что-то мой склероз подсказывает, что где-то (PIC ? STM32 ?) я видел еще и таймеры высокого разрешения...

Slav9n
06.04.2016, 03:44
Я не совсем понимаю, что Вы имеете ввиду "поточней".
Не так выразился, я имел виду ещё один разряд добавить. Чтоб счистил до 10 герц.

Если достаточно точности 10 герц, время счета будет около 0,1 сек.
Это я понял. У меня проблемы со знаниям ассемблера как это реализовать. В частичности результата. Перевод его в десятичною систему и вывод на дисплей.

И что значит "кривая" прошивка?
Это значит, она написана под 84pic, переделана на 628, подом под двухстрочный дисплей. Кстати mplap X, вообще отказывается её компилировать выдавая пару десятков разнообразных ошибок.

UN7GCE
06.04.2016, 07:01
У меня проблемы со знаниям ассемблера как это реализовать. В частичности результата. Перевод его в десятичною систему и вывод на дисплей.Интересно читать эту тему. Топик стартёр задал простой вопрос, - как повысить разрядность до 10 Гц, а ему тут интерполяторы навешали на уши. Бедолаге.
Базовая проблема начинающих программистов это уверенность, что при написании исходника на С не нужно читать даташит на ПИК. Дескать компилятор сам сделает, что я хочу. В корне неверное утверждение. Вот поэтому всегда рекомендуют начать писать на АСМ, а потом переходить на С. Так как будет понятна структура кристалла и что с ним делать. Тем более в АСМ для ПИК всего 30 или 40 слов. Это трудно запомнить? А писать на китайском, или японском уже будет безразлично.
В выше приведенном мною примере с наращиванием счетчика до трёх регистров получаем макс. считываемое число = FFFFFF. Что соответствует 16777215. Для перевода бинарного в десятичное число есть готовые библиотеки на АСМ (для С этого не нужно). Я выкладываю подборку BIN_DEC сделанную Е.Корабельниковым. Многие его труды критикуют, но мне его заготовки хорошо помогают. Если же хотите продвинутой математики на АСМ, то прошу заглянуть сюда (http://www.piclist.com/techref/microchip/math/index.htm).

Владимир_К
06.04.2016, 07:21
Не так выразился, я имел виду ещё один разряд добавить. Чтоб счистил до 10 герц.
Что-то я Вас теперь совсем не пойму. Вы писали, что Ваш частотомер считает 1 сек. Просили уменьшить время счета. Я Вам выложил кусок кода, где это меняется. Потом Вы сообщили, что разобрались и все сделали за 30 мин. А теперь говорите, что MPLab выдает ошибки. Так в какой стадии у Вас проблема?

UN7GCE
06.04.2016, 07:30
Владимир, всё верно, он просил 10 Гц в первом сообщении.
Сейчас я скомпилировал исходник с первой страницы, - проблем нет. Всё ОК.

UR4UDT
06.04.2016, 08:06
Дескать компилятор сам сделает, что я хочу
1. Программа делает не то что вы хотите, а то что написали.
2. Ассемблер позволяет осуществить непосредственный доступ к "телу".
С - прикоснуться через халат;
языки "более высокого уровня" - похлопать попу через шубу.
Извините за аналогии, думаю, что моё мнение будет понятно.

Slav9n
06.04.2016, 08:07
MPLAB 8.92, все нормально компилирует, а MPLAB-X 3.26 находит массу ошибок.

Владимир_К
06.04.2016, 08:11
Сейчас я скомпилировал исходник с первой страницы, - проблем нет. Всё ОК.
Ну да, компилится нормально.
Теперь бы еще понять суть проблемы..

Slav9n
06.04.2016, 08:19
Суть проблемы: Сейчас - x.xxx.x, а хотелось бы x.xxx.xx. Вот и вся проблема.

Владимир_К
06.04.2016, 08:56
Суть проблемы: Сейчас - x.xxx.x, а хотелось бы x.xxx.xx. Вот и вся проблема.
Давайте по порядку. Я уже задавал вопрос, Вы не ответили. Вы уже программу изменяли или нет? Сколько времени длится цикл счета?

Slav9n
06.04.2016, 12:42
Да, давайте. Изменял, сейчас около 0.3 секунды.

Oleg 9
06.04.2016, 13:11
Суть проблемы: Сейчас - x.xxx.x, а хотелось бы x.xxx.xx. Вот и вся проблема.Точки что-ли надо сместить на один разряд влево и дописать троечку в старшем разряде? Так это к циклу счёта никакого отношения не имеет. Точки в подсчёте частоты не участвуют. Смотрите фрагмент кода, относящийся к выводу на индикатор.

UN7GCE
06.04.2016, 13:14
Итак, я должен сказать, что был неправ, когда написал, что алгоритм в этом исходнике применен от 84 ПИКа. А по сути скажу, что данный частотомер вряд ли стоит применять как шкалу трансивера. Он создан как прибор, со сменой цены деления (разряда).
Таймер T1CON имеет разрядность FFFF. Что позволяет записать предельное число 65535. Далее выставляется флаг переполнения и счет начинается сначала. Так вот, если нет переполнения частотомер считает 1 сек. Цена разряда 1 Гц, при переполнении происходит смена длительности счета на 0,1 сек и цена разряда становится 10 Гц. При очередном переполнении смена на 0,01 сек и цена разряда становится 100 Гц.
Я попробовал запустить данную прошивку в Протеусе, малые значения частоты проходят, далее трудно судить, что будет дальше. Смотрите и судите сами.
Конечно, под эту схему вполне можно написать прогу под шкалу с ценой в 10 Гц. С учетом ПЧ, да или нет. Но кто это будет заново писать?

Slav9n
06.04.2016, 13:24
Итак, я должен сказать, что был неправ, когда написал, что алгоритм в этом исходнике применен от 84 ПИКа
Как раз Вы были правы, данная прошивка изначально под 84 pic.

rx3apf
06.04.2016, 13:32
Как раз Вы были правы, данная прошивка изначально под 84 pic.
Прошивку не смотрел, но по схеме из первого поста очевидно, что нет - входной сигнал поступает на вход таймера 1 (16-битного), а 90% самоделок, берущих начало от 54/84, используют таймер 0 с досчетом прескалера (16-битного таймера там вообще нет).

UN7GCE
06.04.2016, 13:33
Как раз Вы были правы,
Может быть. По крайней мере в исходнике я вижу нестыковку со схемой. Нет указаний на работу пищалки (RB4-RB5). Вероятно она первоначально предназначалась как индикатор смены разряда.

Владимир_К
06.04.2016, 14:52
Смотрим сюда:
http://www.cqham.ru/lcmeter3.htm
и сравниваем. После сравнения можно видеть, что достаточно поменять контроллер на PIC16F84, добавить этажеркой платку с недостающими деталями и.. получим многофункциональный прибор. Одно плохо, два провода индикатора не туда подключены. Придется поменять:smile:. Но если просмотреть ту ветку, то, возможно кто-то и контролер уже заменил на 628.

UN7GCE
06.04.2016, 15:13
и.. получим многофункциональный прибор.Всё уже сделано (http://www.cqham.ru/forum/showthread.php?11744-FCL-meter-FAQ-%C2%EE%EF%F0%EE%F1%F B-%E8-%EE%F2%E2%E5%F2%FB-2&p=481642&viewfull=1#post48164 2) до нас! :-P

vadim_d
06.04.2016, 23:08
Нетли у кого исходника на С частотомера желательно с lcd?
Можете еще поглядеть мой вариант частотомера на прескалере с досчетом (классика) для антенного анализатора VK5JST https://sourceforge.net/projects/ant-anl/ . Там и вывод на дисплей, и математика, может что и пригодится, все на Си (https://sourceforge.net/projects/ant-anl/)

Slav9n
08.04.2016, 19:26
Обнаружилась еще одна проблема. При измерение выше 6МГц, частомер начинает завышать показания на два кГц. Если способ решить данною проблему?
Пытался решить её с помощью "nop" , не получилась. Посмотрите опытном взглядом. Может вы что подскажете.
Фрагмент кода, считающей десятки мгц:
Count_MHz2
movlw B'00010110'
movwf T1CON
clrf FrLow
clrf FrHig
bcf PIR1,0
clrf TMR1H
clrf TMR1L
bsf T1CON,0
movlw .250
movwf Temp3
decfsz Temp3,1
goto $-1
movlw .250
movwf Temp3
decfsz Temp3,1
goto $-1
movlw .164
movwf Temp3
decfsz Temp3,1
goto $-1
nop
nop
nop
nop
bcf T1CON,0
movf TMR1H,0
movwf FrHig
movf TMR1L,0
movwf FrLow
movlw B'00000110'
movwf T1CON
movlw .3
movwf SelFr
return

Oleg 9
08.04.2016, 20:43
При измерение выше 6МГц, частомер начинает завышать показания на два кГц.А какая разница, Вы же ясно написали в #33 (http://www.cqham.ru/forum/showthread.php?32830-%D0%9F%D1%80%D0%BE%D 1%81%D1%82%D0%BE%D0% B9-%D1%87%D0%B0%D1%81%D 1%82%D0%BE%D1%82%D0% BE%D0%BC%D0%B5%D1%80-%D0%BD%D0%B0-pic16f628a&p=1239711&viewfull=1#post12397 11) сообщнении
Мне все ровно выше 3.8МГц и ниже 3.5МГц измерять не нужно.:smile:

Slav9n
08.04.2016, 21:15
Ну во первых, любопытно. Во вторых, в трансивер был добавлен диапазон 40 метров и возникла необходимость измерять частоту в два раза выше. Как я не пробовал не получилось компенсировать эти два килогерца. Не получится, разогрею феном кусок платы с частотомером, счищу стамеской его и сделаю нормальною школу из постов выше! Задолбала эта шкала вместе с ассемблером!:-(

Владимир_К
08.04.2016, 21:46
Время измерения в указанном фрагменте (от включения до выключения счетчика) составляет ровно 2 миллисекунды. Формула Т=250*t+250*t+164*t+ четыре команды nop = 2 миллисек.. Подайте на частотомер известную частоту, измерьте. Определите отношение. Измените цифры. Если завышает показание, значит надо уменьшить время счета. Из формулы определите t.
Но надо все-же просмотреть программу. Не понятно, почему 2 мсек. Значит где-то возможно или делится цифра частоты, или что другое. Деление на 2 в Ассемблере делается очень легко - сдвигом числа вправо на один разряд.
С таким временем счета частотомер будет считать до частоты больше 30 мгц. Учитывая, что счетчик считает до 65536. При частоте 10 мгц в счетчике будет цифра 20000.

UN7GCE
09.04.2016, 06:10
Не получится, разогрею феном кусок платы с частотомером, счищу стамеской его и сделаю нормальною школу из постов выше! Задолбала эта шкала вместе с ассемблером!Делать этого не нужно. На этой плате достаточно залить нормальную прошивку и получится весьма приличный частотомер. Ассемблер прост как валенок, осталось терпение приладить. По поводу 2 кГц - попробуйте поиграться R2 в сторону увеличения.

Slav9n
09.04.2016, 07:04
Не знаю сколько ещё терпения нужно, пробовал всё, он или на 2кГц завышает или на 1 занижает. Да в протеусе он считает всё хорошо, но в железе получается такая вот фигня.

UN7GCE
09.04.2016, 07:42
Не знаю сколько ещё терпения нужно...Хорошо, попробую сегодня глянуть исходник на предмет переделки под частотомер с ценой деления 10 Гц. Надписи Fin: и Frequncy meter удалю. Оставлю только по середине цифры в верхней строке типа 30000.15

Slav9n
09.04.2016, 07:57
UN7GCE, очень благодарен Вам! Буду с нетерпение ждать.



Надписи Fin: и Frequncy meter удалю. Оставлю только по середине цифры в верхней строке типа 30000.15
Как Вам удобней будет. Мне главное чтоб считал.

UN7GCE
09.04.2016, 13:35
Slav9n, вот такой получился у меня дисплей. Прошивка усохла почти в два раза. Нужно пробовать в живую. Посмотрите личку.

UN7GCE
10.04.2016, 11:25
...вот такой получился у меня дисплей.С этим вариантом получился обычный простенький частотомер, который считает (по измерениям Slav9n) до 80 МГц. С точностью до 10 Гц и временем обновления счета 3 раза в сек. Схема на первом посту. Поскольку внутренние подтягивающие резисторы ПИКа отключены, при настройке следует путем подбора R2 выставить напругу на RB6 равное половине Vdd. В архиве прошивка на этот тип частотомера. Для Slav9n сделана слегка измененная прошивка, которая отличается только внешним видом дисплея.

Slav9n
10.04.2016, 13:50
От себя добавлю...
Входная часть:
231153
R3 подбирается до половины напряжения источника питания на коллекторе транзистора VT2.
Моделирование в Proteus (генератор 80МГц):
231154

UN7GCE
11.04.2016, 05:38
Выше я писал, что второй вариант отличается способом вывода цифр на дисплей. В предыдущем посту Slav9n показал как это выглядит в Протеусе (жаль, что не в живую). При нулевом показании десятков МГц этот разряд гасится.
Т.е будет выглядеть как х.ххх.хх kHz, или хх.ххх.хх kHz
Для этого варианта прошивка в архиве. Может кто оформит ещё схему (печатку) в сплане (лейауте)?
ЗЫ В качестве дисплея допускается применить дисплеи формата 1601, 1602.

Slav9n
11.04.2016, 08:11
(жаль, что не в живую)
Не получается в "живую", как не крутился, чифор не видно.

Т.е будет выглядеть как х.ххх.хх kHz, или хх.ххх.хх kHz
Да её чуть подкорректировать, вместо kHz написать MHz, а то выглядит как будто что он меряет до 99 kHz c точностью до сотен тысячных долей.

UN7GCE
11.04.2016, 09:50
...чифор не видно.Скорее всего не выставлена контрастность.
На схеме это R6.

Да её чуть подкорректировать... Вот когда увижу изделие в живую, тогда и поговорим.

Владимир_К
11.04.2016, 10:27
Выше я писал, что второй вариант отличается способом вывода цифр на дисплей.
Быстро Вы с ним расправились.. Я, в первой своей цифровой шкале, неделю наверное время счета подбирал. Там правда динамическая индикация была и ветвления. Занятие было довольно муторное.
Протеус здорово помогает? А то я все по старинке, на железе. Наверное нужно поставить?

Slav9n
11.04.2016, 11:41
UN7GCE, Контрастность выставлена, просто камере с телефона...

Вот когда увижу изделие в живую, тогда и поговорим.
Ну смотрите! Как Видно что? И, мне нет...:smile:
231241
Вот ещё...
231242

Забыл. R4 где-то 200 - 300 Ком, а не как 27, указанных в схеме.

UN7GCE
11.04.2016, 12:32
Быстро Вы с ним расправились...Спаси бо, Владимир. Я на свою первую шкалу тоже много времени убил ;-), пока въехал во все тонкости.
А здесь пришлось больше вырезать, да причесывать. Первоначальный вариант написан ужасно!
Протеус помогает, но верить не всегда ему можно. Например, проги, где есть прерывания, не всегда идут корректно. Но, когда нужно проверить что то простенькое, проще на экране увидеть. Своего рода симулятор.

Ну смотрите! Как Видно что?Вот и хорошо! Яркости много, как я понимаю. А то я, грешным делом, стал подозревать, что работал напрасно. Вот теперь можно и подумать о переделке. Предлагаю слово "кГц" убрать совсем, оставить только цифры.
Типа ххххх.хх

Slav9n
11.04.2016, 12:56
Яркости много, как я понимаю.
Я поставил 47ом, smd подбирать лень было.

А то я, грешным делом, стал подозревать, что работал напрасно.
Вы не представляете, как мне пришлось изощрится, чтоб сделать эти фото. Приклеил кусок тонировке к камере тогда цифры стали немного видны, плюс к тому делал фото с камеры ноутбука.:smile:
Не точки нужны так удобней. Да и надпись оставить нужно только изменить она хоть как-то заполняет собой пустоту на двух строчном lcd.

UN7GCE
11.04.2016, 13:39
...неделю, наверное, время счета подбирал.Но вот тут мне непонятно. Берётся обычное кольцо по формированию задержки. К примеру на 100 mS. И в него врезается работа с таймером. Время кольца подгоняется и контролируется в самом MPlab'е (Stopwatch) . При работе с динамической индикацией лучше использовать Timer0. Он работает независимо от всех остальных узлов. Т.е. Timer0 для динамики, а Timer1 для счета. Естественно это не для PIC16F84. Чем мне нравится счетчик на ПИКе - скоростью. Моя первая ЦШ работала до 70МГц. Вторую я не измерял, - работал дистанционно. Этот частотомер, со слов Slav9n, до 80 МГц. Атмега это недоступно. У меня есть свой старенький частотомер, но габаритный. Вот я уже давно задумываюсь состряпать себе приборчик частотомер типа Ч3-34 (по функции), да всё никак не могу определиться, что мне в нём нужно :smile:

...как мне пришлось изощрится, чтоб сделать эти фото... ...Не точки нужны - так удобней.Оценил сей труд! :ржач:
Вячеслав, давайте точно определимся, что нужно для этого частотомера. Это шкала, или частотомер? Отсюда и требования. Если частотомер, то точка должна быть одна. С герцами, или килогерцами. Если шкала, то, как мне кажется, кроме пары точек, вообще ничего не нужно. Подумайте, время есть.

Slav9n
11.04.2016, 13:55
Оценил сей труд!
Пойду отдохну...:ржач:

Что тут думать?! Это шкала. Мне более солидней кажется с MHz смотреться будет.
Но это на Ваше усмотрение. Если не сильно придется прошивку "ковырять" сделайте как я прощу, ели нет, мне и так пойдет.

Владимир_К
11.04.2016, 14:19
Время кольца подгоняется и контролируется в самом MPlab'е (Stopwatch) .
Это именно и было на PIC16F84.

alexis
11.04.2016, 14:28
У вас эта шкала реально до 80 МГц меряет с формирователем на 2-х транзах по схеме?

Slav9n
11.04.2016, 14:36
alexis, без него, сразу сигнал (меандр) подавался на pic.

UN7GCE
11.04.2016, 14:41
Это именно и было на PIC16F84.На этом ПИКе труднее сделать счётчик. Таймер однобайтный, нужен пределитель, управления нет, короче мороки больше. У меня лежат штук 10 таких ПИКов. Сую во всякую чепуху. А работает прекрасно!

UN7GCE
17.04.2016, 09:48
Что тут думать?! Это шкала.Поскольку мне нужно было решить некоторые свои собственные задачи, решил я и эту конструкцию проверить собственноручно. Быстренько вытравил платку и провёл некоторые эксперименты. О чём и докладываю...
Прежде всего вопрос точности. У меня есть четыре 4 МГц кварца. На вход частотомера подавалась частота 20 000 000 Гц. Все 4 кристалла дали погрешность в +/- 1кГц в среднем.
Отсюда вывод: для точного считывания необходима подгонка либо программно (что усложнит и программу и конструкцию), либо триммером на ножке 16.
Частотные характеристики. Проверялась граничная частота при которой происходит уверенное считывание. Без полевого транзистора на входе она составила 50 МГц. Но высокая цель не ставилась и возможно частоту считывания можно повысить, применив другой транзистор, подобрав V на коллекторе (у меня лучший результат был при V=2,7)
Изменения коснулись и прошивок. Так в вариант частотомера введен мигающий треугольник при счете. В варианте шкалы обнаружена грубая ошибка по гашению незначащего нуля - исправлено. Убрано слово "кГц"
В архиве подработанная схема, обе прошивки. Ну и фото общего вида.
P.S. Работа проводилась на дисплее формата 2002.

ra3rbe
17.04.2016, 11:39
На этом ПИКе труднее сделать счётчик. Таймер однобайтный, нужен пределитель, управления нет, короче мороки больше.
Ничего трудного нет в PIC16F84A. Входная частота подается на предделитель, а программа в цикле считает переполнения предделителя. Подсчет переполнений выполняется в двухбайтовую переменную, да плюс третий байт предделителя.... Счетчика теоретически должно хватать до 167 мгц.
Основная трудность - это выставить точно время подсчета переполнения и нигде не потерять перенос. Труднее это было сделать с светодиодным индикатором, которому во время счета нужно было регенерацию делать, а с современными "умными" индикаторами никакой мороки нет.
Хотя не буду отрицать, что 628-й более продвинутый контроллер.

UN7GCE
10.05.2016, 05:16
Эта же ЦШ, но с тремя входами выложена здесь. (http://www.cqham.ru/forum/showthread.php?33088-%D6%E8%F4%F0%EE%E2%E 0%FF-%D8%EA%E0%EB%E0-%C0%EB%EC%E0%F2%E8%E D%F1%EA%E0%FF-(%D6%D8-%C016)&p=1255225&viewfull=1#post12552 25)

tvfg
05.10.2016, 20:19
Можно повысить частоту с помощью микросхемы SAB6456 http://full-chip.net/uploads/posts/2012-12/thumbs/full_chip_net_sab.gi f

ua3yhg
06.03.2017, 10:10
Готовый наборчик на Али, пик прошитый , печатка отличная, металлизированная можно и как частотомер и как ЦШ использовать . Только немного доработать , вход сделать и всё.https://www.youtube.com/channel/UCG-_jbBgOU4t0CRknhtzTNg