Arduino Due - работа со счетчиками
- Войдите на сайт для отправки комментариев
Втр, 12/02/2019 - 16:38
Господа! Я прочитал в спецификации на процессор, который стоит в Arduino Due, что там имеется три счетчика по 32 бита. Тактовая частота процессора указана 84 МГц. Я правильно понимаю, что счетчики также могут работать на этой частоте и используя их можно сделать высокоточный частотомер, который (если добавить прескейлер на 20) сможет считать на частотах вплоть до 1 ГГц? Есть ли тут какие-то хитрости и поводные камни?
Я хотел бы сделать измерительный приборчик на основе частотомера, типа DIP - метра, а также измеритель емкости, инуктивности. Может кто-то дать ссылки на подобные или похожие проекты? Ну и советы, конечно.
Буду очень благодарен!
heli_nick, вы наверное путаете prescaler и multiplier. Максимальная измеряемая частота будет 42МГц. И кстати обычно это слово произносят либо на русский манер -"прескалер", либо на английский "прискейлор".
Он имел ввиду внешний делитель.)
это слово произносят либо на русский манер -"прескалер", либо на английский "прискейлор".
А я как-то по-русски - "делитель частоты". Неправильно?
to dimax - Коллега! Терминологию уточнили, я имел в виду внеший делитель частоты. А по сути заданных мною вопросов есть полезная информация?
И почему счетчики будут считать только до частоты 42 Мгц? Для простых AVRок - какая тактовая частота, такая и максимальная скорость счета счетчиков/таймеров. Разве не так? И потом счетчики в процессоре Cortex - M3 имеют специальные модули синхронизации. Хотя про частоты и времена задержек я нигде указаний не нашел.
Ссылочки бы хотелось посмотреть,если они конечно есть.
heli_nick, если с внешним делителем, то нет проблем, взять народный sab6456 например, и включить по схеме из даташита. Но зачем тогда Due? Частотометры прямого счёта лучше делать на PIC, там не синхронные таймеры. А если хотите делать по технологии обратного счёта (Reciprocal Counting) то да, нужно МК покруче, понадобятся сразу 3 таймера, и как миниум один из них 32-битный. По второму методу вряд ли примеров найдёте, тем более для Due. По первому -вагон и маленькая тележка.
to dimax Речь идет об Arduino Due потому что в приборчике преполагается использовать еще готовый шилд, который заточен на этот контроллер. Работать предполагается на частотах выше 15МГц (а сверху - как получится, хотелось бы МГц до 900), поэтому метод обратного счета (измерение периода входных колебаний) не нужен. PIC используют много тактов на обработку прерываний, а AVR обрабатывают прерывание за один такт. Поэтому они мне кажутся предпочтительными.
Собственно вопрос я задал не про то, как сделать частотомер, а как правильно использовать счетчики в контроллере Cortex M3, который стоит на Due - программирование, использование прерываний, всякие особенности. Где можно про это почитать, примеры реализации программ?
За ссылочки и примеры буду благодарен!
поэтому метод обратного счета (измерение периода входных колебаний) не нужен.
Не совсем, обратный счёт -это усложнённый вариант прямого счёта. Если в кратце, то считается кол-во периодов входного сигнала, но не за фиксированное время, а за гибкое. Начинается счёт с фронта сигнала, далее к примеру отсчитали мы n фронтов за 1 секунду, но счёт времени не прекращаем до ближайшего фронта входного сигнала. В результате точность частотометра существенно повышается.
PIC используют много тактов на обработку прерываний, а AVR обрабатывают прерывание за один такт.
По поводу прерываний на AVR почитайте тут посты 64,65. Кстати причём тут собссно AVR и прерывания? Due если что - это ARM, который ничего общего с AVR не имеет :)
За ссылочки и примеры буду благодарен!
Пример есть из моих, пост 41. Написал когда разбирал что такое Due и с чем его едят. Можно сделать и без "аппаратной петли" но тогда я ещё не умел.
to dimax Большое вам спасибо, полезные примеры, буду изучать!
heli_nick, Но всёж таки если хотите получить прибор,а не показометр, то Due не годится, т.к. использует PLL преобразование частоты. (ну или же переконфигурировать его тактовую без PLL, на родную частоту его кварца -12 Мгц) . Максимальная измеряемая частота без внешнего делителя в этом случае будет 6Мгц. Поэтому PIC'и с асинхронными таймерами тут вне конкуренции..
Вот кстати достойный и довольно простой проект на радиокоте, как раз на обратном счёте основан.
heli_nick, Но всёж таки если хотите получить прибор,а не показометр, то Due не годится, т.к. использует PLL преобразование частоты. (ну или же переконфигурировать его тактовую без PLL, на родную частоту его кварца -12 Мгц) . Максимальная измеряемая частота без внешнего делителя в этом случае будет 6Мгц. Поэтому PIC'и с асинхронными таймерами тут вне конкуренции..
dimax, Еще раз спасибо вам за совет, но мне пока не совсем понятно, почему внутренние счетчики микропроцессора Cortex M3 могут работать с частотой до 6МГц. Я как раз сейчас читаю материалы по работе счетчиков в PICах, AVRах и ARM Cortex M3. Есть ссылки на интересные проекты - http://elm-chan.org/works/ddm/report_e.html - японский любительский DIP-метер. AVR - счетчики считают там только младшие разряды, старшие разряды считаются аппратным декадным счетчиком и еще есть высокочастотный делитель частоты. Для ГИРа это беспечивает достаточную точность порядка 0,1%
Еще есть пример хохляцкого похожего приборчика http://elm-chan.org/works/ddm/report_e.html , там как раз используется PIC. PICи тоже интересные штуки, но сил все освоить нужно больше, я полагал, что мои задачки можно решить с помощью AVRок, которые любителю доступней за счет платформы Arduino.
Я не настаиваю на использовании Due для ГИРа, как я писал выше, я планирую ее использовать совместно с другим измерительным шилдом, который заточен специально на Due. Вычислительных ресурсов у нее хватило бы на обе задачи, но разделить органы управления (меню, кнопки и т.д.) - дополнительная задача. Наверное проще сделать два разных приборчика.
Но со счетчиками в Due вы меня огорчили. Буду разбираться.
to dimax А есть ли у вас ссылки на какие-нибудь справочные материалы по Cortex M3, где указывались бы реальные временные характеристики, частоты, длительности обрабатываемых фронтов и т.д. Я нашел только спецификации по архитектуре и программированию.
но мне пока не совсем понятно, почему внутренние счетчики микропроцессора Cortex M3 могут работать с частотой до 6МГц.
Таймеры не корректно воспринимают входящий сигнал с частотой выше половины тактовой. Потому что таймеры синхронные, как и в AVR , т.е. каждое срабатывание от внешнего сигнала происходит синхронно тактовой частоте таймера. А в PICах асинхронные, то есть без явного ограничения, максимальная частота входящего сигнала определяется только способностью "железа" , и не зависит от тактовой таймера.
Конечно можно и на Due, и на его умноженной до 84МГц тактовой, а частоту считать методом прямого счёта(как в моём примере), всё это разумеется будет работать, но точность будет крайне фиговая (не возьмусь озвучить цифры).
Никаких полезных ссылок по Due к сожалению нет, это не популярный в народе МК, соответсно никто про него не пишет. По Cortex вообще -информации много, но из того что вас интересует всё равно мало что встречается.
А в PICах асинхронные, то есть без явного ограничения, максимальная частота входящего сигнала определяется только способностью "железа" , и не зависит от тактовой таймера.
И вот это не может не нравится. Какой то древнейший 18-ножечный PIC16F84 может работать/считать до 50 мГц. Безо всяких делителей! И не важно какая у него тактовая частота. Хоть 4 мГц (делённая на 4!). Главное ворота точно выдержать.) А вот всеми хвалёная АVR - и облом-с... Вот такая вот фигня, малята.)
Конечно можно и на Due, и на его умноженной до 84МГц тактовой, а частоту считать методом прямого счёта(как в моём примере), всё это разумеется будет работать, но точность будет крайне фиговая (не возьмусь озвучить цифры).
Ну вот еще есть такая штука как Teensy 3.6, тоже Arduino - совместимая. Там тоже стоит ARM - Cortex M4, но зато тактовая частота большущая - 180 МГц. Про нее что скажите, господа?
heli_nick, не пользовал, не знаю. Но большая тактовая -обычно это частота самого ядра, а периферия скорее всего медленная. Вон в гигагерцовой "малинке" таймер работает на тактовой 20МГц, (если не изменяет память:).