Генератор из arduino
-
prizrack*
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Пт авг 21, 2015 12:01:25
- Откуда: г. Орел
Генератор из arduino
Добрый всем день, возникла потребность в генераторе меандра с частотой до 1МГц и регулируемой длинной паузы между пачкой импульсов.
Я вижу это примерно так : генератор из ардуинки нано (328р), управление головной ардуинкой Uno по одному пину(on/off им будет регулироваться пауза между пачками импульсов).
Частота генератора устанавливается при прошивке (один раз подберется по возможностям силовой части)
Идея дергать один пин туды/сюды, частоту регелировать пропуском такта(пустой строкой NOP или что-то типо того) при появлении внешнего сигнала выходить в прерывание и ждать пока не пропадет сигнал.
В програмирование ардуинки начинающий, подскажите это работоспособное решение или может есть более простой способ решения этой задачи(какие-нибудь спец. микрухи) ну и если поможете с кодом для генератора отдельная благодарность. Пока програмлю через ардуино IDE.
Я вижу это примерно так : генератор из ардуинки нано (328р), управление головной ардуинкой Uno по одному пину(on/off им будет регулироваться пауза между пачками импульсов).
Частота генератора устанавливается при прошивке (один раз подберется по возможностям силовой части)
Идея дергать один пин туды/сюды, частоту регелировать пропуском такта(пустой строкой NOP или что-то типо того) при появлении внешнего сигнала выходить в прерывание и ждать пока не пропадет сигнал.
В програмирование ардуинки начинающий, подскажите это работоспособное решение или может есть более простой способ решения этой задачи(какие-нибудь спец. микрухи) ну и если поможете с кодом для генератора отдельная благодарность. Пока програмлю через ардуино IDE.
Re: Генератор из arduino
Не пробовали рассматривать задачу не с ракурса ардуино, а с ракурса контроллера, имеющего на борту таймеры?
-
prizrack*
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Пт авг 21, 2015 12:01:25
- Откуда: г. Орел
Re: Генератор из arduino
Таймеры обычно очень медленные и МГц не вытянут(на сколько я почитал) или я ошибаюсь? ну и хотелось бы готовое решение, чтобы не заморачиваться навеской на контролер а все решить одной платой или микросхемой.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Генератор из arduino
Какое разрешение/шаг частоты хотите иметь? Если это 1000000/500000/... /72500/... Hz то есть некоторый шанс получить. Если это, например, 1 Hz/10 Hz, 3333 Hz ... 1 MHz ... , ХХХ Hz, то используйте внешний DDS. Предлагаю посмотреть на напр. AD9833. Делает чудеса за свою цену.
Дело не в том, что можно сделать програмной DDS, NCO на ATmega328, а то, что ресурса МК для выходного сигнала 1 MHz для малых (напр. случайно выбираемый) шаг изменения со стороны вых. частоты не хватает.
Дело не в том, что можно сделать програмной DDS, NCO на ATmega328, а то, что ресурса МК для выходного сигнала 1 MHz для малых (напр. случайно выбираемый) шаг изменения со стороны вых. частоты не хватает.
-
prizrack*
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Пт авг 21, 2015 12:01:25
- Откуда: г. Орел
Re: Генератор из arduino
Шаг частоты не принципиален, собственно частота будет подбираться, чтобы успевали срабатывать выходные полевики, значение имеет только регулировка длинны пачки и паузы между пачками, они будут соответствовать частотам до 100КГц, с этим контролер должен справиться. Ардуинку помниться простым дерганьем пинов раскачивал до 2МГц.
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Генератор из arduino
если кварц 16 МГц, то таймером можно получить до 8 МГц.
режим СТС, переключение пина на каждом срабатывании. и если записать в регистр сравнения 0, то получим 16 / 2 = 8.
а если записать 4, то получим 16 / 8 = 1 МГц.
режим СТС, переключение пина на каждом срабатывании. и если записать в регистр сравнения 0, то получим 16 / 2 = 8.
а если записать 4, то получим 16 / 8 = 1 МГц.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Генератор из arduino
[uquote="prizrack*",url="/forum/viewtopic.php?p=4642192#p4642192"]...может есть более простой способ решения этой задачи(какие-нибудь спец. микрухи)..1.[/uquote]
https://aliexpress.ru/item/32837067609. ... 58d3j9LFZP
https://aliexpress.ru/item/32837067609. ... 58d3j9LFZP
Re: Генератор из arduino
Ардуино приобрела популярность со слогана "Ардуино - паять ничего не нужно"
Читаю ардуинщиков:
Что значит "Таймеры обычно очень медленные" ?
Читаю ардуинщиков:
видимо "паять ничего не нужно" = "думать не нужно"prizrack* писал(а):Таймеры обычно очень медленные и МГц не вытянут(на сколько я почитал) или я ошибаюсь? ну и хотелось бы готовое решение, чтобы не заморачиваться навеской на контролер а все решить одной платой или микросхемой.
Что значит "Таймеры обычно очень медленные" ?
-
prizrack*
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Пт авг 21, 2015 12:01:25
- Откуда: г. Орел
Re: Генератор из arduino
AD9833 вполне себе на первый взгляд, там есть пин (on/off)? извиняюсь за вопрос, просто сейчас некогда переводить даташит(
Добавлено after 2 minutes 25 seconds:
shonty, Думать всегда нужно и придеться) Вопрос в базе готовых изделий и поиске оптимальноко направления куда копать. Я немного отстал о современной базы, а сейчас возникла необходимость, вот и спрашиваю куда копать.
Про таймеры немного не корректно выразился, обработка таймеров с последующим выводом на порт занимает много тактов(на сколько я знаю, могу ошибаться). Но собственно этот вопрос отпал с появлением AD9833.
Добавлено after 4 minutes 49 seconds:
phalanx, Спасибо за наводку.
Добавлено after 2 minutes 25 seconds:
shonty, Думать всегда нужно и придеться) Вопрос в базе готовых изделий и поиске оптимальноко направления куда копать. Я немного отстал о современной базы, а сейчас возникла необходимость, вот и спрашиваю куда копать.
Про таймеры немного не корректно выразился, обработка таймеров с последующим выводом на порт занимает много тактов(на сколько я знаю, могу ошибаться). Но собственно этот вопрос отпал с появлением AD9833.
Добавлено after 4 minutes 49 seconds:
phalanx, Спасибо за наводку.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Генератор из arduino
Нет. Есть программный способ.
No power-down, DAC powered down, Internal clock disabled, Both the DAC powered down and the internal clock disabled.
Но при необходимости установите аппаратный ключ.
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
Starichok51, Это в теории, в реальности у меня на 2МГц сигнал начинал сильно "искривляться" скорость порта уже не вытягивала, можно конечно было попробовать его поправить аппаратно, но это был всего-лишь экпиремент.
Добавлено after 1 minute 32 seconds:
veso74, Спасибо, буду разбираться.
Добавлено after 1 minute 32 seconds:
veso74, Спасибо, буду разбираться.
Re: Генератор из arduino
Нет там пина разрешения. Можно конечно это дело через дополнительную логику с разрешением выхода подключить.prizrack* писал(а):AD9833 вполне себе на первый взгляд, там есть пин (on/off)? извиняюсь за вопрос, просто сейчас некогда переводить даташит(
А если тупо на меге, то запускаете таймер на нужной частоте, вывод в порт, дальше по вкусу: или таймер останавливаете, или вывод в порт отключаете.
Или: таймер отмеряет определённый период, по прерыванию переключаете пин.. ведёте подсчёт импульсов...
-
prizrack*
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Пт авг 21, 2015 12:01:25
- Откуда: г. Орел
Re: Генератор из arduino
shonty, Спасибо, поиграюсь с AD9833, думаю так будет правильнее и запас по частоте у нее хороший, а пока она приедет попробую через таймеры и через порты мегу помучать.
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Генератор из arduino
prizrack*, это ты говоришь, не зная и не понимая работу МК.
у меня с тактовой 8 МГц без проблем получается 4 МГц на выходом пине.
не нужна тебе AD9833. всё делается на одном МК. и уж тем более не нужно отдельно МК для генератора и отдельно МК для управления этим генератором.
у меня с тактовой 8 МГц без проблем получается 4 МГц на выходом пине.
не нужна тебе AD9833. всё делается на одном МК. и уж тем более не нужно отдельно МК для генератора и отдельно МК для управления этим генератором.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Генератор из arduino
prizrack*, можно повторить любую конструкцию, "колесо" уже найдено. Есть идеи, которые можно взять.
Генератор с регулируемоей частотой на ардуино.
Генератор с регулируемоей частотой на ардуино.
Последний раз редактировалось veso74 Вт окт 29, 2024 12:30:20, всего редактировалось 1 раз.
Re: Генератор из arduino
Раз пошла такая пьянка 
Вот так примандырил к китайской плате с AD9833 генератор на 16.777.216

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

Вот так примандырил к китайской плате с AD9833 генератор на 16.777.216
Но топикстартеру свою задачу рациональнее на одном МК решить.
Добавлено after 10 minutes 43 seconds:
И кстати. На ардуиноресурсах пишут, что генерируют с китайских AD9833 модулей с дискретностью где 1Гц, где 0,1Гц.
Заведомо откровенное враньё. Без замены генератора такую дискретность не получить.
Но это лирика...
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Генератор из arduino
Из документации ИС: 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 Гц.
Re: Генератор из arduino
Частота выхода равна (Fтактирующая х FreqReg) / 2^28veso74 писал(а):Частотные регистры имеют ширину 28 бит: при тактовой частоте 25 МГц можно достичь разрешения 0,1 Гц; при тактовой частоте 1 МГц AD9833 можно настроить на разрешение 0,004 Гц.
Сможете получить из этой формулы 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
Смените язык писания кода
.
1 Hz будет: d = 10, freq -> 0,931322574615478515625 Hz.
0,1 Hz будет: d = 1, freq -> 0,0931322574615478515625 Hz.
Код: Выделить всё
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); // PHASE00,1 Hz будет: d = 1, freq -> 0,0931322574615478515625 Hz.
Последний раз редактировалось veso74 Ср окт 30, 2024 06:22:41, всего редактировалось 2 раза.
Re: Генератор из arduino
Да при чём тут язык)) По поводу языка это была иронияveso74 писал(а):Смените язык писания кода .
И для чего мне ваши коды? Они ничего не объясняют и не исправляют, даже неточности в даташите. Ну если только не свято верить в могущество ардуины
Для наглядности:
16.777.216 Гц/ 2^28 = 0,0625