Например TDA7294

Форум РадиоКот :: Просмотр темы - Atmega8+DDS AD9850
Форум РадиоКот
https://radiokot.ru/forum/

Atmega8+DDS AD9850
https://radiokot.ru/forum/viewtopic.php?f=57&t=89513
Страница 1 из 4

Автор:  Gef79 [ Вс май 12, 2013 14:40:58 ]
Заголовок сообщения:  Atmega8+DDS AD9850

Добрый день всем!
Нужна помощ в написание софта для данной связки.
Нужно с посощью меги управлять ДДС-ом, тоесть изменять частоту по последовательной шине!
Помогите плиз написать софт для этого дела, желательно под CodeVision!
Спасибо всем кто откликнется.

int PIN_RESET = 13;
int PIN_FREQ_UPDATE = 12;
int PIN_CLOCK = 11;
int PIN_DATA = 10;

void AD9850Reset() {
digitalWrite(PIN_FREQ_UPDATE, 0);

digitalWrite(PIN_RESET, 0);
digitalWrite(PIN_RESET, 1);
digitalWrite(PIN_RESET, 0);

digitalWrite(PIN_CLOCK, HIGH);
digitalWrite(PIN_CLOCK, LOW);

digitalWrite(PIN_FREQ_UPDATE, 1);
digitalWrite(PIN_FREQ_UPDATE, 0);
}

//frequency in Hertz
void AD9850Update(double frequency) {
unsigned char i, w;
long int tuningWord;

tuningWord = frequency* 4294.967296f / 125.0f;

shiftOut(PIN_DATA, PIN_CLOCK, LSBFIRST, tuningWord);
shiftOut(PIN_DATA, PIN_CLOCK, LSBFIRST, tuningWord >> 8);
shiftOut(PIN_DATA, PIN_CLOCK, LSBFIRST, tuningWord >> 16);
shiftOut(PIN_DATA, PIN_CLOCK, LSBFIRST, tuningWord >> 24);
shiftOut(PIN_DATA, PIN_CLOCK, LSBFIRST, 0x0);

digitalWrite(PIN_FREQ_UPDATE, 1);
digitalWrite(PIN_FREQ_UPDATE, 0);
}

Вот примерный код под аурдино, как можно его переписать под CodeVision?
Тактовая частота ДДС -125 МГц.

