Atmega8+DDS AD9850
Re: Atmega8+DDS AD9850
Понятно, в строку преобразуете.
32 байта строка, наверно, здесь не нужна.
Вы собираетесь выводить строку из 9 символов, значит достаточно строки в 10 байт.
Попробуйте для начала убрать деление на 1000 , сделайте вывод на LCD в герцах (временно).
Вам потребуется строка длиной 9 байт и вместо функции ftoa использовать ltoa (если я правильно помню).
Это даст возможность локализовать проблему (если конечно проблема в этой части)
32 байта строка, наверно, здесь не нужна.
Вы собираетесь выводить строку из 9 символов, значит достаточно строки в 10 байт.
Попробуйте для начала убрать деление на 1000 , сделайте вывод на LCD в герцах (временно).
Вам потребуется строка длиной 9 байт и вместо функции ftoa использовать ltoa (если я правильно помню).
Это даст возможность локализовать проблему (если конечно проблема в этой части)
Re: Atmega8+DDS AD9850
Добрый день! Действительно вся проблемма с функцией ftoa,с ltoa всё работает! Терь возник вопрос, как отделить сотые через точку и вывести на LCD,например: 28850.060 ?
Re: Atmega8+DDS AD9850
можно вот так
Код: Выделить всё
#include <stdio.h>
/*****/
char fraq_char[10];
/****/
sprintf(fraq_char,"%+5u.%03u",freq/1000,freq%1000); Re: Atmega8+DDS AD9850
Спасибо за ответ! Сегодня вечером попробую!
Такй вариант так же расматривал, но не понял что задают эти выражения: "%+5u.%03u", поясните плиз.
Такй вариант так же расматривал, но не понял что задают эти выражения: "%+5u.%03u", поясните плиз.
Re: Atmega8+DDS AD9850
это форматирование вывода
+ - выравнивание в право
5 - пять символов
u - без знаковое целое
03 - три символа, если символов меньше дополняются нулями слева
чтобы разобраться, поищите примеры использования функций printf и sprintf
+ - выравнивание в право
5 - пять символов
u - без знаковое целое
03 - три символа, если символов меньше дополняются нулями слева
чтобы разобраться, поищите примеры использования функций printf и sprintf
Re: Atmega8+DDS AD9850
Ок! Спасибо за науку, буду разбератся с функциями!
Re: Atmega8+DDS AD9850
Докладываю! Выражение sprintf(fraq_char,"%+5u.%03u",freq/1000,freq%1000); не работает!
Переменная freq у меня float.
Переменная freq у меня float.
Re: Atmega8+DDS AD9850
В чем выражается не работа?
stdio.h подключена?
На каких значениях freq проверяли?
Перед тем как это выражение выкладывать, я его проверял, у меня оно работает.
stdio.h подключена?
На каких значениях freq проверяли?
Перед тем как это выражение выкладывать, я его проверял, у меня оно работает.
Re: Atmega8+DDS AD9850
Не заметил сразу
Зачем она float?
Если по моему коду делали она должна быть unsigned long.
, поэтому и не работает.Gef79 писал(а):Переменная freq у меня float.
Зачем она float?
Если по моему коду делали она должна быть unsigned long.
Re: Atmega8+DDS AD9850
Пробовал перевести в unsigned long, снова ничего!
Прикрепляю файлик, подскажите что не так!
Забавно, в Протеусе не работает, залил в контроллер, работает через раз!
Ничего не понимаю, глюки)!
Прикрепляю файлик, подскажите что не так!
Забавно, в Протеусе не работает, залил в контроллер, работает через раз!
Ничего не понимаю, глюки)!
- Вложения
-
- sin.c
- (9.39 КБ) 616 скачиваний
Re: Atmega8+DDS AD9850
Модель протеусную еще выложите.
Если вечером время будет посмотрю подробнее.
перетащил из вашего файла в тестовый проект вот это
Все работает.
Проект в приложенном архиве, в папке proteus модель для протеуса.
Попробуйте на своем CVAVR скомпилировать, будет ли работать.
Если вечером время будет посмотрю подробнее.
перетащил из вашего файла в тестовый проект вот это
Код: Выделить всё
unsigned long fraq = 28850000;
char fraq_char[10];
sprintf(fraq_char,"%+5u.%03u",fraq/1000,fraq%1000);
lcd_gotoxy(5,0);
lcd_puts(fraq_char);
Все работает.
Проект в приложенном архиве, в папке proteus модель для протеуса.
Попробуйте на своем CVAVR скомпилировать, будет ли работать.
- Вложения
-
- 2.RAR
- (210.65 КБ) 442 скачивания
Re: Atmega8+DDS AD9850
Спасибо, нарыл проблему! В компиляторе не правильно было выставлено int,width!
Вот архивчик с проектом на данный момент!
Рабочий проект sinAD2.Не доглядел, открыл в evaluationвот в нём работает, но есть ограничение по софту! В версии 2.03.09 не работает!
Вот архивчик с проектом на данный момент!
Рабочий проект sinAD2.Не доглядел, открыл в evaluationвот в нём работает, но есть ограничение по софту! В версии 2.03.09 не работает!
- Вложения
-
- Sintez_AD.zip
- (292.08 КБ) 452 скачивания
-
Sasha Lauta
- Родился
- Сообщения: 11
- Зарегистрирован: Пн апр 26, 2010 22:54:01
Re: Atmega8+DDS AD9850
Всем привет. Вопрос по AD9850, проблема в том что синтезатор выдает немного не то что рассчитано по формулам.
Пример.
Имеем собранную схему. Кварцевый генератор на 125 МГц.
Как получить 1 Гц на выходе устройства?
Для начала нам необходимо вычислить коэффициент деления K:
K = Fген / 2^32 = 125 000 000 / 4 294 967 296 = 0.02910…
Находим код, который необходимо отослать в DDS:
Код = Fвых / K = 1 (Гц) / 0.02910 = 34,3642…. = 34
Управляющее слово состоит из пяти байт, если я ничего не путаю, пятый байт нам не нужен, это управления фазой.
Выводим 34 в двоичной форме 00000000 00000000 00000000 00000000 00100010
Но на выходе я получаю не 1Гц а 255Гц, подозрительно чтото 255 Гц, такое впечатления что проблема в коэффициенте деления, может кто то сталкивался или просто знает в чем проблема, подскажите.
В данный момент, если прикинуть, 225/34=6,6. Тоесть минимальная частота гдето 7Гц, чтото не то
Пример.
Имеем собранную схему. Кварцевый генератор на 125 МГц.
Как получить 1 Гц на выходе устройства?
Для начала нам необходимо вычислить коэффициент деления K:
K = Fген / 2^32 = 125 000 000 / 4 294 967 296 = 0.02910…
Находим код, который необходимо отослать в DDS:
Код = Fвых / K = 1 (Гц) / 0.02910 = 34,3642…. = 34
Управляющее слово состоит из пяти байт, если я ничего не путаю, пятый байт нам не нужен, это управления фазой.
Выводим 34 в двоичной форме 00000000 00000000 00000000 00000000 00100010
Но на выходе я получаю не 1Гц а 255Гц, подозрительно чтото 255 Гц, такое впечатления что проблема в коэффициенте деления, может кто то сталкивался или просто знает в чем проблема, подскажите.
В данный момент, если прикинуть, 225/34=6,6. Тоесть минимальная частота гдето 7Гц, чтото не то
Re: Atmega8+DDS AD9850
Попробуйте получить еще несколько других частот (например 100Гц 1000Гц 10000Гц)
и напишите что получили на выходе DDS.
Подозреваю что при передаче в чип DDS управляющее слово сдвинуто на 1 байт.
и напишите что получили на выходе DDS.
Подозреваю что при передаче в чип DDS управляющее слово сдвинуто на 1 байт.
-
Sasha Lauta
- Родился
- Сообщения: 11
- Зарегистрирован: Пн апр 26, 2010 22:54:01
Re: Atmega8+DDS AD9850
Я тоже так подозреваю, выставляю 10Гц, получаю 2550Гц. А что можно сделать
-
Sasha Lauta
- Родился
- Сообщения: 11
- Зарегистрирован: Пн апр 26, 2010 22:54:01
Re: Atmega8+DDS AD9850
Всем спасибо за ответы, нашел причину
, на бумажке то я пишу что в управляющем слове 5 байт а програмно забыл за 5 байт и командное слово получилось 4 байта. Вот этот здвиг на один байт и получился 
Re: Atmega8+DDS AD9850
Здравствуйте, тоже заинтересовался схемой с генератором AD9850, но по форуму так и не понял, доделал генератор кто до конца?
Если можно поделитесь пожалуйста схемой подключения и рабочим проектом.
Если можно поделитесь пожалуйста схемой подключения и рабочим проектом.

