DDS генератор на Arduino + AD9850

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

dimax пишет:

Ardudue, изучал, но практически не использовал, для чего? Приёмники не проверить, у них частоты не те, да и купить фм-трансмиттер за 100руб если что не проблема.  А фазу двигать не трудно, для этого желательно подключить модуль в паралельном режиме,  и после установки частоты отсылать только изменённый первый байт данных, в котором 5  старших бит отвечают за фазу.

"Для управления частотой (и даже фазой) в м/с AD9850 необходимо загружать последовательно 40 бит информации (макс. частота смены частот более 3 МГц :) "
 

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

ua6em, я конечно иногда ошибаюсь, но не в этот раз :) Единственно что - возможно, что эта фича только в паралельном режиме работает, я в нём сам работаю, и проверял. PS:  Там и в даташите сносочка есть на этот счёт: To update W0 it is not necessary to load W1 through W4. Simply load W0 and assert FQ_UD. To update W1, reload W0 then W1— users do not have random access to programming words.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

можно попробовать в последовательном загружая только w0

то из инструкции 1997 года были данные

я к тому что модулировать можно

Mining
Offline
Зарегистрирован: 31.01.2016

ua6em пишет:

можно попробовать в последовательном загружая только w0

то из инструкции 1997 года были данные

я к тому что модулировать можно

Так модулируют. Иван выложил скетч и даже ссылку на видео дал. Вот все работает https://youtu.be/FJdQhJg-_6k . А в статье коллега SV1RME  так и пишет чтобы достичь скорости передачи в AD9850 надо использовать SPI interface.

  1. SPI transfer. Since we can made the ADC to sample so fast the incoming audio must be modulated and transferred to the DDS fast enough so we can hear something on our reciever. Simple serial is very far from speed because it uses easy to write but slow functions that costs processing many many clock cycles. On the other side, using the hardware SPI interface gives us the opportunity to send the 40bit tuning word using only 3 wires, and in less than 20μS time. So here we are talking serious… 20μS for data transfer and 20μS for our analog read makes us around 40μS. Also the modulation math inside the code may take us around 4μS more so what are we dealing with is a overall time of 44μS. That means after doing the math, that the FM modulation is occurring at around 16kHz sample rate. Pretty good that we can hear the highs of the drums from a song.!!!!

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

SV1RME даже SSB модуляцию на AD9850 реализовал, интересно!!!

Ardudue
Offline
Зарегистрирован: 31.08.2016

Ivan_Kornege пишет:

Ardudue пишет:

dimax, Вы случайно не разбирались с функцией сдвига фазы в AD9851?

Можно ли управлять сдвигом фазы с помощью Arduino?

Пытаюсь сделать FM модуляцию на базе AD9851 под управлением Arduino .

Посмотрите здесь

Что получилось у автора https://youtu.be/FJdQhJg-_6k

Пытался разобраться с проектом, но не доковырял

//More info http://zissisprojects.wordpress.com/arduino-sdr-ad9850
// https://zissisprojects.wordpress.com/2014/02/10/all-digital-fm-modulation-w-arduino-ad9850 

#include <SPI.h>
uint32_t frequency = 694000;                  //The desired frequency must be divided by 50 ex. 34,7MHz/50 = 694000
uint32_t tword = frequency * 3436 / 100;      //tuning word calculation
byte W[5] = {0,0,0,0,0};
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);  //these are the prescalers for the ADC sampling rate.
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_16 = (1 << ADPS2);
int mic = 512;

void setup()
          {
            
            DDRB = B01100000;                          //portb has outputs, PB5(may be used for reset) PB6(FU_UD pin)
            PORTB = 0x00;
           // Serial.begin(115200);                    // everything can be controlled by serial comm
             pinMode (A0,INPUT);                       // here comes the audio frequency in
            SPI.setDataMode(SPI_MODE0);                // mode 0 seems to be the right one //Функция устанавливает режим работы шины SPI, задавая уровень сигнала синхронизации и фазу синхронизации. http://arduino.ru/Reference/Library/SPI/setDataMode
            SPI.setClockDivider(SPI_CLOCK_DIV2);       // this is pretty fast //Устанавливает делитель частоты синхронизации SPI к частоте контроллера. http://arduino.ru/Reference/Library/SPI/setClockDivider
            SPI.setBitOrder(LSBFIRST);                 // AD9850 wants LSB first // SPI.setBitOrder(LSBFIRST); -Функция устанавливает порядок вывода даннах в/из шины SPI,  может быть LSBFIRST (наименьший разряд(бит) первый) или MSBFIRST (старший разряд первый). Вывод будет MSBFIRST с первого (левого) бита http://arduino.ru/Reference/ShiftOut
                                                       // http://arduino.ru/Reference/Library/SPI/setBitOrder
            SPI.begin();                               
                                                       // set up the ADC
            ADCSRA &= ~PS_128;                         // remove bits set by Arduino library
            ADCSRA |= PS_32;                           // setting the sampling rate at 16MHz/32 this makes the analogRead() complete in around 40μs
            
          }

