Генератор из arduino

Обсуждаем контроллеры компании Atmel.
prizrack*
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пт авг 21, 2015 12:01:25
Откуда: г. Орел

Генератор из arduino

Сообщение prizrack* »

Добрый всем день, возникла потребность в генераторе меандра с частотой до 1МГц и регулируемой длинной паузы между пачкой импульсов.
Я вижу это примерно так : генератор из ардуинки нано (328р), управление головной ардуинкой Uno по одному пину(on/off им будет регулироваться пауза между пачками импульсов).
Частота генератора устанавливается при прошивке (один раз подберется по возможностям силовой части)
Идея дергать один пин туды/сюды, частоту регелировать пропуском такта(пустой строкой NOP или что-то типо того) при появлении внешнего сигнала выходить в прерывание и ждать пока не пропадет сигнал.
В програмирование ардуинки начинающий, подскажите это работоспособное решение или может есть более простой способ решения этой задачи(какие-нибудь спец. микрухи) ну и если поможете с кодом для генератора отдельная благодарность. Пока програмлю через ардуино IDE.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Генератор из arduino

Сообщение shonty »

Не пробовали рассматривать задачу не с ракурса ардуино, а с ракурса контроллера, имеющего на борту таймеры?
prizrack*
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пт авг 21, 2015 12:01:25
Откуда: г. Орел

Re: Генератор из arduino

Сообщение prizrack* »

Таймеры обычно очень медленные и МГц не вытянут(на сколько я почитал) или я ошибаюсь? ну и хотелось бы готовое решение, чтобы не заморачиваться навеской на контролер а все решить одной платой или микросхемой.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Генератор из arduino

Сообщение veso74 »

Какое разрешение/шаг частоты хотите иметь? Если это 1000000/500000/... /72500/... Hz то есть некоторый шанс получить. Если это, например, 1 Hz/10 Hz, 3333 Hz ... 1 MHz ... , ХХХ Hz, то используйте внешний DDS. Предлагаю посмотреть на напр. AD9833. Делает чудеса за свою цену.

Дело не в том, что можно сделать програмной DDS, NCO на ATmega328, а то, что ресурса МК для выходного сигнала 1 MHz для малых (напр. случайно выбираемый) шаг изменения со стороны вых. частоты не хватает.
prizrack*
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пт авг 21, 2015 12:01:25
Откуда: г. Орел

Re: Генератор из arduino

Сообщение prizrack* »

Шаг частоты не принципиален, собственно частота будет подбираться, чтобы успевали срабатывать выходные полевики, значение имеет только регулировка длинны пачки и паузы между пачками, они будут соответствовать частотам до 100КГц, с этим контролер должен справиться. Ардуинку помниться простым дерганьем пинов раскачивал до 2МГц.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Генератор из arduino

Сообщение Starichok51 »

если кварц 16 МГц, то таймером можно получить до 8 МГц.
режим СТС, переключение пина на каждом срабатывании. и если записать в регистр сравнения 0, то получим 16 / 2 = 8.
а если записать 4, то получим 16 / 8 = 1 МГц.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
phalanx
Нашел транзистор. Понюхал.
Сообщения: 158
Зарегистрирован: Сб апр 24, 2021 18:42:11

Re: Генератор из arduino

Сообщение phalanx »

[uquote="prizrack*",url="/forum/viewtopic.php?p=4642192#p4642192"]...может есть более простой способ решения этой задачи(какие-нибудь спец. микрухи)..1.[/uquote]
AD9833.jpg
(16.86 КБ) 148 скачиваний
https://aliexpress.ru/item/32837067609. ... 58d3j9LFZP
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Генератор из arduino

Сообщение shonty »

Ардуино приобрела популярность со слогана "Ардуино - паять ничего не нужно"
Читаю ардуинщиков:
prizrack* писал(а):Таймеры обычно очень медленные и МГц не вытянут(на сколько я почитал) или я ошибаюсь? ну и хотелось бы готовое решение, чтобы не заморачиваться навеской на контролер а все решить одной платой или микросхемой.
видимо "паять ничего не нужно" = "думать не нужно" :facepalm:

Что значит "Таймеры обычно очень медленные" ?
prizrack*
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пт авг 21, 2015 12:01:25
Откуда: г. Орел

Re: Генератор из arduino

Сообщение prizrack* »

AD9833 вполне себе на первый взгляд, там есть пин (on/off)? извиняюсь за вопрос, просто сейчас некогда переводить даташит(

Добавлено after 2 minutes 25 seconds:
shonty, Думать всегда нужно и придеться) Вопрос в базе готовых изделий и поиске оптимальноко направления куда копать. Я немного отстал о современной базы, а сейчас возникла необходимость, вот и спрашиваю куда копать.
Про таймеры немного не корректно выразился, обработка таймеров с последующим выводом на порт занимает много тактов(на сколько я знаю, могу ошибаться). Но собственно этот вопрос отпал с появлением AD9833.

