Jump to content

    
Topotun

DDS AD9834 на ATmega

Recommended Posts

Получил задание запрограммировать МК для управления AD9834. Я понимаю как он работает, за счёт чего и как, почитал документацию всю. Также примерно имею представление об основных этапах программирования, но с реализацией кода есть проблемы. Может кто этим делом занимался и может подкинуть что-либо для того, чтобы, так сказать, покопаться. До этого вообще дел с кодами не имел. 

Share this post


Link to post
Share on other sites

Надеюсь вы гуглили что-то вроде AD9834 + example code ?

Лично я начинаю кодить похожие микросхемы с описания структуры регистров управления и функций доступа к ним.

 

Share this post


Link to post
Share on other sites

На нашем форуме уже есть тема "ad9834" здесь:

Я сама, когда код для AD9834 писала, использовала оттуда ссылку ad9834_drv.zip

Там код написан под ATMega8515 и мне прошлось его переделывать только по части интерфейса SPI, т.к. у меня был контроллер ATxmega128A1, который хоть и AVR, но очень сильно отличается от ATMega8515 по части управления периферией.

 

А микросхему AD9834 покупала сразу в виде готового модуля у китайцев вот такого типа:

https://aliexpress.ru/item/32790171360.html

на нем уже генератор тактовой частоты на 75 МГц установлен и прочая обвязка, включая ВЧ-коннекторы.

 

Точно так же можно купить отдельно плату с контроллером, хотя бы Arduino (таких очень много продается), а потом "сломать" :) ее, переписав ей прошивку на свою. Если проект учебный, то лучше выбрать плату с USB-портом, чтобы напрямую с компьютером можно было бы стыковать. Иначе управление превратится в отдельный проект.

 

Правда у китайцев можно приобрести плату с AD9834, где уж стоит контроллер (STM32F103) c USB-коннектором:

https://aliexpress.ru/item/4000687606434.html

только тогда вам никто не поверит, что код сами писали :).

 

Share this post


Link to post
Share on other sites
1 час назад, Xenia сказал:

На нашем форуме уже есть тема "ad9834" здесь:

Да, я её уже читал, только ссылка у меня не работала особо(похоже из-за того, что не был зарегестрирован). Я уже много где по форумам прошерстил, довольно часто натыкался на полезную инфу от вас. Спасибо за помощь.

 

1 час назад, Lmx2315 сказал:

Надеюсь вы гуглили что-то вроде AD9834 + example code ?

Как я только не искал, у меня уже все ссылки в гугле вплоть до 10 страницы и дальше просмотрены. Спасибо за помощь.

Share this post


Link to post
Share on other sites
6 минут назад, Topotun сказал:

Как я только не искал, у меня уже все ссылки в гугле вплоть до 10 страницы и дальше просмотрены. Спасибо за помощь.

А вы на каком уровне ищете - чтобы всё было готово ввиде связки AD9834 и атмега? Так вы можете всю жизнь искать.

https://www.electronics-lab.com/project/tiny-dds-open-source-dds-generator/   - с первой страницы поиска , внизу страницы по ссылке лежит проект:

tiny-DDS-master.zip  

В проекте есть папка drv где можно найти файлы AD9834.с и AD9834.h  и применить их у себя.

Share this post


Link to post
Share on other sites
3 минуты назад, Lmx2315 сказал:

А вы на каком уровне ищете - чтобы всё было готово ввиде связки AD9834 и атмега?

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

13 минут назад, Lmx2315 сказал:

В проекте есть папка drv где можно найти файлы AD9834.с и AD9834.h  и применить их у себя.

Всё нашёл, пойду копаться. Ещё раз спасибо за помощь.

П.С. Меня звук уведомлений на этом форуме чуть до икоты не довёл...

Share this post


Link to post
Share on other sites
7 часов назад, Lmx2315 сказал:

А вы на каком уровне ищете - чтобы всё было готово ввиде связки AD9834 и атмега? Так вы можете всю жизнь искать.

https://www.electronics-lab.com/project/tiny-dds-open-source-dds-generator/   - с первой страницы поиска , внизу страницы по ссылке лежит проект:

tiny-DDS-master.zip  

В проекте есть папка drv где можно найти файлы AD9834.с и AD9834.h  и применить их у себя.

Зря вы этот проект новичку советуете - он сложный.

Share this post


Link to post
Share on other sites
12 часов назад, Xenia сказал:

Зря вы этот проект новичку советуете - он сложный.

Может и так.

Вот ещё совет - этот DDS надо поискать на радиолюбительских сайтах CQHAM.ru например .

Там точно есть открытые проекты на нём.

 

Share this post


Link to post
Share on other sites
1 час назад, Lmx2315 сказал:

Вот ещё совет - этот DDS надо поискать на радиолюбительских сайтах CQHAM.ru например .

Там точно есть открытые проекты на нём.

Для того, чтобы что-то искать, нужно понимать предмет поиска. Тогда как в данной теме вопрос стоит не о том, чтобы собрать как можно больше проектов, в названии которых есть слово "AD9834", а найти среди них тот, что по-проще, который не только можно было бы бездумно скомпилировать, но и хотя бы в общих чертах понять новичку, который до этого вообще никаких микроконтроллеров еще не программировал.

 

