Какая формула? предделитель напрямую подключен к выводу контроллера и может работать на максимальной скорости которую ему позволит напряжение питания и быстродействие логики. Это в другом режиме вход таймера тактируется Fosc/4 фиксирующую значение входа в промежуточном триггере, тогда да при превышении частоты получитcя черти что. Каким тогда образом частотомер(PIC16F628) измерил частоту собственного кварца?
а выше уже писано о данных для входного сигнала для счетного входа picа (иначе читай оригинальный datasheet самостоятельно) параметры входных импульсов там четко оговорены, хотя это не ограничивает диапазон счета всего устройства, но только за счет специальных внешних схемотехнических хитростей
А чего там у пика?... предделитель на максимум 8 … вроде уже интереснее, там еще асинхронный вход счетных импульсов… ИК … а вот вам(нам) фигура17-8 с табличкой 17-8 (DS40044G-page 147-148) для разнообразия… навскидку в наилучшем режиме период входного сигнала 30+60ns=90ns (11111111,11Гц) т.е теоретически (* These parameters are characterized but not tested. ) 11111КГц еще нацарапать можно… И НЕ ВЫШЕ… Остальное можно получить с применением внешних управляемых предделителей, либо другими «хитрыми» способами (а-ля измерение промежуточных частот…)
Страницы 147-148 из оригинального даташтита DS40044G:
Смотрим табличку, с прескалером = 256 допустимый период входного сигнала получается больше 4нс(при тактовой частоте контроллера в 5Мгц Tcy = 4/5000000, N = 256) - это явно гораздо больше возможностей аппаратной части, так что максимальная частота в этом случае ограничена быстродействием аппаратной части - ограничениями на минимальную длительность импульсов в 10нс+10нс(так и написано что такая частота не тестировалась). Судя по таблице, других ограничений нет. откуда тогда взялся расчет на максимум в 11Мгц? Судя по всему, технически контроллер сможет считать до 50Мгц. Но это уже край...
так табличка-то определяет сигнал на входе прескалера, а не на выходе... да и в табличке писано синхронный режим +прескалер 15/15ns = периоду в 30ns или частота 33 333 333Гц (33 333КГц) а для асинхронного режима 30/30ns = периоду в 60ns или частота 16 666 666Гц (16 666КГц) да и то это обозначено как предельно возможное зато ниже указано как более 20ns, "но лучше руководствуйтесь формулой Tcy+40/n" а Tcy это частота главного генератора деленная на 4 (при тактовой 20МГц Tcy=200ns (5МГц)) так что о 50МГц без 20МГц кварцевого генератора еще помечтать не вредно правда если по входу Т/С0... возможно и до 50МГц добраться, но опять же кварц требуется, да и Т/С0 нужно будет периодически перезагружать... иначе модуль счета предделитель+таймер=65536 периодов всего... для тех же 50 МГц надо посчитать 50000000 периодов - это 762,939453125 переполнений (прерываний) каждое из которых погрешность добавляет легче считать длительность между двух входных импульсов но там ограничение 1 Тcy... есть правда возможность уменьшать длительность измерительного окна с введением в показания соответствующего множителя, но тогда и точность соответственно падать будет - столько разрядов индикатора просто без надобности
ну как же, берем в табличке строки с прескалером... что там написано? минимальная длительность "0" импульса - 10нс, минимальная "1" - 10нс. Вроде бы все понятно без каких либо "Если". Ну, со сноской что работа с такими импульсами не проверялась - тобишь 10нс - это уже на страх и риск. А 15 стало быть еще нормально.
Дальше, смотрим колонку с периодом, и видим что: минимальный период наибольшее из 20нс или (Tcy + 40)/N. Для частоты кварца в 5Мгц Tcy = 4/5000000 = 800нс, для прескалера N = 256: (Tcy + 40)/N = 3,28нс...
наибольшее из чисел 20 и 3,28 ...
Речь кстати идет о TIMER0, и табличка определяет предельные характеристики сигнала на его входе.
но входной вывод пропустит только период 20ns и не более делить - то его и будем, а никак не "3,28нс" ( в той табличке указано период входного сигнала более 20ns или рассчет по формуле для более низкой частоты/более длительного периода (подразумевается, что в этом случае Tcy- это период сигнала на входе T0CKI, а не тактовая МК деленная на 4) ...буржуинская хитрость)
да и обработка внутренним компаратором дает также порядка 150ns дополительного времени
Та формула определяет допустимый период сигнала на входе предделителя так чтобы на его выходе(на входе счетчика) период был больше Tcy+40нс, ну и само собой быстрее чем на 20нс вход предделителя реагировать не может - ограничение быстродействия вентилей по примененной технологии. поэтому в табличке выбор между 20 или формула, в зависимости от тактовой частоты формула может дать бОльшее значение чем 20нс.
В общем получается, что "ПИК" может обработать сигнал на несколько МГц больше "Тиньки". А если использовать пропускную способность порта по максимуму, тогда можно выбрать меньший коэффициент внешнего делителя и следовательно у прибора будет выше точность... Верно я понимаю?
Но если использовать в качестве внешего делителя 193ПЦ1, то частоту 1 гГц он поделит до 1562,5 кГц, а с ней уже любой контроллер справится. Тогда возникает вопрос: а стоит ли вообще применять этот ПЦ1, или лучше достать другой более современный прескалер с коэффициентом к примеру 128 ?
можно согласится на 25МГц (максимум 50МГц) в режиме "стандартного" подсчета входных импульсов для пика, однако гораздо интереснее выглядит использование модуля "захвата" - но та же задница - где-то должен формироваться интервал измерительного окна, да еще о обработчике дисплея/клавиатуры забывать не стоит - итого минимум 3 различных источника прерывания на одном векторе со стеком в 8 вложений... а вот на тиньке захват более интересен - эталонный квант равен не 200ns (5МГц) а уже 50ns (20МГц)... внешний предделитель предпочтительно кратным 10 (на худший случай 2), да и линий управления прибавится
Кнопки нужны будут только если захочешь показать период, или длительность импульса. Если конечно предусмотреть это все. Да кнопки это все фигня - их можно считать уже по факту, после измерения или вместе с индикацией когда контроллер не занят измерением.
А на счет максимальной частоты счета контроллером - надо отдавать отчет что формулы показывают идеализированный вариант, а на практике емкость монтажа и индуктивность подводящего провода может внести свои коррективы.... и скажем, даже 30Мгц он уже не вытянет. напряжение понизишь до 4.5 - быстродействие вентилей снизится, опять получишь облом. Разброс параметров быстродействия вентилей тоже может внести свои коррективы - благодаря этим особенностям конкретно ваш экземпляр конструкции работать будет а у других не заработает на высоких частотах потому что наложится сразу несколько "неприятностей".
Возвращаюсь к разработке частотометра. За период отсутствия я изучил книжку Юрия Ревича "Пракитческое программирование МК AVR на ассемблере".
Взяв за основу примеры из книжки и кое-что добавив от себя, написал тестовую прогу для ATtiny2313, с тактом 8МГц.
Вложение:
Комментарий к файлу: Схема FM04_8x7-Seg.jpg [227.09 KiB]
Скачиваний: 336
Вложение:
Комментарий к файлу: hex, исходник и проект в Шпротеусе FqMeter2313_04.rar [22.3 KiB]
Скачиваний: 197
Алгоритм таков: 16-битный Timer1 подсчитывает число внешних импульсов, поступивших на него за 1 сек. Полученные значения хранятся в трех регистрах, затем конвертируются в 7-разрядный BCD-код и выводятся на индикацию через внешний дешифратор 7-сегментного кода, одновременно с выбором знакоместа через позиционный дешифратор, которые оба подключены к порту B.
В общем прошу критики моего первого проекта и продолжения консультации по дальнейшей разработке.
Примерные требования к устройству: - Два режима измерения: 1) Высокочастотный, путем подсчета импульсов за известный период времени (диапазон от 1КГц до 1ГГц) 2) Низкочастотный, через измерение периода сигнала (диапазон от 1Гц до 1МГц) - Динамическая индикация на 8-разрядов - Еще возможно функция отображения периода импульса (только для низкочастотного режима).
P.S. От прескалера на 193ПЦ1 я собираюсь отказаться, т.к. действительно не удобный коэффициент, и собрав на макете обнаружил нестабильность в работе. Подскажите пожалуйста какой-нибудь надежный делитель на 128 со входом до 1ГГц.
А почему неудобный? и кратный 2-м удобный - просто на 3 разряда сдвигается результат в двоичном виде, и на 10 тоже удобный - просто перенести точку на готовом результате... если на 5 делить - сдвинуть результат на 1 разряд, а затем после преобразования в десятичное число сдвинуть точку.
Проблема в том что 16-битный таймер синхронный, и не может считать быстрее чем тактовая частота контроллера. относительно быстрый таймер только 8-битный, с прескалером. Чтобы превратить его в 16-битный обычно включают прескалер на 256. а по окончанию счета просто добивают прескалер импульсами пока не изменится значение таймера(т.е. произойдет переполнение рескалера). Поскольку количество импульсов известно - можно легко вычислить значение которое было в прескалере.
А почему неудобный? и кратный 2-м удобный - просто на 3 разряда сдвигается результат в двоичном виде, и на 10 тоже удобный - просто перенести точку на готовом результате... если на 5 делить - сдвинуть результат на 1 разряд, а затем после преобразования в десятичное число сдвинуть точку.
Согласен, умножить можно. Только я собрал на макете эту схему из журнала "Радио", и при испытаниях выходная частота была даже в 1,2 больше входной... Вообще по 193й серии тяжело найти информацию. Ни в одном справочнике даже распиновки не нашел...
Alexeyslav писал(а):
Проблема в том что 16-битный таймер синхронный, и не может считать быстрее чем тактовая частота контроллера.
Да, производители также рекомендуют, что в режиме подсчета через прерывание по переполнению таймера, тактовая частота должна даже превышать измеряемую не менее чем в 2 раза.
Alexeyslav писал(а):
относительно быстрый таймер только 8-битный, с прескалером. Чтобы превратить его в 16-битный обычно включают прескалер на 256...
А разве 8-битный таймер сможет обеспечить высокую точность? К тому же по алгоритму из книжки Ревича (который я реализовал во вложении) задействованы сразу 2 таймера: 16-битный считает младший и средний разряд, а 8-битный считает старший разряд. И в итоге результат измерения получается в виде 24-битного числа.
С прескалером 8-битный таймер дает 16 бит. Можно конечно завести выход 8-битного на 16 битный, для каскадирования но реально ли это сделать? Наверно все-таки да... и досчет можно организовать даже вместе со внешним делителем, это конечно дольше несколько будет, но точнее!
Проблема этих высокочастотных делителей в том что их нельзя отлаживать на макетке - они очень чувствительны к топологии монтажа, и на соплях, без должной экранировки могут самовозбуждаться.
Для отладки цифровой части можно взять делитель из цифровых микросхем серии 555, а ВЧ делитель ставить уже только на готовую плату с учетом правил разводки ВЧ схем.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения