|
частотомер на PIC |
|
|
|
Dec 2 2016, 15:19
|
Группа: Новичок
Сообщений: 2
Регистрация: 2-12-16
Пользователь №: 94 474

|
Добрый день.В общем навыков программирования на ассимблере у меня нет, но задача есть. Разработать устройство для отображения на 3-разрядном семисегментном индикаторе информацию о частоте входного сигнала от 45.0 Гц до 65.0 Гц с разрешением 0.1 Гц.Форма сигнала синусоидальная с размахом от 1 до 4 вольт (постоянное смещение 2.5 в). Использовать динамическое управление. В общем схему и номиналы резисторов мне изобразить удалось.Вопрос в том как написать алгоритм программы, по нему я думаю не очень сложно написать саму программу.Проблема состоит также в том что я не совсем понимаю сам принцип работы частотомера.как я понял значение частты мы получаем из выражения F=1/T.А сам период Т вычисляется как N*t, где t-время одного импульса а N-количество эти самых импульсов.В даташите на PIC18F2520 я вычитал что t=Fosc/делитель, я выбрал делитель 4 а Fosc 4 МГц, следовательно импульс равен 1 мкс, а вот с N проблема, чтобы их посчитать нужен период синусоиды моей не зная частоты, я прикинул что можно по положительному перепаду посчитать, т.е когда она значение 2.5 В первый раз пересекает в + и в конце аналогично, но как это реализовать не понимаю. Прошу вашей помощи
|
|
|
|
|
 |
Ответов
|
Dec 2 2016, 17:16
|
Гуру
     
Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710

|
Если кварц 4 МГц, то, например:
Входной сигнал подать на вход RA0 встроенного аналогового компаратора C1, а на его вход RA3 — середину питания, т.е. общую точку делителя из двух одинаковых резисторов 10 кОм.
Выход RA4 этого компаратора соединить со входом RC2 защёлки Таймера 1.
На вход предделителя на 8 Таймера 1 подать TCY (т.е. TMR1 будет тактоваться частотой 125 кГц), а его защёлку настроить на режим "Capture mode, every rising edge".
Настроить прерывание от защёлки Таймера 1.
650–450 это 200 чисел, с запасом 652–448, а защёлкиваемый диапазон, соответственно, от 1/(8 · 44,8E-6)=2790 до 1/(8 · 65,2E-6)= 1917.
Поэтому при заходе в прерывание считывать из CCPR1 защёлкнутое значение, вычитать из него крайние 1917 и делить на 4 (командой сдвига, разумеется).
Полученный диапазон 0...218, т.е. всего один байт, записать в регистр результата, который при выходе из прерывания преобразовать командами TBLRD в три байта семисегментных кодов для их непосредственной записи в выходные регистры для отображения семисегментными индикаторами.
Данные таблицы сгенерировать программой, минут за 5 написанной на любом удобном высокоуровневом языке.
|
|
|
|
Сообщений в этой теме
akaGunner частотомер на PIC Dec 2 2016, 15:19 ViKo http://f6csx.free.fr/PROJETS/Fmetre/AN592.pdf
Глян... Dec 2 2016, 15:47 Ruslan1 А зачем тут ассемблер?
Вам не нужно микросекундам... Dec 2 2016, 19:18 VCO Цитата(Ruslan1 @ Dec 2 2016, 22:18) Ну, В... Dec 2 2016, 19:36 ViKo Цитата(Ruslan1 @ Dec 2 2016, 22:18) Ну, В... Dec 2 2016, 19:54 all_nik Вот Ваш диплом в готовом виде.
http://we.easyelect... Dec 5 2016, 15:27 esaulenka Вот интересно, кто-нибудь, кроме Plain, условия за... Dec 5 2016, 16:20 VCO Цитата(esaulenka @ Dec 5 2016, 19:20) Вот... Dec 5 2016, 17:20  esaulenka Цитата(VCO @ Dec 5 2016, 20:20) При желан... Dec 5 2016, 18:58   TSerg Цитата(esaulenka @ Dec 5 2016, 21:58) я в... Dec 5 2016, 19:17   VCO Цитата(esaulenka @ Dec 5 2016, 21:58) Как... Dec 6 2016, 16:39 ViKo Я не ответ предложил, а путь решения. Dec 5 2016, 17:56 ViKo Топикстартер вместо "взял и сделал" поше... Dec 5 2016, 19:26 ar__systems Как вообще людям не стыдно такие простейшие задачи... Dec 6 2016, 14:43  jcxz Цитата(ar__systems @ Dec 6 2016, 17:43) К... Dec 8 2016, 09:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|