Поэтому мой совет (использовать проект ad9834_drv.zip с этого форума) был обдуманным советом: я сама его когда-то выбрала из нескольких десятков именно благодаря его простоте (всего два файла = ad9834.c + ad9834.h), а потому и советую.

 

Тогда как вы, по-видимому, вовнутрь проекта, который рекомендовали, даже не заглядывали. А между тем в нем 218 файлов, среди которых есть и поддержка графического дисплея с тачскрином, и файловая система на SD-карте, и ЦАП AD5310, и счетчик реального времени, и много чего еще (оттого и в проекте так много файлов). Изолировать из этого проекта часть, относящуюся к AD9834, не так-то просто, а без вникания в логику этого проекта, так и совсем невозможно, а тем более новичку. Если я вас спрошу "для какого микроконтроллера написан рекомендуемый вами проект?", так вы и не ответите, т.к. даже этим вы, скорее всего, не поинтересовались, а лишь продемонстрировали свою способность прочесть 1-ую страницу, которую вам выдал Google.

 

На сайте CQHAM.ru искать коды без толку - радиолюбители обычно используют DDS для синтеза несущей частоты в своих радиоконструкциях, но схематику и программный код, как правило, заимствуют в других местах, мало что в том коде понимая. Я уже имела опыт переговоров с ними и была крайне разочарована их результатами. Хотя признаю, что там есть и выдающиеся проекты вроде того, что сейчас разрабатывается на основе STM32H7 (проект "Малахит-DSP"), где уровень автора проекта очень высок. А на AD9834 когда-то был основан проект "Маламут" (я с его автором даже в переписку вступала), но потом он заменил в своем проекте AD9834 на AD9852.

 

P.S. Тем не менее, топикстартер этой темы скрывает тип своего контроллера и даже умалчивает о том, выбрал ли он его окончательно или находится в раздумьях. Честно говоря, не хочется помогать таким людям, которые просят помочь им "запрограммировать МК", при этом не понимая, что прежде должны называть тип этого МК. Т.е. сложилось впечатление, что это просто студент, которому надо лишь побыстрее спихнуть лабораторную работу, как можно меньше утруждая свои мозги.

Share this post


Link to post
Share on other sites

Перед поиском исходников для заимствования надо решить какая архитектура контроллера используется- с аппаратаным SPI интерфейсом или "дрыгоножество" а-ля AVR. От этого философия кода весьма меняется.

Чтобы не было оффтопика- 9834 имеет одну интересную фичу- аппаратное переключение FTW по внешнему сигналу. Использовал ли кто  9834 в качестве дробного ДПКД в петле синтеза, управляя входом fselect от дельта-сигма модулятора?

Share this post


Link to post
Share on other sites
27 минут назад, khach сказал:

Перед поиском исходников для заимствования надо решить какая архитектура контроллера используется- с аппаратным SPI интерфейсом или "дрыгоножество" а-ля AVR. От этого философия кода весьма меняется.

В том и прелесть :) проекта ad9834_drv.zip, что для обращения к AD9834 по SPI используется всего одна функцию - SPI_WriteDDS(), перед употреблением которой требуется один разок вызвать функцию инициализации SPI-периферии - SPI_Init(). Реализация этих обеих функций вынесена в другой модуль spi.c. При этом оказывается, что только код spi.c является архитектурно зависимым, а код ad9834.c всегда один и тот же. Это позволяет написать "самодельную" функцию SPI_Init() которая бы устанавливала частоту SPI-клока в 1 МГц и передачу по переднему фронту. А вторая функция SPI_WriteDDS() - просто ожидание  готовности (окончание предыдущей передачи) и запуск на передачу содержимого буфера. Очевидно, что эти две функции можно написать для любой архитектуры - не только для AVR (нативный код там именно такой), но и для дешевого STM32, где функции такого рода давным-давно написаны.

Share this post


Link to post
Share on other sites
3 часа назад, Xenia сказал:

На сайте CQHAM.ru искать коды без толку - радиолюбители обычно используют DDS для синтеза несущей частоты в своих радиоконструкциях, но схематику и программный код, как правило, заимствуют в других местах, мало что в том коде понимая. Я уже имела опыт переговоров с ними и была крайне разочарована их результатами. Хотя признаю, что там есть и выдающиеся проекты вроде того, что сейчас разрабатывается на основе STM32H7 (проект "Малахит-DSP"), где уровень автора проекта очень высок. А на AD9834 когда-то был основан проект "Маламут" (я с его автором даже в переписку вступала), но потом он заменил в своем проекте AD9834 на AD9852.

Вы противоречите сами себе и фактам.

p/s/

Тот проект что посоветовал , я конечно не изучал  - но нашел файлы описания функций DDS и счел их достаточными, указал их ТС.

Когда то я начинал как ТС и мне также надо было программировать с авеэрки DDS. Мне хватило пары целебных пинков с профильных форумов и поиск в гугле.

Share this post


Link to post
Share on other sites
06.01.2021 в 15:37, Xenia сказал:

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

Таки да, моя ошибка. На момент написания первого сообщения я ещё не выбрал конкретный МК.  

Share this post


Link to post
Share on other sites
2 минуты назад, Topotun сказал:

Таки да, моя ошибка. На момент написания первого сообщения я ещё не выбрал конкретный МК.  

Для программирования AD9834 это абсолютно не важно. В идеале ваш код  должен быть никак не привязан к реализации интерфейсов между мк и dds.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.