Генератор с регулируемоей частотой на ардуино.

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

kloker, как написать вывод я знаю.  Подумать надо что можно сделать полезного на этой основе, и главное потом этот код встроить малой кровью в мою программу :)

Вот уже накатал примерчик: ГКЧ 20 Гц..20кГц,  (Для частот >20кГц  придёться уменьшать массив). В лупе меняется тактовая с таймера, и что-то типа примитивной экспоненты что-б на НЧ подолгу не зависало. Вывод через DMA в GPIOA для резисторного цапа.

#include <dma_private.h>
uint8_t wave[256]; //массив синусоиды
void setup() {
GPIOA_BASE->CRL = 0x33333333;// pa0-pa7  выход
for(uint16_t n=0; n<256; n++){wave[n]=255*(sin(TWO_PI*float(n)/256)+1)/2 ;}// заполнение синусом
TIMER2_BASE->DIER=(1<<8); //пинать DMA при событии Update
TIMER2_BASE->ARR=7000;// Freq_min примерно 20 Гц ( = 36MHz /256 /6999 )
TIMER2_BASE->CR1=1;
dma_init(DMA1);
dma_setup_transfer(DMA1,DMA_CH2,(uint8_t*)&GPIOA->regs->ODR,DMA_SIZE_8BITS, (uint8_t*)wave, DMA_SIZE_8BITS, (DMA_MINC_MODE|DMA_CIRC_MODE|DMA_FROM_MEM) );
dma_set_num_transfers(DMA1, DMA_CH2, 255);
dma_enable(DMA1, DMA_CH2);
}
void loop() {  
for (int n=7000; n>5; n-- ) { n/=1.005;  TIMER2_BASE->ARR=n; delay(5);}
for (int n=5; n<7000; n++ ) { n*=1.005; TIMER2_BASE->ARR=n; delay(5); }
}

Но встроить это в программу легко при условии что никакие параметры не будут регулироваться. Иначе куча рассчётов.. Можно сделать ещё лучше -  избавится от лупа и сделать ещё один массив ARR-значений для таймера, тактирующего вывод через DMA. Для этого понадобится ещё один таймер, в общем функция разрастётся в длинную портянку вычислений. Заниматься этой рутиной вообще не тянет (=

Ещё рождается новый вариант  синтеза dds -можно тактировать  DMA через таймер от внешнего сигнала с Si5351 Появиться преимущество - сильно снизиться джиттер, который довольно ощутимый есть в том алгоритме, что я использую сейчас. И за счёт линейности генерирования тактовой от si5351 можно будет получить довольно линейную регулировку выходной частоты dds , но есть и минусы -возникнет необходимость пересчитывать массив для разных диапазонов частот, ( с объёмом  массива 256 байт как в примере выше в принципе нельзя получить частоты выше ~23 кГц (=samplerate 6MHz/256) ) Правда тут ещё сложность -все входы тактирования заняты (A0,А12,А15).. разве что как то перехватывать вход частотометра А15. Но мудрить с переключением тоже не лучший выход.

В общем вот такие вот думки..

 

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

kloker, кстати намедни на радиокоте выложили проект генератора на F303, видели?  Он конечно в разных весовых категориях с моим. По всем возможностям обходит мой, его смело можно отнести в категорию "измерительный прибор" ибо и аппаратно и программно соответствует, таких широких возможностей у самоделок я вообще никогда раньше не видел (!). Автор основательно поработал.  Но в отличии от моей поделки  в сборке  сложен, - требует изготовления печатных плат,  подетальной пайки, в общем только для опытных радиолюбителей.  Пробежавшись по характеристикам всё таки нашёл узкое место- частота дискретизации в режиме DDS всего 1.4МГц   . (У моего 4,5 МГц при  F_CPU= 72MHz &&  выводе в встроенный цап ). А ещё немаловажно, что обещает автор - проект будет развиваться.

kloker
Offline
Зарегистрирован: 01.01.2019

 

dimax, спасибо за ссылку, почитаю обязательно! потолок всего 1.4МГц действительно выглядит странно, надо спросить у автора о причинах.. 

ps/ в статье о ГА71 не нашел ника автора, и ветки на форуме. ссылка ведет на корень форума. кто знает, где почитать подробнее, и следить за развитием проекта?

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

kloker, наверно причина низкого битрейта  в накрученных алгоритмах. У него ж 2 аналоговых канала, которые и суммироваться и умножаться, и модулироваться могут. Ну и конечно потому, что dds-алгоритм наверняка на "Си", а не ассемблере :)     Да, контактов автора почему-то нету. Наверное главкоту стоит написать, kot@radiokot.ru  что б  дал контакты  автора прибора.

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

К теме как отличить настоящий МК, сфоткал сейчас свой блюпил, у меня надписи читаются без труда (фотка кликабельна).

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

MAG-N пишет:
Так я выше сказал - замените на "Hz". Так будет правильнее.

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

а si5351 только меандр умеет выдавать? хотя конечно и цап неплохую форму выдает на довольно приличных частотах, но не на мегагерцах конечно. резисторы в делитель брал smd с допуском 1%.

с другой стороны, на десятках мегагерц у меня осциллографу становится наплевать на форму, все стремится к синусу. :) да и уровень невысок.

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

venus, ещё adg704 давит фронты. У него заявлена пропускная способность что-то вроде до  200 МГц, но под этой цифрой подразумевается синус :) Если я когда нибудь буду переносить в другой корпус, то коммутацию сделаю на релюшках, как Mag-N. Может даже шикану, и куплю мелкие вч-релюшки.

PS про Herz я как-то и незадумывался, с буквой t оно даже симметричнее смотрится, надо тоже исправить  :)

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

venus пишет:

релюшки надо завтра посмотреть, какие есть на работе, может попадутся подходящие.

Я герконовые поставил, у них при пяти вольтах ток срабатывания меньше 10 мА - подключены напрямую к выходам дешифратора 74138. Вот такие:

mataor
Offline
Зарегистрирован: 30.01.2014

по поводу реле - я тоже у себя использовал, в посте 81 писал. хз насколько высокочастотные, но мелкие, с 3.3в питанием и 30ма потреблением, по адекватной цене на али - G6K-2F-Y

да, если разводить - не стоит забывать что они имеют полярность.

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

В данной конструкции можно любые малогабаритные реле использовать. Это ведь не реле обхода антенного усилителя или РА, где ВЧ напряжение 100-200 В и более.

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

мне тоже палитра больше от red понравилась, так что в я него просто сдвиги из green добавил в ините.

загрузчик брал последний в теме. он, помнится, boot1 джампер использует вместо ресета, так что можно постоянно плату держать под прошивку. вот только у меня почему-то устройство usb только serial с pid=0004 появляется, а под прошивку pid=0003 упорно отсутствует, в том числе после добавления резистора с A12 на 3.3. и разъем microusb был дрянной родной, пропайка не помогла, поменял, но на usb-устройства само собой не повлияло. так что мне проще stlink'ом пользоваться. хотя в принципе неважно, девайс уже в корпус закинул, выбросив потроха из ростелекомовской iptv-приставки. брендовый девайс получился. :)

вольтметр зацеплен на аккум и немного подвирает, на 2%, на входе резистор больший воткнул без подбора. наверное, стоит коррекцию прямо в коде поставить.

не хватает разве что сохранения параметров и текущего режима. ну и регулируемого выходного напряжения.

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

Заметил одну особенность : очищаем память контроллера, заливаем загрузчик. Далее прошиваем хоть Блинк, хоть Графиктест или что-то подобное и так раз 20 подряд - всё прошивается без лишних телодвижений. Но стоит прошить любую версию данного генератора, и для следующей прошивки надо давить РЕСЕТ. Если затем опять загрузить что-то другое (через РЕСЕТ), то автоматическая загрузка восстанавливается. Загружаем генератор - и опять те же Я...  Положение джампера BOOT1 никак не влияет.

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

MAG-N, я вроде писал про это. В скетче отключается всё лишнее, в том числе прерывания USB, без них не работает USBCDC, который образует ком-порт, без него IDE не может инициировать загрузку бутлоадера.

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

в режиме pwm, если поставить шаг 1E4, на второе увеличение частота прыгает на 36MHz.

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

venus пишет:

в режиме pwm, если поставить шаг 1E4, на второе увеличение частота прыгает на 36MHz.

Это из-за того, что на частотах выше 8кГц нет привязки шага к герцам. Можно ввести доп условие:

  if (tim_arr<10000 && encstep > 10000) encstep=10000; // уменьшать шаг с ростом частоты

И тогда не будет так резко скакать.

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

чисто для частотометра http://www.radioscanner.ru/forum/topic38601.html

тот же фрегат, обвес отличается и питание одно. в принципе можно без селектора входов сделать, в виде внешнего щупа, только с питанием от прибора.

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

Собирал я этот формирователь (по номиналам деталей похож на тот, что с Радиосканнера)- и сейчас он работает, но у него нижний предел частоты был порядка нескольких сотен герц. Добился нижнего предела 1 Гц, для чего параллельно С2 поставил керамику 10 мкФ, а параллельно С7 и С10 - электролиты по 100 мкФ. При этом верхний предел упал где-то со 100 до 80 МГц. Мне нижний предел важнее был. А чувствительность - это питания полевику маловато, не зря в "Фрегате" он от 12В питается. В даташите на транзистор явно указано "VHF and UHF applications with 12 V supply voltage"

Tvics
Offline
Зарегистрирован: 12.04.2017

dimax, спасибо за генератор. Хороший приборчик, сделал усилитель на DDS OUT, но пока мучась идут искажения. Время будет доделаю.

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

MAG-N пишет:

IgorBorNN пишет:

А Вы не могли бы дать мне свой вариант, пожалуйста !!!?

http://wdfiles.ru/iVa3

Благодарю Вас, с наступающим новым годом !!! А скетч я что то в архиве не нашел.

С Новым годом! Скетч там есть - плохо искали :-)  9833_EEPROM.ino называется

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

MAG-N пишет:

IgorBorNN пишет:

MAG-N пишет:

IgorBorNN пишет:

А Вы не могли бы дать мне свой вариант, пожалуйста !!!?

http://wdfiles.ru/iVa3

Благодарю Вас, с наступающим новым годом !!! А скетч я что то в архиве не нашел.

С Новым годом! Скетч там есть - плохо искали :-)  9833_EEPROM.ino называется

Благодарю, я уже разобрался.

IgorBorNN
Offline
Зарегистрирован: 23.12.2015
venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

IgorBorNN, судя по всему, подойдет. в отзывах на аналогичный дисплей есть и контроллер - st7735, и замечания по подключению. https://aliexpress.ru/i/32812455774.html

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

Нормальный дисплейчик, скорее всего с контроллером 7735, так что ставьте :-)

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

Нормальный дисплейчик, скорее всего с контроллером 7735, так что ставьте :-)

[/quote]

Благодарю за ответы !!!! В скетче наверное нужно что то править ?

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

Нормальный дисплейчик, скорее всего с контроллером 7735, так что ставьте :-)

Благодарю за ответы !!!! В скетче наверное нужно что то править ?

[/quote]

Если в генератор, который в этой ветке обсуждается, то ничего править не надо.

А если в тот, что я выложил (на 9833) - то поменять библиотеку с 7789 на 7735 ну и всё, что с ней связано.

Я использовал дисплей 240х240 ST7789. Он махонький, 1.3 дюйма, подбирал под имеющийся корпус.

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

Доброго дня !!! Не могу подружить скетч с этим TFT экранчиком, и библиотеку поставил и скетч поправил, выдает ошибку и все, похоже надо серьезно что то в скече править, а я не силен !

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

IgorBorNN, не знаю, из какой версии библиотек вызов

tft.init(128, 160);

а если его заменить на что-то типа

tft.initR(INITR_BLACKTAB);

?

 

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

venus пишет:

а если его заменить на что-то типа

tft.initR(INITR_BLACKTAB);

?

Что я могу сказать, скомпилировалось, как себя поведет дальше в схеме щас до собираю посмотрю. Благодарю Вас за советы !!! С Уважением !

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

Что я могу сказать, скомпилировалось, как себя поведет дальше в схеме щас до собираю посмотрю. Благодарю Вас за советы !!! С Уважением !

А дальше надо будет весь вывод на дисплей подправить - у меня дисплей 240 точек по горизонтали, Ваш - 160

Вот для 7735, вроде рабочий  http://wdfiles.ru/6lv9

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

