Добрый всем день, возникла потребность в генераторе меандра с частотой до 1МГц и регулируемой длинной паузы между пачкой импульсов. Я вижу это примерно так : генератор из ардуинки нано (328р), управление головной ардуинкой Uno по одному пину(on/off им будет регулироваться пауза между пачками импульсов). Частота генератора устанавливается при прошивке (один раз подберется по возможностям силовой части) Идея дергать один пин туды/сюды, частоту регелировать пропуском такта(пустой строкой NOP или что-то типо того) при появлении внешнего сигнала выходить в прерывание и ждать пока не пропадет сигнал. В програмирование ардуинки начинающий, подскажите это работоспособное решение или может есть более простой способ решения этой задачи(какие-нибудь спец. микрухи) ну и если поможете с кодом для генератора отдельная благодарность. Пока програмлю через ардуино IDE.
Таймеры обычно очень медленные и МГц не вытянут(на сколько я почитал) или я ошибаюсь? ну и хотелось бы готовое решение, чтобы не заморачиваться навеской на контролер а все решить одной платой или микросхемой.
Какое разрешение/шаг частоты хотите иметь? Если это 1000000/500000/... /72500/... Hz то есть некоторый шанс получить. Если это, например, 1 Hz/10 Hz, 3333 Hz ... 1 MHz ... , ХХХ Hz, то используйте внешний DDS. Предлагаю посмотреть на напр. AD9833. Делает чудеса за свою цену.
Дело не в том, что можно сделать програмной DDS, NCO на ATmega328, а то, что ресурса МК для выходного сигнала 1 MHz для малых (напр. случайно выбираемый) шаг изменения со стороны вых. частоты не хватает.
Шаг частоты не принципиален, собственно частота будет подбираться, чтобы успевали срабатывать выходные полевики, значение имеет только регулировка длинны пачки и паузы между пачками, они будут соответствовать частотам до 100КГц, с этим контролер должен справиться. Ардуинку помниться простым дерганьем пинов раскачивал до 2МГц.
если кварц 16 МГц, то таймером можно получить до 8 МГц. режим СТС, переключение пина на каждом срабатывании. и если записать в регистр сравнения 0, то получим 16 / 2 = 8. а если записать 4, то получим 16 / 8 = 1 МГц.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ардуино приобрела популярность со слогана "Ардуино - паять ничего не нужно" Читаю ардуинщиков:
prizrack* писал(а):
Таймеры обычно очень медленные и МГц не вытянут(на сколько я почитал) или я ошибаюсь? ну и хотелось бы готовое решение, чтобы не заморачиваться навеской на контролер а все решить одной платой или микросхемой.
видимо "паять ничего не нужно" = "думать не нужно"
AD9833 вполне себе на первый взгляд, там есть пин (on/off)? извиняюсь за вопрос, просто сейчас некогда переводить даташит(
Добавлено after 2 minutes 25 seconds: shonty, Думать всегда нужно и придеться) Вопрос в базе готовых изделий и поиске оптимальноко направления куда копать. Я немного отстал о современной базы, а сейчас возникла необходимость, вот и спрашиваю куда копать. Про таймеры немного не корректно выразился, обработка таймеров с последующим выводом на порт занимает много тактов(на сколько я знаю, могу ошибаться). Но собственно этот вопрос отпал с появлением AD9833.
Добавлено after 4 minutes 49 seconds: phalanx, Спасибо за наводку.
Нет. Есть программный способ. No power-down, DAC powered down, Internal clock disabled, Both the DAC powered down and the internal clock disabled. Но при необходимости установите аппаратный ключ.
Starichok51, Это в теории, в реальности у меня на 2МГц сигнал начинал сильно "искривляться" скорость порта уже не вытягивала, можно конечно было попробовать его поправить аппаратно, но это был всего-лишь экпиремент.
Добавлено after 1 minute 32 seconds: veso74, Спасибо, буду разбираться.
AD9833 вполне себе на первый взгляд, там есть пин (on/off)? извиняюсь за вопрос, просто сейчас некогда переводить даташит(
Нет там пина разрешения. Можно конечно это дело через дополнительную логику с разрешением выхода подключить.
А если тупо на меге, то запускаете таймер на нужной частоте, вывод в порт, дальше по вкусу: или таймер останавливаете, или вывод в порт отключаете. Или: таймер отмеряет определённый период, по прерыванию переключаете пин.. ведёте подсчёт импульсов...
shonty, Спасибо, поиграюсь с AD9833, думаю так будет правильнее и запас по частоте у нее хороший, а пока она приедет попробую через таймеры и через порты мегу помучать.
prizrack*, это ты говоришь, не зная и не понимая работу МК. у меня с тактовой 8 МГц без проблем получается 4 МГц на выходом пине. не нужна тебе AD9833. всё делается на одном МК. и уж тем более не нужно отдельно МК для генератора и отдельно МК для управления этим генератором.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Раз пошла такая пьянка Вот так примандырил к китайской плате с AD9833 генератор на 16.777.216
Но топикстартеру свою задачу рациональнее на одном МК решить.
Добавлено after 10 minutes 43 seconds: И кстати. На ардуиноресурсах пишут, что генерируют с китайских AD9833 модулей с дискретностью где 1Гц, где 0,1Гц.
Заведомо откровенное враньё. Без замены генератора такую дискретность не получить. Но это лирика...
Из документации ИС: AD9833 Analog Devices: Low Power, 12.65 mW, 2.3 V to 5.5 V, Programmable Waveform Generator
Цитата:
The frequency registers are 28 bits wide: with a 25 MHz clock rate, resolution of 0.1 Hz can be achieved; with a 1 MHz clock rate, the AD9833 can be tuned to 0.004 Hz resolution.
Частотные регистры имеют ширину 28 бит: при тактовой частоте 25 МГц можно достичь разрешения 0,1 Гц; при тактовой частоте 1 МГц AD9833 можно настроить на разрешение 0,004 Гц.
Частотные регистры имеют ширину 28 бит: при тактовой частоте 25 МГц можно достичь разрешения 0,1 Гц; при тактовой частоте 1 МГц AD9833 можно настроить на разрешение 0,004 Гц.
Частота выхода равна (Fтактирующая х FreqReg) / 2^28 Сможете получить из этой формулы 1 или 0,1 Гц при 25МГц тактирующей?
Добавлено after 2 minutes 21 second: Если кодить на асме, то не получится, а на ардуино легко получают Видимо многое от языка программирования зависит
Добавлено after 5 minutes 18 seconds: Упрощаю задачу
25МГц/2^28 = 0,0931322574615479
На какое целое число нужно умножить 0,0931322574615479, что бы получить 1 или 0,1?
Да при чём тут язык)) По поводу языка это была ирония И для чего мне ваши коды? Они ничего не объясняют и не исправляют, даже неточности в даташите. Ну если только не свято верить в могущество ардуины
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения