Например TDA7294

Форум РадиоКот • Просмотр темы - Atmega8+DDS AD9850
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн авг 11, 2025 00:12:25

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 69 ]  1, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Atmega8+DDS AD9850
СообщениеДобавлено: Вс май 12, 2013 14:40:58 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 15, 2010 16:49:44
Сообщений: 21
Рейтинг сообщения: 0
Добрый день всем!
Нужна помощ в написание софта для данной связки.
Нужно с посощью меги управлять ДДС-ом, тоесть изменять частоту по последовательной шине!
Помогите плиз написать софт для этого дела, желательно под 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 МГц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Пт май 24, 2013 19:16:21 
Первый раз сказал Мяу!

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Ср мар 10, 2010 16:19:15
Сообщений: 29
Рейтинг сообщения: 0
В ближайшие пару дней, если время позволит, опробую модуль на AD9850.
Если ваш вопрос еще актуален, выложу куски кода с пояснениями.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Сб май 25, 2013 20:36:46 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб окт 20, 2012 14:07:16
Сообщений: 124
Рейтинг сообщения: 0
Игрался с таким модулем. До применения в SDR так и не дошло :) Установка только частоты, без фазы. Как раз кодевижн.


Вложения:
main.c [2.21 KiB]
Скачиваний: 875
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Сб май 25, 2013 22:03:49 
Первый раз сказал Мяу!

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Ср мар 10, 2010 16:19:15
Сообщений: 29
Рейтинг сообщения: 0
Спасибо. Пригодится.
Для SDR лучше на двух синхронизированных модулях сделать, или взять другой DDS чип чтобы сразу иметь квадратурные сигналы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Пн июн 03, 2013 21:58:33 
Первый раз сказал Мяу!

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Ср мар 10, 2010 16:19:15
Сообщений: 29
Рейтинг сообщения: 0
Наконец-то появилось немного свободного времени. Опробовал и я модули 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. Проверенно в железе.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 13, 2013 14:49:26 
Первый раз сказал Мяу!

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 13, 2013 16:03:25 
Первый раз сказал Мяу!

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Ср мар 10, 2010 16:19:15
Сообщений: 29
Рейтинг сообщения: 0
Вот мой пробный проект целиком. (куски которого выкладывал выше)

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

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


Вложения:
AD9850_test.rar [34 KiB]
Скачиваний: 890
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 13, 2013 16:22:35 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 15, 2010 16:49:44
Сообщений: 21
Рейтинг сообщения: 0
Огромное спасибо! Сегодня вечером протестирую и погляжу сразу не заняты ли у меня ноги SPI под другие нужды.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 13, 2013 17:33:28 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб окт 20, 2012 14:07:16
Сообщений: 124
Рейтинг сообщения: 0
Gef79 писал(а):
но ничего не получилось, нет на выходе ДДС ничего

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


Вложения:
se.png [7.88 KiB]
Скачиваний: 6596
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 13, 2013 18:09:34 
Первый раз сказал Мяу!

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Ср мар 10, 2010 16:19:15
Сообщений: 29
Рейтинг сообщения: 0
Кстати, еще обратите внимание на ногу Rset (Pin 12). Должен быть резистор на землю (3,9k).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 13, 2013 20:24:22 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 15, 2010 16:49:44
Сообщений: 21
Рейтинг сообщения: 0
Такс! Ноги как по схеме я соеденил, а вот по поводу резюка не скажу, так как это готовая маленькая аурдиновская платка, надо будет поглядеть!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 13, 2013 22:20:13 
Первый раз сказал Мяу!

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Ср мар 10, 2010 16:19:15
Сообщений: 29
Рейтинг сообщения: 0
У меня такой модуль:
СпойлерИзображение

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 13, 2013 23:57:45 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 15, 2010 16:49:44
Сообщений: 21
Рейтинг сообщения: 0
Всем спасибо за подсказку!
Модуль такой же как на картинке!
По SPI действительно всё работает.
Единственное теперь схему нужно будет подкоректировать, что бы освободить ноги SPI.
И ещё один момент, какой уровень у этого модуля на выходе? Частотомер не берёт, контролировал по приёмнику.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Пт июн 14, 2013 19:35:09 
Первый раз сказал Мяу!

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Ср мар 10, 2010 16:19:15
Сообщений: 29
Рейтинг сообщения: 0
Уровень на выходе (Sin) зависит от нагрузки. у меня около 0,5 вольта было (если память не подводит). Частотомер должен без проблем брать.
Если пины SPI заняты можно программно реализовать, посмотрите выше Yusff код выкладывал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Ср июн 19, 2013 20:51:04 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 15, 2010 16:49:44
Сообщений: 21
Рейтинг сообщения: 0
Спасибо за ответ! Действительно размах сигнала около 0,5В, проблемма была в частотомере!
Продолжаю трудится над проектом дальше!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Чт июн 20, 2013 22:50:16 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 15, 2010 16:49:44
Сообщений: 21
Рейтинг сообщения: 0
Вылез новый косяк! Заливаю частоту через SPI. Так вот при установке частоты выше 9999999 Гц, перестаёт устанавливатся частота!!! Куда копать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Пт июн 21, 2013 08:27:50 
Первый раз сказал Мяу!

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


Вложения:
TEST.RAR [38.72 KiB]
Скачиваний: 450
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Пт июн 21, 2013 11:49:20 
Первый раз сказал Мяу!

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Пт июн 21, 2013 12:34:05 
Первый раз сказал Мяу!

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Ср мар 10, 2010 16:19:15
Сообщений: 29
Рейтинг сообщения: 0
По настройкам компилятора не подскажу, попробуйте сформулировать и задать вопрос в теме про CVAVR

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Atmega8+DDS AD9850
СообщениеДобавлено: Пт июн 21, 2013 21:01:57 
Первый раз сказал Мяу!

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


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 69 ]  1, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 173


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y