Перейти к содержанию

Частотомер На 628-ом Пике


a_sergeevich

Рекомендуемые сообщения

Решил для более углубленного изучения программирования пиков написать прогу частотомера,

но не по тем алгоритмам для 84-го пика, которых целая куча в сети а по какому нибудь другому.

Смысл такой, таймером TMR0 задаём выдержку времени счёта, а таймером TMR1 считаем импульсы.Почему я выбрал такой способ, а не стал измерять частоту TMR0 ? Всё просто. TMR1 у нас 16 битный т.е считает до стольки же, что и TMR0 с установленным прескалером 1:256, но у него оба регистра TMR1H и TMR1L доступны для чтения и записи, а вот у TMR0 из прескалера ничего прочитать нельзя поэтому нужна подпрограмма досчёта, а так как данный частотомер задумывался именно в образовательных целях я и решил избавится от ПП досчёта и написать прогу без неё.

Вот, что получилось: Chastotomer.rar

Правда есть косяк, который я пока никак не решил, заключается он в том, что частотомер занижает частоту, на частоте 150 Кгц погрешность составляет -90 Гц. А так как я ещё начинающий пиколоматель :rolleyes: то прошу более продвинутых людей помочь мне эту проблемку решить.

Прошу не забывать, что проект образовательный.

Да, прога написана на microC.

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

а по какому нибудь другому.
Да обычный способ у вас, считаете кол-во импульсов за секунду.
на частоте 150 Кгц погрешность составляет -90 Гц
Увеличте частоту кварца, ошибка уменьшиться. МК просто не успевает уже. Между прерываниями маленькое время получаеться.
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Увеличивал до 20 Мгц, погрешность не изменилась ни на герц. До 1000 Гц она составляет стабильно 1 Гц с 2000 Гц - 2 Гц, ну и так далее. Где-то косяк в проге, а где не соображу. Да все проверки делаю в протеусе.

То, что способ обычный я не спорю, просто реализацию в МК я выбрал не такую как везде в основном используют т.к в сети частотомеры построены в основном на 84-м пике, а у него 1-н таймер.

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А она и не изменится...

Смотрите что Вы написали:

Прескалер при TMR0 = :8

Далее пересчет самого таймера = х256

Далее пересчет программного счетчика = 488

Умножаем и получаем: 8х256х488= 999.424 Таким образом при кварце 4МГц и входном периоде прескалера 1 мкс имеем период 0,999424 с.

Умножаем на 150 000 гц и имеем 149 914 гц, т.е искомую ошибку в 86 гц....

Если будет у счетчика 489, то общий пересчет = 1001472, тоже лажа...

Так не делают... Нужно предустанавливать сам таймер в ПЕРВОМ ЗА ИЗМЕРЕНИЕ прерывании, тогда и точность можно регулировать хоть с шагом в 8 мкс, т.е с периодом на выходе прескалера... Не хватает 576 мкс, т.е ровно 72 тика таймера, таким образом ставим счет до 489, но при пуске в TMR0 вписываем 256-72 = 184 ... ессно все десятичное...

ea4ed51b6f10.jpg

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Вобщем значит получаеться секунда не ровная.

Тогда да, нужно вместо

TMR0 = 0; //инициализируем TMR0 начальным значением

Писать

TMR0 = 184;

И за место 488 считать до 489.

А вообще, я бы сделал ровную секунду на TMR1 + програмный счётчик и ловил-бы INT прерывания.

На много проще получилось-бы.

Ссылка на комментарий
Поделиться на другие сайты

Ну положим ГРАМОТНЕЕ считать ПЕРИОД, а потом делением находить частоту, тогда частотомер будет БЫСТРЫМ. А так нет разницы - что в лоб, что по лбу... Можно таймеры по любому использовать. Весь цимес контроллера в МАКСИМАЛЬНОМ использовании вычислительных ресурсов, а так ставим не самый дешевый чип под примитивную задачу максимум для 12F629 с индикатором под I2C...

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Всё переделал как подсказали, УРА работает, блин всё оказалось проще, надо со всеми подсчётами получше разобраться.