Re: Atmega8+DDS AD9850
Я свою пока не доделал, отложил из за отсутствия времени.
Готовых проектов в сети много, со схемами и прошивками, под разные цели.
Или возьмите мой проект (выкладывал выше) и доделайте под свои цели,
там осталось только дисплей с кнопками или валкодером прикрутить, управление ДДС полностью работает.
Если нужен именно готовый проект, могу прислать в личку несколько ссылок, или гугол поможет.
Готовых проектов в сети много, со схемами и прошивками, под разные цели.
Или возьмите мой проект (выкладывал выше) и доделайте под свои цели,
там осталось только дисплей с кнопками или валкодером прикрутить, управление ДДС полностью работает.
Если нужен именно готовый проект, могу прислать в личку несколько ссылок, или гугол поможет.
Re: Atmega8+DDS AD9850
bobr25 смотрел ваш архив, я так понял что там пока заготовки.
Интересует именно начальный проект с управлением AD9850, и принципиальная схема что куда подключено. А ссылки готовых проектов спасибо не надо.
Эта тема та что мне нужно, у меня такая платка есть .
Тока в программировании я слабак, успехи небольшие есть в CodeVisionAVR , но так только "вершки"... вот и спросил, может поделитесь , если есть успехи, а если у меня получится что , так я тоже в долгу не останусь.
Интересует именно начальный проект с управлением AD9850, и принципиальная схема что куда подключено. А ссылки готовых проектов спасибо не надо.
Эта тема та что мне нужно, у меня такая платка есть .
Тока в программировании я слабак, успехи небольшие есть в CodeVisionAVR , но так только "вершки"... вот и спросил, может поделитесь , если есть успехи, а если у меня получится что , так я тоже в долгу не останусь.