void loop()
  {    mic = analogRead(A0);                           //reading the AF signal
       frequency = 694000 + 3*mic-1536;                //this is the Frequency Modulation. Desired frequency is divided by 50 and then around 75khz deviation is calculated depending on the input amplitude
       tword = frequency * 1718;                       //calculating the tuning word for AD9850
              W[0] = (byte) tword;
              W[1] = (byte) (tword >> 8);
              W[2] = (byte) (tword >> 16);             //converting it to bytes
              W[3] = (byte) (tword >> 24);
              W[4] = 0; //phase zero
                                                       //start sending with spi interface
                 PORTB = B01000000;
                 PORTB = 0x00;                         //pulse FU_UD
                for (int j = 0; j<5;j++)
           {
             SPI.transfer(W[j]);                       //send the word
           }
                 PORTB = B01000000;
                 PORTB = 0x00;                         //pulse FU_UD
          
  }

 

Спасибо. Но этот проект видимо подходит только для AD9850 , не работает с AD9851. 

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

Ardudue, у этих чипов насколько мне известно полная  совместимость, отличие только программное - в конфигурационном байте, ну и в тактовой частоте. Но вы ж вроде хотели фазовую модуляцию? Там-то частотная..

Ardudue
Offline
Зарегистрирован: 31.08.2016

dimax пишет:

Ardudue, у этих чипов насколько мне известно полная  совместимость, отличие только программное - в конфигурационном байте, ну и в тактовой частоте. Но вы ж вроде хотели фазовую модуляцию? Там-то частотная..

Так вот как раз програмный код и не подходит от 9850. Как сделать не знаю. Так я и писал что пытаюсь сделать FM модуляцию. Это и есть Frequency modulation

В статье по ссылке от Ivan_Kornege автор пишет All Digital FM modulation 

 

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

Ardudue, вы ж писали русским по белому -про сдвиг фаз. Я и подумал что про фазовую модуляцию, иначе нафига фазы двигать.   А частотная модуляция -это совершенно другое. Вообще по моему мнению задействовать этот чип под то, чем занимается автор по ссылке -это изврат. Какая практическая польза?  Есть однокристальные fm-трансмиттеры. Обладают гораздо большими возможностями при смешной цене. На AD9851 делают великие вещи, типа многофункционального прибора, ГКЧ, АЧХ-метр с рисованием графиков и куча прочих радиолюбительтских мечтаний в одном. Вот это штука классная, польза реальная.. Сам бы сделал, но лень)

Ardudue
Offline
Зарегистрирован: 31.08.2016

dimax, я так понял в AD9851 надо включить множитель на х6 . Кварц то 30 МГц стоит в модуле. Но как это сделать в этом проекте я не знаю. Может подскажете, если разобрались с AD9851?

//More info <a href="http://zissisprojects.wordpress.com/arduino-sdr-ad9850" rel="nofollow">http://zissisprojects.wordpress.com/arduino-sdr-ad9850</a>
// <a href="https://zissisprojects.wordpress.com/2014/02/10/all-digital-fm-modulation-w-arduino-ad9850" rel="nofollow">https://zissisprojects.wordpress.com/2014/02/10/all-digital-fm-modulation-w-arduino-ad9850</a> 

#include <SPI.h>
uint32_t frequency = 694000;                  //The desired frequency must be divided by 50 ex. 34,7MHz/50 = 694000
uint32_t tword = frequency * 3436 / 100;      //tuning word calculation
byte W[5] = {0,0,0,0,0};
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);  //these are the prescalers for the ADC sampling rate.
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_16 = (1 << ADPS2);
int mic = 512;