my504

Может написали бы кратенькое пособие как правильно считать все эти такты задержки, для таких как я :)

Мужики я бы Вам пиво поставил бы, чесно я с этой ошибкой уже дня 3 долбаюсь, а Вы мне за час всё исправили и рассказали как надо и как не надо делать, БОЛЬШОЕ Вам СПАСИБО.

Да кстати вместо числа 184 эксперементальным путём было подобрано число 188, теперь на 120 Кгц погрешность равна 0. Да и на остальных диапазонах 0 только иногда показания могут на еденицу вниз прыгнуть. но это на низких частотах.

Вот исправленные файлы прошивки и исходник: Chastotomer.rar

Файл проекта для протеуса в предыдущем вложении.

my504

Да я не ставил перед собой задачу сделать готовое устройство, у меня задача чисто обучающая, я думаю многим будет интересно поучится. Просто когда обсуждаются такие устройства, а именно программная часть, то узнаёшь очень много нового и полезного.А я просто хотел разобраться с таймерами вот и всё, следующим на очереди идут АЦП, модуль захвата/сравнения, короче вся переферия. Просто хочется на реальных примерах со всей этой начинкой разобратся на примерах построения реальных устройств с 0 и до финала. Вот.

А, что до камня, который я применил, так просто у меня два таких есть и я думал, что мне придёт по почте ЖКИ к тому времени как я чего-нит напишу, чтобы проверить в железе, но ЖКИ до сих пор нет, поэтому все проверки только в протеусе.

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

А это ЛАТЕНТНОСТЬ при входе в прерывание + нюансы компилятора дают отклонение от 184, если писать в АСМе, то все будет без подгонки тип-топ...

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

my504

Ну всё же подумайте, чтобы сделать маленький текстовый файлик с методой подсчёта всех этих тактов, а то есть у меня калькулятор, но вот то, что Вы мне рассчитали он не считает :), а вот систематизированной какой-то инфы я не встречал везде кусками и не всегда понятно.

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

Есть неисчерпаемый кладезь инфы на сайте Микрочипа: http://www.microchip.com/stellent/idcplg?I...amp;nodeId=1469

ЛЮБЫЕ мои жалкие потуги проинформировать лучше будут наивны. Гораздо эффективней помогать советом ПОСЛЕ того, как Вы ознакомитесь (в меру своих знаний) с этими источниками и я с готовностью объясню, что там Вы не поняли... (если конечно смогу - я тоже не все знаю...)

Я очень часто обнаруживаю на личных сайтах специалистов ПРЯМУЮ КОМПИЛЯЦИЮ ТЕКСТОВ с Микрочиповских аппноутов (и даже без ссылок на первоисточник), но зато с переводом на русский. Так что ничего полнее и лучше не найти.

Каждая задача имеет множество решений с совершенно разной мотивировкой и составить универсальную табличку на все случаи как то не получится.

Я скептически отношусь к ПРАКТИЧЕСКОЙ (не учебной) разработке частотомеров. Дело в том, что внешняя простота реализации скрывает истинные проблемы при проектировании и изготовлении ДЕЙСТВИТЕЛЬНО востребованного и ТОЧНОГО прибора.

Частотомер требует отдельного ОЧЕНЬ ТОЧНОГО и желательно термостатированного кварцевого генератора (а не кварца на ногах МК) Интервал счета сформированный программным путем (даже с использованием прерываний) для таких целей совершенно не годится. Иначе будет просто шкала для радиоприемника... Реальные ПОЛЕЗНЫЕ применения частотомера сводятся к измерениям частоты ДРУГИХ стабильных (в том числе и кварцевых) генераторов. И мерять частоту одного кварца, опираясь на другой такой же СОВЕРШЕННО НЕПРИЕМЛИМО...

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