Re: Atmega8+DDS AD9850
Посмотрите мои сообщения от Пн июн 03, 2013 21:58:33 там код по управлению AD9850 с комментариями,
от Чт июн 13, 2013 16:03:25 там подключение меги к DDS модулю и полностью проект для CodeVisionAVR (AD9850_test.rar) Проверен на таком же точно модуле.
В этом проекте частота задается однократно и настраивает DDSку на нее.
Чтобы менять частоту на ходу последовательность такая:
1. задали частоту в переменной freq.
2. готовим управляющее слово
3. отправляем управляющее слово
4. Новая частота установлена, наслаждаемся результатом.
от Чт июн 13, 2013 16:03:25 там подключение меги к DDS модулю и полностью проект для CodeVisionAVR (AD9850_test.rar) Проверен на таком же точно модуле.
В этом проекте частота задается однократно и настраивает DDSку на нее.
Чтобы менять частоту на ходу последовательность такая:
1. задали частоту в переменной freq.
2. готовим управляющее слово
Код: Выделить всё
un.dataword_byte[4]=0b00000000;
un.dataword_freq = freq*k;
3. отправляем управляющее слово
Код: Выделить всё
FQ_UD =1;
FQ_UD =0;
for (i=0; i<5; i++)
{
spi(un.dataword_byte[i]);
}
FQ_UD =1;
FQ_UD =0; 4. Новая частота установлена, наслаждаемся результатом.