Arduino Due - работа со счетчиками

heli_nick
Offline
Зарегистрирован: 12.02.2019

Господа! Я прочитал в спецификации на процессор, который стоит в Arduino Due, что там имеется три счетчика по 32 бита. Тактовая частота процессора указана 84 МГц. Я правильно понимаю, что счетчики также могут работать на этой частоте  и используя их можно сделать высокоточный частотомер, который (если добавить прескейлер на 20) сможет считать на частотах вплоть до 1 ГГц? Есть ли тут какие-то хитрости и поводные камни?

Я хотел бы сделать измерительный приборчик на основе частотомера, типа DIP - метра, а также измеритель емкости, инуктивности. Может кто-то дать ссылки на подобные или похожие проекты?  Ну и советы, конечно.

Буду очень благодарен!

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

heli_nick,  вы наверное путаете prescaler и multiplier. Максимальная измеряемая частота будет 42МГц.  И кстати обычно это слово произносят либо на русский манер -"прескалер", либо на английский "прискейлор".

Green
Offline
Зарегистрирован: 01.10.2015

Он имел ввиду внешний делитель.)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dimax пишет:

это слово произносят либо на русский манер -"прескалер", либо на английский "прискейлор".

А я как-то по-русски - "делитель частоты". Неправильно?

heli_nick
Offline
Зарегистрирован: 12.02.2019

to dimax  - Коллега! Терминологию уточнили, я имел в виду внеший делитель частоты. А по сути заданных мною вопросов есть полезная информация?

И почему счетчики будут считать только до частоты 42 Мгц? Для простых AVRок - какая тактовая частота, такая и максимальная скорость счета счетчиков/таймеров. Разве не так? И потом счетчики в процессоре Cortex - M3  имеют специальные модули синхронизации. Хотя про частоты и времена задержек я нигде указаний не нашел.

Ссылочки бы хотелось посмотреть,если они конечно есть. 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

heli_nick, если с внешним делителем, то нет проблем, взять народный sab6456 например, и включить по схеме из даташита.  Но зачем тогда Due? Частотометры прямого счёта лучше делать на PIC, там не синхронные таймеры.  А если  хотите делать  по технологии обратного счёта (Reciprocal Counting) то да, нужно МК покруче, понадобятся сразу 3 таймера, и как миниум один из них 32-битный. По второму методу вряд ли примеров найдёте, тем более для Due. По первому -вагон и маленькая тележка.

heli_nick
Offline
Зарегистрирован: 12.02.2019

to dimax  Речь идет об Arduino Due потому что в приборчике преполагается использовать еще готовый шилд, который заточен на этот контроллер. Работать предполагается на частотах выше 15МГц (а сверху - как получится, хотелось бы МГц до 900), поэтому метод обратного счета (измерение периода входных колебаний) не нужен. PIC используют много тактов на обработку прерываний, а AVR обрабатывают прерывание за один такт. Поэтому они мне кажутся предпочтительными.

Собственно вопрос я задал не про то, как сделать частотомер, а как правильно использовать счетчики в контроллере Cortex M3, который стоит на Due - программирование, использование прерываний, всякие особенности. Где можно про это почитать, примеры реализации программ?

За ссылочки и примеры буду благодарен!

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

heli_nick пишет:

 поэтому метод обратного счета (измерение периода входных колебаний) не нужен.

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

heli_nick пишет:

PIC используют много тактов на обработку прерываний, а AVR обрабатывают прерывание за один такт.

По поводу прерываний на AVR  почитайте тут посты 64,65. Кстати причём тут собссно AVR  и прерывания? Due если что - это ARM, который ничего общего с AVR не имеет :)

heli_nick пишет:

За ссылочки и примеры буду благодарен!

Пример есть из моих,  пост 41. Написал когда разбирал что такое Due и с чем его едят. Можно сделать и без "аппаратной петли" но тогда я ещё не умел.

heli_nick
Offline
Зарегистрирован: 12.02.2019

to dimax Большое вам спасибо, полезные примеры, буду изучать!

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

heli_nick, Но всёж таки если хотите получить прибор,а не показометр, то Due не годится, т.к. использует PLL преобразование частоты. (ну или же переконфигурировать его тактовую без PLL, на родную частоту его кварца -12 Мгц) . Максимальная измеряемая  частота без внешнего делителя в этом случае будет 6Мгц.  Поэтому PIC'и с асинхронными таймерами тут вне конкуренции..

Вот кстати достойный и довольно простой проект  на радиокоте, как раз на обратном счёте основан.

heli_nick
Offline
Зарегистрирован: 12.02.2019

dimax пишет:

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 вы меня огорчили. Буду разбираться.

heli_nick
Offline
Зарегистрирован: 12.02.2019

to dimax А есть ли у вас ссылки на какие-нибудь справочные материалы по Cortex M3, где указывались бы реальные временные характеристики, частоты, длительности обрабатываемых фронтов и т.д. Я нашел только спецификации по архитектуре и программированию.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

heli_nick пишет:

но мне пока не совсем понятно, почему внутренние счетчики микропроцессора Cortex M3 могут работать с частотой до 6МГц.

Таймеры не корректно воспринимают входящий сигнал с частотой выше половины тактовой. Потому что таймеры синхронные, как и в AVR , т.е. каждое срабатывание от внешнего сигнала  происходит синхронно  тактовой частоте таймера. А в PICах асинхронные, то есть без явного ограничения, максимальная частота входящего сигнала определяется только способностью "железа" , и не зависит от тактовой таймера.

Конечно можно и на Due, и на его умноженной до 84МГц тактовой, а частоту считать методом прямого счёта(как в моём примере), всё это разумеется будет работать, но точность будет крайне фиговая (не возьмусь озвучить цифры).

Никаких полезных ссылок по Due к сожалению нет, это не популярный в народе МК, соответсно никто про него не пишет. По Cortex вообще -информации много, но из того что вас интересует всё равно мало что встречается.

 

Green
Offline
Зарегистрирован: 01.10.2015

dimax пишет:

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

И вот это не может не нравится. Какой то древнейший 18-ножечный PIC16F84 может работать/считать до 50 мГц. Безо всяких делителей! И не важно какая у него тактовая частота. Хоть 4 мГц (делённая на 4!). Главное ворота точно выдержать.) А вот всеми хвалёная АVR - и облом-с... Вот такая вот фигня, малята.)

heli_nick
Offline
Зарегистрирован: 12.02.2019

dimax пишет:
  А в PICах асинхронные, то есть без явного ограничения, максимальная частота входящего сигнала определяется только способностью "железа" , и не зависит от тактовой таймера.

Конечно можно и на Due, и на его умноженной до 84МГц тактовой, а частоту считать методом прямого счёта(как в моём примере), всё это разумеется будет работать, но точность будет крайне фиговая (не возьмусь озвучить цифры).

Ну вот еще есть такая штука как Teensy 3.6, тоже Arduino - совместимая. Там тоже стоит ARM - Cortex M4, но зато тактовая частота большущая - 180 МГц. Про нее что скажите, господа?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

heli_nick, не пользовал, не знаю. Но большая тактовая -обычно это частота самого ядра, а периферия скорее всего медленная. Вон в гигагерцовой "малинке" таймер работает на тактовой 20МГц, (если не изменяет память:).