MAG-N пишет:

А дальше надо будет весь вывод на дисплей подправить - у меня дисплей 240 точек по горизонтали, Ваш - 160

Вот для 7735, вроде рабочий  http://wdfiles.ru/6lv9

[/quote]

Компилируется, прошил, схема работает а TFT тишина, ни какой информации

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

MAG-N пишет:

А дальше надо будет весь вывод на дисплей подправить - у меня дисплей 240 точек по горизонтали, Ваш - 160

Вот для 7735, вроде рабочий  http://wdfiles.ru/6lv9

Компилируется, прошил, схема работает а TFT тишина, ни какой информации

[/quote]

Проверьте дисплей, примеры из библиотеки запустите. Может в проводках запутались, всякое бывает. Скетчи рабочие, проверенные. Да, обратите внимание, что питается вся эта фигня от 3 вольт, пятивольтовые уровни данные дисплеи плохо переваривают. Сгореть не сгорит, но работать скорей всего не будет.

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

/quote]

Проверьте дисплей, примеры из библиотеки запустите. Может в проводках запутались, всякое бывает. Скетчи рабочие, проверенные. Да, обратите внимание, что питается вся эта фигня от 3 вольт, пятивольтовые уровни данные дисплеи плохо переваривают. Сгореть не сгорит, но работать скорей всего не будет.

[/quote]

Все запустил, работает, показания начинаются с 1кГц и самое главное что изменив частоту после выключения питания и включения частота не сохраняется. Еще момент, а как в скетче выставить так, чтоб частота при включении начиналась например с 250кГц ?

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

Все запустил, работает, показания начинаются с 1кГц и самое главное что изменив частоту после выключения питания и включения частота не сохраняется. Еще момент, а как в скетче выставить так, чтоб частота при включении начиналась например с 250кГц ?

В скетче для 7789 есть сохранение частоты и режима, надо нажать кнопку энкодера. Он и называется 9833_EEPROM. А если поменять частоту при запуске - есть строка, поставьте вместо 1000 - 250000 или сколько нужно.

unsigned long freq = 1000;               // Set initial frequency.

Вот старенькая версия, под экранчик 160х80, но тоже на контроллере 7735 - у него верхние и нижние строки обрезаны на 24 пикселя. Сохранение данных есть - по нажатию кнопки. Это я делал, пока другой дисплей ждал. Должно и на твоем дисплюе работать, только цвета могут не совпадать.

http://wdfiles.ru/6lxo

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

unsigned long freq = 1000;               // Set initial frequency.

Вот старенькая версия, под экранчик 160х80, но тоже на контроллере 7735 - у него верхние и нижние строки обрезаны на 24 пикселя. Сохранение данных есть - по нажатию кнопки. Это я делал, пока другой дисплей ждал. Должно и на твоем дисплюе работать, только цвета могут не совпадать.

http://wdfiles.ru/6lxo

[/quote]

Последняя версия работает только с 1 гц и прибавляет по 1 гц, даже в строке прописываю: unsigned long freq = 1000, все равно с одного герца начинает или с того места как сохранил в еепроме, а энкодер второй только переключает режим?

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

Вообще было бы не плохо переключать знак по частоте 1, 10 ки, 100и, 1000и, 10000, 100000 гц, я так и не пойму, какую роль играет второй энкодер, кнопка понятна а сам энкодер ?, вот на него бы и повесить переключение знака с права на лево !?

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

Последняя версия работает только с 1 гц и прибавляет по 1 гц, даже в строке прописываю: unsigned long freq = 1000, все равно с одного герца начинает или с того места как сохранил в еепроме, а энкодер второй только переключает режим?

Одним энкодером выбирается разряд, который нужно изменить, он вместо зелёного жёлтым подсвечивается, другим собственно показания меняются. Нажатия кнопок энкодеров - одна изменение сигнала - синус, треугольник и меандр, другая - сохранение данных. А стартовая  частота в версиях с ЕЕПРОМом и начинается с того, что там записано. После первого запуска надо покрутить ручки и сохранить, потому что после перепрошивки в ЕЕПРОМ  нолики или единички, Х его З, не помню, если фьюз EESAVE не взведён. В этой грёбаной Ардуино ИДЕ нет способа прописать что-то в ЕЕПРОМ при загрузке. Не из программы, а именно один раз при прошивке. Делал как мне надо, уж что вышло то вышло :-)  кто мешает под себя заточить ? Ничего хитрого там нет. Но это не я придумал, вот ссылка на оригинал http://www.vwlowen.co.uk/arduino/AD9833-waveform-generator/AD9833-waveform-generator.htm