А это ЛАТЕНТНОСТЬ при входе в прерывание + нюансы компилятора дают отклонение от 184, если писать в АСМе, то все будет без подгонки тип-топ...

По-моему, ошибка, о которой идет речь, возникает из-за:

"... После записи в TMR0 приращение счетчика TMR0 запрещено два следующих цикла. Пользователь должен скорректировать эту задержку перед записью нового значения в TMR0..."

из мануала.

Ссылка на комментарий
Поделиться на другие сайты

my504

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

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

А сейчас я просто учусь и со мной учатся другие. Как говорится учение свет, а не учение тьма :)

Ещё раз Вам спасибо за дельные ответы.

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

a_sergeevich

Как пример из собственного опыта: в качестве учебной удобно использовать задачу реализации частотомера при работе с ПЛИС. С одной стороны изучение схемотехники и применение регистров, счетчиков, делителей, с другой - применение современнойц элементной базы. А для МК все-таки лучше "подергать ногой" в широком смысле (поуправлять внешним объектом) или решить какую-нибудь коммуникационную задачу с применением какого-нибудь известного протокола обмена. Такие задачки больше для МК подходят. ИМХО.

С уважением,

Ваган Саруханов

Ссылка на комментарий
Поделиться на другие сайты

А это ЛАТЕНТНОСТЬ при входе в прерывание + нюансы компилятора дают отклонение от 184, если писать в АСМе, то все будет без подгонки тип-топ...

По-моему, ошибка, о которой идет речь, возникает из-за:

"... После записи в TMR0 приращение счетчика TMR0 запрещено два следующих цикла. Пользователь должен скорректировать эту задержку перед записью нового значения в TMR0..."

из мануала.

Все супер! Только одно маленькое НО.... Перед TMR0 стоит ПРЕСКАЛЕР с пересчетом ВОСЕМЬ. И ПЕРВОЕ ПРИРАЩЕНИЕ возникнет на таймере не ранее чем через 8 мкс.... Нету никакой задержки....

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Народ, небольшое отклонение от темы, но всё же, сегодня мне наконец-то пришла по почте книга: автор Сид Катцен "PIC микроконтроллёры. Всё, что необходимо знать." Издательство 2008 года .Углубленно пока не читал, но пролистал объём у неё 640 страниц, так вот первое впечатление, книга просто супер в ней есть ответы почти на все вопросы которые меня интересовали и которые я только собирался задавать.Изложение идёт с азов, куча примеров + задания для самостоятельной проработки материала, основной язык асм, но рассматривается и CCS компилятор языка Си,рассматриваются МК среднего семейства и 18-й серии, короче советую всем начинающим.Стоит правда с доставкой почти 900 руб., но она того стоит.

Если чего не ругайтесь, это не в коем случае не реклама.

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

wagan

Может ПЛИС и хорошо, но не в моей деревне и удалённости от цивилизации, я по пикам тут инфу с трудом собирал, с моим супер дорогим супер медленным инетом 1 Мб проблема скачать, поэтому пока только пики и ничего кроме них, надо с ними сначала разобратся, а то за всё хватася и в итоге ничего не выйдет.

А про частотомер я уже писал, что я не делал реальное устройство, хотя хотелось бы, но у меня нет ЖКИ, это чисто образовательный проект, т.к он позволяет поработать и с таймерами, и с прерываниями, выводом на ЖКИ.

Если взять другой пик ну там 16F877 то можно расширить прогу добавить вольтметр, термометр, частотомер вот и получится офигенный учебный проект в создании которого будут принимать участие новички, а профи будут наставлять и направлять их действия.Было бы неплохо.Составили бы ТЗ, определились с языком, и погнали с малого и до великого.Я на одном форуме такое видел, но мне что-то не очень проект понравился и последовательность, каждый на своей волне с заумными речами и высказываниями, там у них язык Си, компилятор CCS, хотя мне ближе microC, какой-то он более дружественный :)

Ух,замучал я Вас наверное своми рассуждениями :)

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

