Форум РадиоКот 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 >> ![]() 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 так и не дошло ![]()
|
Автор: | 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
|
Автор: | Gef79 [ Чт июн 13, 2013 16:22:35 ] |
Заголовок сообщения: | Re: Atmega8+DDS AD9850 |
Огромное спасибо! Сегодня вечером протестирую и погляжу сразу не заняты ли у меня ноги SPI под другие нужды. |
Автор: | Yusff [ Чт июн 13, 2013 17:33:28 ] | ||
Заголовок сообщения: | Re: Atmega8+DDS AD9850 | ||
Gef79 писал(а): но ничего не получилось, нет на выходе ДДС ничего А так не забыли сделать? Спойлер
|
Автор: | 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МГц). Работает? Ищите ошибки в коде где формируется значение переменной содержащей частоту в герцах, или где формируется управляющее слово.
|
Автор: | 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/ |