Вот так он в готовом виде выглядит...

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

Маг, у меня не работает выбор разряда, не пойму почему, может энкодер ???!!! Я менял местами на частоте все переключает и тот и тот. Не пойму в чем дело !???

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

Маг, у меня не работает выбор разряда, не пойму почему, может энкодер ???!!!

Возможно, поменяй местами энкодеры, проверь ещё разок все проводочки. Вся эта электроника - наука о контактах - где надо не контачит, а где не надо  - наоборот. Попадаются некоторые модели энкодеров, у которых подвижный контакт не средний, а один из крайних. Сам на такие грабли наступал.

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

Я менял местами на частоте все переключает и тот и тот. Не пойму в чем дело !???

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

Я менял местами на частоте все переключает и тот и тот. Не пойму в чем дело !???

Проверь подключение энкодеров - один на D2, D3  другой на D5, D6, подвижный контакт на земле. Можно попробовать подтянуть линии данных к питанию через резисторы килоом 10 или вроде того. Ну и если провода длиной сантиметров 20-30 - тоже может не работать.

IgorBorNN
Offline
Зарегистрирован: 23.12.2015

Все, запустил и все работает, Ура........а !!! Дед очень рад, Вам огромное спасибо и всего наилучшего !!!

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

IgorBorNN пишет:

Все, запустил и все работает, Ура........а !!! Дед очень рад, Вам огромное спасибо и всего наилучшего !!!

Вот и отлично, другой дед тоже рад за Вас... :-)))

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

Если кто захочет повторить моё изделие с дисплеем на контроллере 7789 240х240, там есть один нюанс - в тех дисплеях, которые с АЛИ, нога CS наружу не выведена, а сидит на земле. Надо отпаять шлейф от платы, перерезать дорожку CS-GND (куда 8 нога шлейфа припаивается, она, зараза, под шлейфом расположена), припаять шлейф взад и вывести CS например на ногу BLK, отрезав её от транзистора, который управляет подсветкой. Подсветка работать будет, этот транзистор её выключает, по умолчанию она включена. На картинке самая левая, к R2 идёт. Без CS дисплей работать не будет - там два устройства на SPI. Есть ещё один способ - отрезать кусочек платы по щели, куда шлейф вставлен - там всего по 2-3 мм, отклеить саму стекляшку и не отпаивая шлейф всё это сделать.

kipigor7
Offline
Зарегистрирован: 27.12.2019

Приветствую!Подскажите в схеме данного генератора в ЦАП ,вместо 2к,можно ли использовать 1,8к(просто есть такие 1%)?Или и 1к тоже придется менять на другой номинал?

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

kipigor7, это цап R-2R. так что вместо каждого килоомного просто поставьте параллельно два 1.8K.

kipigor7
Offline
Зарегистрирован: 27.12.2019

Спасибо.Попробую.

man_200
Offline
Зарегистрирован: 29.04.2016

Блин! Который день уже мучаюсь с ИДЕ. Загрузил уже и 1.6.8, а она мне все равно пишет "Ошибка компиляции для платы Generic STM32F103C series". Все драйвера и библиотеки в неё вроде загрузил. Грешу только на кирилицу в адресации, может не прав?

nik182
Offline
Зарегистрирован: 04.05.2015

Да. Кириллицу очень не любит.

kipigor7
Offline
Зарегистрирован: 27.12.2019

Тоже долго мучился с прошивкой.У меня вышло сразу по этой статье-https://rcl-radio.ru/?p=68376

man_200
Offline
Зарегистрирован: 29.04.2016

kipigor7, спасибо за помощь, изменил путь на латиницу. Все равно не помогло - IDE выдавала ошибки. Только после загрузки архива с  IDE от Dimax, компиляция и загрузка прошли без проблем. Загрузка прошла, а на экране пусто, буду разбираться дальше