a_sergeevich

Может ПЛИС и хорошо, но не в моей деревне и удалённости от цивилизации, я по пикам тут инфу с трудом собирал, с моим супер дорогим супер медленным инетом 1 Мб проблема скачать

Мне как-то от этих слов стало не по себе....короче...будете в Москве, найдете меня по сайту, даю кит PldLab бесплатно без всяких вопросов и оговорок, инфу по этой железке найдете гуглом, чтобы здесь рекламу не плодить ссылками. Это очень старая поделка, но тем не менее, содержит и ПЛИС и МК.

Удачи!

С уважением,

Ваган Саруханов

Ссылка на комментарий
Поделиться на другие сайты

кому интеерсен Сид Катцен

Ссылка для скачивания книги в djv формате - 10Мб, сканы офигенные.

_http://publ.lib.ru/ARCHIVES/K/KATCEN_Sid/PIC-mikrokontrollery.(2008).[djv].zip

Изменено пользователем krant
Ссылка на комментарий
Поделиться на другие сайты

возникнет на таймере не ранее чем через 8 мкс....
И + 2 машинных цикла :)

Алекс! Даже речь не о чем... Пускай и есть 2 цикла, но НЕ НАДО ПРЕДУСТАНАВЛИВАТЬ таймер в КАЖДОМ прерывании от него. Достаточно сделать это ОДИН раз и автор вопроса, по моему, так и сделал... впрочем я не проверял, но если это не так, то это ЕЩЕ ОДИН БАГ программы, пусть и не столь заметный...

Так что 2 мкс на фоне неконтролируемой автором привязки измерительного интервала и интервала счета входных импульсов (счетчики не могут быть запущены строго синхронно) - ЕРУНДА ПОЛНАЯ... Кроме того, асинхронность внешнего источника импульсов дает неопределенную (хотя и в небольшом интервале) латентность при входе в прерывание... Я как раз и говорил об особенностях компиляции и латентности в этом смысле и необходимости контроля за выходным кодом.

ЗЫ. А_Сергеевичу стоит посмотреть свой код на предмет выяснения упомянутого мной бага, а не махать на него рукой, выбирая ошибку счета заплаткой в виде нерасчетного коэффициента... Раз уж есть такое стремление к учебе, нужно его логично и реализовывать...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Пускай и есть 2 цикла, но НЕ НАДО ПРЕДУСТАНАВЛИВАТЬ таймер в КАЖДОМ прерывании от него. Достаточно сделать это ОДИН раз и автор вопроса, по моему, так и сделал.

Да именно так и сделано таймер предустанавливается только один раз, если бы были какие баги я бы на них рукой не махал,добил бы до конца тем более с такой поддержкой. Поэтому погрешность составляет 0 Гц в диапазоне до 120 Кгц достольки мне удалось проверить, кто может скидайте на макете и проверте в железе.

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

Период нужно мерять, а не частоту... Для измерения периода при 4 МГц кварце тик таймера будет 1 мкс. Значит достаточно ОДНОЙ секунды на измерение частоты 1 Гц. А затем делением находим частоту...

Схема простая:

Измеряемый сигнал через TMR0 или вход внешнего прерывания управляет (через обработчик прерываний) запуском и стопом(чтением) TMR1 и, если необходимо, еще и дополнительным каунтером прерываний от TMR1. На вход первого таймера подаем системные тики с периодом 1 мкс (ну или каким нужно, смотря какая разрешающая способность нужна). Обращаю внимание:

НЕ ТОЧНОСТЬ, а РАЗРЕШАЮЩАЯ СПОСОБНОСТЬ!!! Точность зависит от другого.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Алгоритм ясен,попробую попозже реализовать, но пока болею нехило так и ничего не соображаю :)

Может ещё кто из начинающих подключится, начнёт, а потом вместе будем шлифовать исправлять прогу, а ?

Только надо клич кинуть и я думаю народ подтянется. :)

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...