Добавлено after 4 minutes 49 seconds:
phalanx, Спасибо за наводку.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Генератор из arduino

Сообщение veso74 »

Нет. Есть программный способ.
No power-down, DAC powered down, Internal clock disabled, Both the DAC powered down and the internal clock disabled.
Но при необходимости установите аппаратный ключ.
prizrack*
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пт авг 21, 2015 12:01:25
Откуда: г. Орел

Re: Генератор из arduino

Сообщение prizrack* »

Starichok51, Это в теории, в реальности у меня на 2МГц сигнал начинал сильно "искривляться" скорость порта уже не вытягивала, можно конечно было попробовать его поправить аппаратно, но это был всего-лишь экпиремент.

Добавлено after 1 minute 32 seconds:
veso74, Спасибо, буду разбираться.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Генератор из arduino

Сообщение shonty »

prizrack* писал(а):AD9833 вполне себе на первый взгляд, там есть пин (on/off)? извиняюсь за вопрос, просто сейчас некогда переводить даташит(
Нет там пина разрешения. Можно конечно это дело через дополнительную логику с разрешением выхода подключить.

А если тупо на меге, то запускаете таймер на нужной частоте, вывод в порт, дальше по вкусу: или таймер останавливаете, или вывод в порт отключаете.
Или: таймер отмеряет определённый период, по прерыванию переключаете пин.. ведёте подсчёт импульсов...
prizrack*
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пт авг 21, 2015 12:01:25
Откуда: г. Орел

Re: Генератор из arduino

Сообщение prizrack* »

shonty, Спасибо, поиграюсь с AD9833, думаю так будет правильнее и запас по частоте у нее хороший, а пока она приедет попробую через таймеры и через порты мегу помучать.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Генератор из arduino

Сообщение Starichok51 »

prizrack*, это ты говоришь, не зная и не понимая работу МК.
у меня с тактовой 8 МГц без проблем получается 4 МГц на выходом пине.
не нужна тебе AD9833. всё делается на одном МК. и уж тем более не нужно отдельно МК для генератора и отдельно МК для управления этим генератором.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Генератор из arduino

Сообщение veso74 »

prizrack*, можно повторить любую конструкцию, "колесо" уже найдено. Есть идеи, которые можно взять.
Генератор с регулируемоей частотой на ардуино.
Последний раз редактировалось veso74 Вт окт 29, 2024 12:30:20, всего редактировалось 1 раз.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Генератор из arduino

Сообщение shonty »

Раз пошла такая пьянка :)
Вот так примандырил к китайской плате с AD9833 генератор на 16.777.216 :))
Изображение

Но топикстартеру свою задачу рациональнее на одном МК решить.

Добавлено after 10 minutes 43 seconds:
И кстати. На ардуиноресурсах пишут, что генерируют с китайских AD9833 модулей с дискретностью где 1Гц, где 0,1Гц.

Заведомо откровенное враньё. Без замены генератора такую дискретность не получить.
Но это лирика... :)

:beer:
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Генератор из arduino

Сообщение veso74 »

Из документации ИС: 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 Гц.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Генератор из arduino

Сообщение shonty »

veso74 писал(а):Частотные регистры имеют ширину 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?
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Генератор из arduino

Сообщение veso74 »

Смените язык писания кода :).

Код: Выделить всё

uint32_t d = (uint32_t)(((uint64_t)frequency << 28) / F_MCLK);
uint16_t data_1 = 0x4000 | (0x3FFF & (uint16_t)(d >> 14));
uint16_t data_0 = 0x4000 | (0x3FFF & (uint16_t)d);

write_reg(data_0);  // FREQ0, data_0
write_reg(data_1);  // FREQ0, data_1
write_reg(0xC000);  // PHASE0
1 Hz будет: d = 10, freq -> 0,931322574615478515625 Hz.
0,1 Hz будет: d = 1, freq -> 0,0931322574615478515625 Hz.
Последний раз редактировалось veso74 Ср окт 30, 2024 06:22:41, всего редактировалось 2 раза.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Генератор из arduino

Сообщение shonty »

veso74 писал(а):Смените язык писания кода .
Да при чём тут язык)) По поводу языка это была ирония :))
И для чего мне ваши коды? Они ничего не объясняют и не исправляют, даже неточности в даташите. Ну если только не свято верить в могущество ардуины :))

Для наглядности:
16.777.216 Гц/ 2^28 = 0,0625
Ответить

Вернуться в «AVR»