void setup()
          {
            
            DDRB = B01100000;                          //portb has outputs, PB5(may be used for reset) PB6(FU_UD pin)
            PORTB = 0x00;
           // Serial.begin(115200);                    // everything can be controlled by serial comm
             pinMode (A0,INPUT);                       // here comes the audio frequency in
            SPI.setDataMode(SPI_MODE0);                // mode 0 seems to be the right one //Функция устанавливает режим работы шины SPI, задавая уровень сигнала синхронизации и фазу синхронизации. <a href="http://arduino.ru/Reference/Library/SPI/setDataMode" rel="nofollow">http://arduino.ru/Reference/Library/SPI/setDataMode</a>
            SPI.setClockDivider(SPI_CLOCK_DIV2);       // this is pretty fast //Устанавливает делитель частоты синхронизации SPI к частоте контроллера. <a href="http://arduino.ru/Reference/Library/SPI/setClockDivider" rel="nofollow">http://arduino.ru/Reference/Library/SPI/setClockDivider</a>
            SPI.setBitOrder(LSBFIRST);                 // AD9850 wants LSB first // SPI.setBitOrder(LSBFIRST); -Функция устанавливает порядок вывода даннах в/из шины SPI,  может быть LSBFIRST (наименьший разряд(бит) первый) или MSBFIRST (старший разряд первый). Вывод будет MSBFIRST с первого (левого) бита <a href="http://arduino.ru/Reference/ShiftOut" rel="nofollow">http://arduino.ru/Reference/ShiftOut</a>
                                                       // <a href="http://arduino.ru/Reference/Library/SPI/setBitOrder" rel="nofollow">http://arduino.ru/Reference/Library/SPI/setBitOrder</a>
            SPI.begin();                               
                                                       // set up the ADC
            ADCSRA &= ~PS_128;                         // remove bits set by Arduino library
            ADCSRA |= PS_32;                           // setting the sampling rate at 16MHz/32 this makes the analogRead() complete in around 40μs
            
          }

void loop()
  {    mic = analogRead(A0);                           //reading the AF signal
       frequency = 694000 + 3*mic-1536;                //this is the Frequency Modulation. Desired frequency is divided by 50 and then around 75khz deviation is calculated depending on the input amplitude
       tword = frequency * 1718;                       //calculating the tuning word for AD9850
              W[0] = (byte) tword;
              W[1] = (byte) (tword >> 8);
              W[2] = (byte) (tword >> 16);             //converting it to bytes
              W[3] = (byte) (tword >> 24);
              W[4] = 0; //phase zero
                                                       //start sending with spi interface
                 PORTB = B01000000;
                 PORTB = 0x00;                         //pulse FU_UD
                for (int j = 0; j<5;j++)
           {
             SPI.transfer(W[j]);                       //send the word
           }
                 PORTB = B01000000;
                 PORTB = 0x00;                         //pulse FU_UD
          
  }

 

Ardudue
Offline
Зарегистрирован: 31.08.2016

dimax пишет:

Ardudue, вы ж писали русским по белому -про сдвиг фаз. Я и подумал что про фазовую модуляцию, иначе нафига фазы двигать.   А частотная модуляция -это совершенно другое. Вообще по моему мнению задействовать этот чип под то, чем занимается автор по ссылке -это изврат. Какая практическая польза?  Есть однокристальные fm-трансмиттеры. Обладают гораздо большими возможностями при смешной цене. На AD9851 делают великие вещи, типа многофункционального прибора, ГКЧ, АЧХ-метр с рисованием графиков и куча прочих радиолюбительтских мечтаний в одном. Вот это штука классная, польза реальная.. Сам бы сделал, но лень)

если синусоидальный модулирующий сигнала - результаты частотной и фазовой модуляции совпадают.

Именно и хочу сделать радиолюбительские приборы ГКЧ и АЧХ в проекте.

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

Ardudue пишет:

я так понял в AD9851 надо включить множитель на х6 . Кварц то 30 МГц стоит в модуле. Но как это сделать в этом проекте я не знаю. Может подскажете, если разобрались с AD9851?

Это как раз самое простое. В строчке W[4] = 0; поставить вместо ноля единичку. Посложнее будет  скорректировать частоту, там автор что-то мудрил с пересчётом. Но по идее должно заработать и без пересчёта константы, просто частота будет в 180/120= 1,5  раза больше рассчётной. 

Ardudue пишет:

Именно и хочу сделать радиолюбительские приборы ГКЧ и АЧХ в проекте.