Автор:  bobr25 [ Пт май 24, 2013 19:16:21 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

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

Автор:  Yusff [ Сб май 25, 2013 20:36:46 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Игрался с таким модулем. До применения в SDR так и не дошло :) Установка только частоты, без фазы. Как раз кодевижн.

Вложения:
main.c [2.21 KiB]
Скачиваний: 876

Автор:  bobr25 [ Сб май 25, 2013 22:03:49 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Спасибо. Пригодится.
Для SDR лучше на двух синхронизированных модулях сделать, или взять другой DDS чип чтобы сразу иметь квадратурные сигналы.

Автор:  bobr25 [ Пн июн 03, 2013 21:58:33 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Наконец-то появилось немного свободного времени. Опробовал и я модули DDS с AD9850.
Как и обещал, выкладываю куски кода с небольшими комментариями.
Автору темы, наверное, уже не интересно, но может еще кому-то пригодится.

Для управления DDS использован аппаратный SPI. Микроконтроллер ATMEGA8, тактовая частота 8Mhz. Код писан в CVAVR V2.05.3
Код:
#include <spi.h>
#define FQ_UD PORTB.2                 //куда подключен вывод FQ_UD AD9850

/*********** Переменные **************/
union un_dataword                  //5 Байт, объединение  содержит данные для передачи AD9850
{
unsigned long dataword_freq;        // 32 бит слово,  для управления частотой 
unsigned char dataword_byte[5];   // массив для побайтного доступа 
}un;

unsigned long freq;                  // частота Hz
unsigned char i;                       // счетчик
float k = 34.359738368;          // коэффициент  = 4294967296 / F_DDS_IN  где   F_DDS_IN - тактовая частота DDS Гц)

void main(void)
{

/********** Конфигурация SPI **********/

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 2000,000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: LSB First
SPCR=0x70;
SPSR=0x00;

/********** Подготовка управляющего слова *************/

freq = 500000;       // 500 кГц например

un.dataword_byte[4]=0b00000000;  // два младших бита (0 и 1) Обязательно = 0.
                              // бит 2 устанавливает режим Power-Down
                              // пять старших бит управляют фазой.

 un.dataword_freq = freq*k;       //  частота

/*************Отправка управляющего слова *************/

       FQ_UD =1;
       FQ_UD =0;
       
        for (i=0; i<5; i++)
        {
        spi(un.dataword_byte[i]);
         }
         
        FQ_UD =1;
        FQ_UD =0;     




P.S. Проверенно в железе.

Автор:  Gef79 [ Чт июн 13, 2013 14:49:26 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Ребят огромное спасибо за вклад! Не мог проверить данный код, убил програматор, соорудил новый,в ближайшее время проверю и скажу результат!
Написал собственный код, но ничего не получилось, нет на выходе ДДС ничего! Буду разбиратся.
Тема ещё актуальная.

Автор:  bobr25 [ Чт июн 13, 2013 16:03:25 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Вот мой пробный проект целиком. (куски которого выкладывал выше)

Соединение Меги с AD9850:

MOSI ---> D7
SCK ---> W_CLK
PB2 ---> FQ_UD

Вложения:
AD9850_test.rar [34 KiB]
Скачиваний: 890

Автор:  Gef79 [ Чт июн 13, 2013 16:22:35 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Огромное спасибо! Сегодня вечером протестирую и погляжу сразу не заняты ли у меня ноги SPI под другие нужды.

Автор:  Yusff [ Чт июн 13, 2013 17:33:28 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Gef79 писал(а):
но ничего не получилось, нет на выходе ДДС ничего

А так не забыли сделать?
СпойлерИзображение


Вложения:
se.png [7.88 KiB]
Скачиваний: 6596

Автор:  bobr25 [ Чт июн 13, 2013 18:09:34 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Кстати, еще обратите внимание на ногу Rset (Pin 12). Должен быть резистор на землю (3,9k).

Автор:  Gef79 [ Чт июн 13, 2013 20:24:22 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Такс! Ноги как по схеме я соеденил, а вот по поводу резюка не скажу, так как это готовая маленькая аурдиновская платка, надо будет поглядеть!

Автор:  bobr25 [ Чт июн 13, 2013 22:20:13 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

У меня такой модуль:
СпойлерИзображение

В нем нужно только D2 соединить с GND, больше ничего не нужно.
Какой модуль у вас?

Автор:  Gef79 [ Чт июн 13, 2013 23:57:45 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Всем спасибо за подсказку!
Модуль такой же как на картинке!
По SPI действительно всё работает.
Единственное теперь схему нужно будет подкоректировать, что бы освободить ноги SPI.
И ещё один момент, какой уровень у этого модуля на выходе? Частотомер не берёт, контролировал по приёмнику.

Автор:  bobr25 [ Пт июн 14, 2013 19:35:09 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Уровень на выходе (Sin) зависит от нагрузки. у меня около 0,5 вольта было (если память не подводит). Частотомер должен без проблем брать.
Если пины SPI заняты можно программно реализовать, посмотрите выше Yusff код выкладывал.

Автор:  Gef79 [ Ср июн 19, 2013 20:51:04 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Спасибо за ответ! Действительно размах сигнала около 0,5В, проблемма была в частотомере!
Продолжаю трудится над проектом дальше!

Автор:  Gef79 [ Чт июн 20, 2013 22:50:16 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Вылез новый косяк! Заливаю частоту через SPI. Так вот при установке частоты выше 9999999 Гц, перестаёт устанавливатся частота!!! Куда копать?

Автор:  bobr25 [ Пт июн 21, 2013 08:27:50 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Трудно сказать что происходит, не видя кода .
Залейте для пробы этот проект.
Формирует попеременно три частоты 1000000, 9999999 и 11000000 Гц каждую по 5 секунд (при тактовой 8МГц).
Работает? Ищите ошибки в коде где формируется значение переменной содержащей частоту в герцах, или где формируется управляющее слово.

Вложения:
TEST.RAR [38.72 KiB]
Скачиваний: 450

Автор:  Gef79 [ Пт июн 21, 2013 11:49:20 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Добрый день! Спасибо за ответ! Использую именно ваш код! Думаю что, что то с настройками Codevision, так как переменная long затем преобразовывается в char для отображения на LCD и так же выходит затык! Мне кажется что , что то с настройками компилятора, но вот что не понятно! Может нужно что то выставить в настройках?
Код очень уж большой, так как пишиться для синтеза под трансивер Mini-Yes! до 10 Мег всё работает на ура, а вот выше всё болт!

Автор:  bobr25 [ Пт июн 21, 2013 12:34:05 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

По настройкам компилятора не подскажу, попробуйте сформулировать и задать вопрос в теме про CVAVR

Как вы преобразуете
Цитата:
переменная long затем преобразовывается в char
?
Куда деваете не влезающие в Char данные?

Автор:  Gef79 [ Пт июн 21, 2013 21:01:57 ]
Заголовок сообщения:  Re: Atmega8+DDS AD9850

Спасибо за ответ! Преобразовую так:
char fraq_char[32];
float fraq;
.
.
.
fraq=11000000;
ftoa(fraq/1000,3,fraq_char);
lcd_puts(fraq_char);
До этого массив был из 8 бит, увеличил до 32, частота стала выставляться, но не та что нужно! Глюки продолжаются!

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/