Ну и делайте прибор, зачем терять время на эту фигню? гугль расскажет что где и как, забейте в поиск nwt-7

на всяк случай

Что такое NWT и его параметры

Ardudue
Offline
Зарегистрирован: 31.08.2016
dimax, спасибо за ссылки -изучаю.
 
dimax пишет:

Ardudue пишет:

я так понял в AD9851 надо включить множитель на х6 . Кварц то 30 МГц стоит в модуле. Но как это сделать в этом проекте я не знаю. Может подскажете, если разобрались с AD9851?

Это как раз самое простое. В строчке W[4] = 0; поставить вместо ноля единичку. Посложнее будет  скорректировать частоту, там автор что-то мудрил с пересчётом. Но по идее должно заработать и без пересчёта константы, просто частота будет в 180/120= 1,5  раза больше рассчётной. 

А почему автор дает такой комментираий " W[4] = 0; //phase zero " ? Или этот код относится только к 9850?
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Ardudue пишет:

А почему автор дает такой комментираий " W[4] = 0; //phase zero " ? Или этот код относится только к 9850?

И к 9851, а что непонятного? Регистр заведует и фазой, и ещё парой бесполезных параметров.

Ardudue
Offline
Зарегистрирован: 31.08.2016

Спасибо! Буду экспериментировать.

Joiner
Offline
Зарегистрирован: 04.09.2014

Вчера получил модуль AD9850. Долго маялся, не мог запустить демку. Не хотел работать ни в какую. Потом покрутил подстроечник на модуле и он завелся.

Вот миллионная картинка осциллограмм

Выглядит вполне прилично на частоте примерно 1.2 мегагерца. На максимальной гораздо корявее. Но думаю, что вполне пойдет, тем более собрано на макетке.

Будем изучать, засовывать в корпус.

Прямоугольничек на этой частоте тоже хорош. Время спада и подъема 14-16 наносек.

 

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

Joiner, подстроечник задаёт точку опоры компаратора, и влияет только на выход прмямоугольного сигнала. На синус он никак не влияет.. и по поводу кривости посмотрите пост 41 :)

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, подстроечник задаёт точку опоры компаратора, и влияет только на выход прмямоугольного сигнала. На синус он никак не влияет.. и по поводу кривости посмотрите пост 41 :)

Пока я его не покрутил, модуль не работал. Не знаю почему. Может в каких-то крайних положениях перестает работать?

Ваш осцил. из другой весовой категории. На нем картинка изумительная, и модуль, скорее всего не на соплях подключен. У меня на 12 мегагерцах прямоугольный сигнал становится безобразно корявый, с глубоим седлом на полках.

P.S. Отключил фильтр высоких на осц. , прямоугольник на частоте 1.2мегагерца стал со всплесками на краях, но время спада-нарастания стало 5-7 наносекунд. На других генераторах (NE555, XR2206, транзистор-тестер) время спада нарастания было гораздо больше.

Теперь остается выбрать проект генератора для повторения. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А самому ))) В связке с одной из этих микросхем будет шикарный генератор

AD815ARB-24 AD815ARBZ-24 AD815 SOP-24

Joiner
Offline
Зарегистрирован: 04.09.2014

ua6em пишет:

....... с одной из этих микросхем будет шикарный генератор

AD815ARB-24 AD815ARBZ-24 AD815 SOP-24

Это что за микросхемы. Погуглил, ни чего не понял....понял только  120 мегагерц...

Пока настроен попробовать генератор в этой теме с дисплейчиком от Nokia от AVGN. 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

да, 120 мегагерц, 3,5 ватта на нагрузке 100 ом, микросхема усилителя для VDSL модемов

Joiner
Offline
Зарегистрирован: 04.09.2014

ua6em пишет:

да, 120 мегагерц, 3,5 ватта на нагрузке 100 ом, микросхема усилителя для VDSL модемов

Понял, спасибо. Да, усилитель для генератора обязательно нужен.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я эту связку буду реализовывать для генератора под катушку Мишина, всё есть, даже кусок программы уже собрал, кстати эти микросхемы бывают и в исполнении типа TDA7056, одно и друхрядного формования ног, но цена не гуманная 400 рублей корпус

Joiner
Offline
Зарегистрирован: 04.09.2014

ua6em пишет:

........... цена не гуманная 400 рублей корпус

Что такое 400р, если есть цель?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Joiner пишет:

ua6em пишет:

........... цена не гуманная 400 рублей корпус

Что такое 400р, если есть цель?

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

Joiner
Offline
Зарегистрирован: 04.09.2014

ua6em пишет:

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

Мне из всех микросхем, которые попробовал, больше всех AD9850 понравилась, понравилась точностью установки и стабильностью частоты. Знаю, что есть что-то гораздо лучше, даже тот же готовый в корпусе китайский двухканальный генератор сигналов произвольной формы за 3500р. Но я не такой крутой электронщик, что достоин такого генератора :). Попробую что-то слепить на AD9850......может что-то и получится.....хотя это не самый лучший путь.

Morroc
Offline
Зарегистрирован: 24.10.2016

Зависит от того какие вас частоты интересуют и насколько чистый сигнал. К примеру у AD9951 14 бит ЦАП (у AD9850 10 бит) и 400 МГц тактовая (против 125) - оно конечно получше (особенно от 20 МГц и выше), но в виде готового недорогого модуля не видел (платы/схемы можно найти, я собирал). Если синус не интересует - есть интересная недорогая микросхема si5351 (в виде модуля можно купить), может генерить 2 частоты одновременно, для всяких простых приемников/передатчиков вполне годится.

Joiner
Offline
Зарегистрирован: 04.09.2014

Morroc пишет:

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

Да я приемниками-передатчиками пока не интересуюсь, мне нужен простой генератор сигналов для разных опытов. Мне бы XR2206 вполне хватило бы, но не понравилась установка частоты....а так по всем характеристикам для меня вполне покатил бы. На ней легко сделать и синус, и прямоугольник, и пилу (прямую и обратную), и мегагерца мне вполне пока хватает, но установка частоты переменным резистором.....жуть. Но тем не менее уже удалось с ее помощью установить собственный резонанс импульсного трансформатора....примерно (потому, что переменным резистором точно установить частоту не удалось).

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Joiner пишет:

Morroc пишет:

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

Да я приемниками-передатчиками пока не интересуюсь, мне нужен простой генератор сигналов для разных опытов. Мне бы XR2206 вполне хватило бы, но не понравилась установка частоты....а так по всем характеристикам для меня вполне покатил бы. На ней легко сделать и синус, и прямоугольник, и пилу (прямую и обратную), и мегагерца мне вполне пока хватает, но установка частоты переменным резистором.....жуть. Но тем не менее уже удалось с ее помощью установить собственный резонанс импульсного трансформатора....примерно (потому, что переменным резистором точно установить частоту не удалось).

Это надо точный многооборотный проволочный с планетарной ручкой настройки, есть такой, от какого-то девайса СССР

Morroc
Offline
Зарегистрирован: 24.10.2016

Угу. Я брал подобные для блока питания у кого то на радиокоте с ручками-счетчиками, сейчас смотрю тему ужалили уже - может кончились. Ну и частотомер добавить - для опытов на НЧ вполне достаточно :)

Joiner
Offline
Зарегистрирован: 04.09.2014

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

Что-то ни как не врублюсь где моя ошибка.

P.S. Генератор генерит то, что написано на дисплее.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

Joiner
Offline
Зарегистрирован: 04.09.2014

Все понял. Пришлось немного внимательнее почитать скетч. Спасибо. Буду доделывать.

P.S. Работает так - ардуинка загружается, выводится заставка, через несколько секунд переходит в рабочий режим (показывает частоту 1000.0000 , Шаг 1.0000 , потом какой-то 0 и за ним много звезд, не понимаю пока что это означает, а внизу постоянная надпись ГЕНЕРАТОР и про диапазоны). Кручу энкодер против часовой, показания от 1000.0000 не меняются, по часовой - растут по 1 килогерцу, как и обещано, на осцилографе соответствующий сигнал. Нажимаю кнопку энкодера - верхняя цифа становится 0.0010, и если при нажатой покрутить по часовой, то начинают расти по единичке показания целой части. При отпускании кнопки все возвращается как было при запуске. Непонятненько........

P.S. Спрыгнул на другой проект. Случайно наткнулся. Показалось, немного интереснее.... Ухожу в изучение https://frompinskto.wordpress.com/2016/09/19/arduino-dds-%D1%81%D0%B8%D0%BD%D1%82%D0%B5%D0%B7%D0%B0%D1%82%D0%BE%D1%80-%D1%87%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%8B-%D0%BD%D0%B0-%D0%B1%D0%B0%D0%B7%D0%B5-ad9851-%D0%BF%D0%BE%D0%B4-%D1%83%D0%BF%D1%80/

Joiner
Offline
Зарегистрирован: 04.09.2014

Программисты, подскажите пожалуйста что это такое

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

 

Morroc
Offline
Зарегистрирован: 24.10.2016

Это макрос чтобы "дернуть ножкой". FQ_UD в AD9850 наподобие защелки в 595м регистре (On the rising edge of this clock, the DDS updates to the frequency (or phase)loaded in the data input register). Вот после того как все биты в AD отправлены дергаем ножкой этим макросом.

Joiner
Offline
Зарегистрирован: 04.09.2014

Morroc пишет:

Это макрос .........

Спасибо. Правда я не совсем осознал..... :(

Поищу в скетче, как он используется, может что и пойму.....

Спасибо.

P.S. Что-то нашел....          pulseHigh(RESET); , например,  оно наверное побыстренькому пин RESET переводит в High а потом быстренько в LOW

Morroc
Offline
Зарегистрирован: 24.10.2016

И тут еще

int32_t freq = frequency * 4294967295/125000000;

for (int b=0; b<4; b++, freq>>=8) { tfr_byte(freq & 0xFF); }

tfr_byte(0x000);

pulseHigh(FQ_UD);

Похожая тема, но с уклоном в радиосвязь есть тут http://www.cqham.ru/forum/showthread.php?29944-%D1%E8%ED%F2%E5%E7%E0%F2%EE%F0-%E7%E0-%EF%EE%EB%F7%E0%F1%E0

Joiner
Offline
Зарегистрирован: 04.09.2014

Morroc пишет:

И тут еще....

Спасибо.

Joiner
Offline
Зарегистрирован: 04.09.2014

Запустил сегодня на макетке свой генератор с дисплейчиком Nokia5110. Пока сделал просто генератор. Использовал проект по ссылке выше(пост83) и скетч AVGN. Показалось, что AVGN черпал вдохновение там же.

Результаты порадовали. Сделал диапазон частоты 1герц - 10мегагерц. Порадовало, что в этом диапазоне амплитуда стабильная, около 1 в. Вся конструкция питается от источника 3.3 вольта. Очень удобно управлять частотой, менять без остановки генерации с любым шагом, изменяемым так же на лету.

В дальнейшем хочу добавить ГКЧ. Модуляцию и ПЧ, как у автора, делать не буду.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Joiner пишет:

Запустил сегодня на макетке свой генератор с дисплейчиком Nokia5110. Пока сделал просто генератор. Использовал проект по ссылке выше(пост83) и скетч AVGN. Показалось, что AVGN черпал вдохновение там же.

Результаты порадовали. Сделал диапазон частоты 1герц - 10мегагерц. Порадовало, что в этом диапазоне амплитуда стабильная, около 1 в. Вся конструкция питается от источника 3.3 вольта. Очень удобно управлять частотой, менять без остановки генерации с любым шагом, изменяемым так же на лету.

В дальнейшем хочу добавить ГКЧ. Модуляцию и ПЧ, как у автора, делать не буду.

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

по этой схеме?

Joiner
Offline
Зарегистрирован: 04.09.2014

Да, но немного пины поменял. И дисплей у меня от Nokia5110. Не люблю я что-то дисплеи 16х2.

AVGN
Offline
Зарегистрирован: 10.10.2016

Joiner, вдохновение я черпал у коллеги и в своей мастерской ;) . История проекта здесь . Схему не чертил, подключение в скетче расписал. На дисплее у Вас неправильно выводится информация, потому что я перепилил библиотеку. Как сюда прицепить файл библиотеки что-то не могу найти. Вот отсюда скачайте библиотеку клик. Библиотеку, которая у Вас уже установлена в IDE уберите. Иначе будет конфликтовать.

Joiner
Offline
Зарегистрирован: 04.09.2014

AVGN пишет:

.......... . История проекта здесь . ......................Библиотеку, которая у Вас уже установлена в IDE уберите. Иначе будет конфликтовать.

AVGN, спасибо за интересную информацию. Обязательно почитаю.

А пока "по-быстренькому", сделал по-своему. Результат порадовал. Все улучшения потом :)

Joiner
Offline
Зарегистрирован: 04.09.2014

Снял небольшое видео по генератору. Демонстрация работы https://youtu.be/sfH1PiWPY54

P.S. Попробовал при помощи генератора поискать резонанс  https://youtu.be/c8MzKf1oNq4

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

Joiner, очень сильный мандраж синуса у вас. Сомневаюсь, что это из-за осцилла.  Попробуйте чистый меандр из МК посмотреть, так же будет?  Если нет генератора, можно из терминалки запустить с этим скечтем.

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, очень сильный мандраж синуса у вас. Сомневаюсь, что это из-за осцилла.  Попробуйте чистый меандр из МК посмотреть, так же будет?  Если нет генератора, можно из терминалки запустить с этим скечтем.

Если честно, то на макетке и такого результата не ожидал. Может в этом причина? Еще есть непонятная проблема - если на два входа осциллографа подать синус и меандр, то на синусе, на спадах и подъемах возникают длинные вертикальные полосы. По отдельности (если смотреть один сигнал или 2 синуса или 2 меандра), то все нормально.

Решил пока разместить все в нормальном корпусе, с нормальным монтажом, а потом буду трудиться над скетчем.

За замечания и ссылку спасибо. Часто пользуюсь Вашими рекомендациями и примерами.

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

.......Попробуйте чистый меандр из МК посмотреть, так же будет? .......................

Попробовал F-генератором транзистортестера и генератором AD9850. Слева вертикально осциллограммы транзистор тестера (Atmega 328), сверху без фильтра верхних частот, снизу с включенным фильтром.

Справа вертикально осциллограммы AD9850, без фильтра и с фильтром соответственно.

dimax, в чем разница между этими двумя генераторами? У которого меандр лучше? Во всех случаях мондража замечено не было. И, если возможно, покажите как выглядит меандр 2 мегагерца с Вашего генератора на Вашем осциллографе.

P.S. Сегодня таскал свой генератор к соседу на советский аналоговый лучевой осциллограф. Во всем диапазоне и синус и меандр на нем смотрятся без претензий. На меандре всплески видны гораздо меньше чем на моей осциллограме.

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

Joiner, под мандражем я подразумевал исключительно динамические колебания, в вашем ролике на 5м10 сек очень заметно как синус прыгает  по горизонтали и даже встроенный частотомер меняет показания. На чистом меандре с МК нет такого?   У меня же  совершенно статическая картинка, словно нарисована, что синус что меандр. Поэтому в динамике нет смысла показывать. Картинку 2МГц снял, кликабельно:

Кстати по моей картинке в лог.1 видно как мандражит картинку от помехи 16МГц с питания мк :) Для бытовых нужд оно пофиг, но для измерительных приборов недопустимо..

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

.......... снял, кликабельно:

.......

А это сигнал с МК или с AD 9850? Фронты красивые, не то что у меня с МК (транзистортестер). Надо бы еще с Ардуинки попробовать.

Сегодня с утра снова попробовал AD9850 с осциллографом. Меандр как вкопаный, а синусоида нравится не очень. Как-то подергивается и раз, примерно в две секунды, появляются мгновенные всплески шума на синусоиде...хотя вчера на аналоговом осциллографе все было нормально.

Соберу на нормальном шасси с нормальным питанием, посмотрю, что получится отпишу.

P.S. Вчера слушал свой генратор через хорошие колонки. К своему удивлению понял, что выше 10000 я абсолютно ни чего не слышу.... А вот на низкой частоте чудеса. Слышу, как мне показалось, до 10 герц, а ниже тоже слышу, но какие-то шорохи, хотя по теории должна быть абсолютная тишина. А вот на частоте выше 10000, слышу абсолютную тишину, абсолютно ни чего, ни шорохов, ни щелчков.

Надо будет, когда сделаю ГКЧ, снять АЧХ со своего усилителя :)

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

Joiner пишет:

А это сигнал с МК или с AD 9850?

С МК. Вставил щуп прямо в разъём ардуины.

Joiner пишет:

Соберу на нормальном шасси с нормальным питанием, посмотрю, что получится отпишу.

Да, возможно всё это из-за "бороды" на макетке.

Joiner пишет:

А вот на частоте выше 10000, слышу абсолютную тишину, абсолютно ни чего, ни шорохов, ни щелчков.

Тут ещё нужно точно знать, воспроизводят ли колонки свыше 10кГц, и с каким уровнем..