Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ad9834
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Balun
Хелп. Нужен пример работы с синтезатором ad9834! beer.gif
=GM=
Цитата(Balun @ Sep 12 2007, 11:58) *
Хелп. Нужен пример работы с синтезатором ad9834! beer.gif

Какой хелп? Там стандартный SPI, подключаете к авр и вперёд.
Dopler
чтобы иметь возможность управлять всеми режимами микросхемы за одну команду, нужно передавать 5 слов (10 байт), делается это примерно так :

Код
;управление частотой
AppCmd6:
;Формат входных данных:
;0xXXXX        -    слово конфигурации (должно содержать команду RESET), типовое значение - 0x2100
;0xXXXX        -    частота, младшие 14 бит (два старших бита указывают адрес регистра частоты)
;0xXXXX        -    частота, старшие 14 бит (два старших бита указывают адрес регистра частоты)
;0xXXXX        -    фаза, (два старших бита указывают адрес регистра фазы)
;0xXXXX        -    слово конфигурации и запуска, типовое значение - 0x2000
;всего 10 байт, во входных данных
;21 00 45 1e 40 2e 20 00 20 00
    
    ldi        YL,        low(DataIn)
    ldi        YH,        high(DataIn)
    
;выдача пяти управляющих слов в микросхему
WordOutLoop:    
    cbi        portb,        SYNC_DDS    ; устанавливаем фрейм микросхем на каждое слово
    
    ld        tmp,    Y+
    rcall    SPIOutByte                ; выводим старший байт

    ld        tmp,    Y+
    rcall    SPIOutByte                ; выводим младший байт

    sbi        portb,        SYNC_DDS    ; убираем фрейм

    
    cpi        YL,        low(DataIn + 10)    
    brne    WordOutLoop
            
ret


А вот так эти 5 слов формируются (в текстбоксе SingleFreqTextBox частота в герцах ), системная частота - 16МГц
Код
// установка Частоты
            dataOut = new byte[10] { 0x21, 0x00, 0x6d, 0x0e, 0x40, 0x48, 0x20, 0x00, 0x20, 0x00 };

            uint freq = Convert.ToUInt32(SingleFreqTextBox.Text);
            double freqConst = Math.Pow(2, 28) / 16000000;
            uint freqReg = Convert.ToUInt32(freqConst * freq);

            //младшая часть множителя частоты
            uint freqSettingsL = 0x4000 | (freqReg & 0x3FFF);
            //старшая часть множителя частоты
            uint freqSettingsH = 0x4000 | ((freqReg >> 14) & 0x3FFF);

            dataOut[2] = Convert.ToByte((freqSettingsL >> 8) & 0xFF);
            dataOut[3] = Convert.ToByte(freqSettingsL & 0xFF);

            dataOut[4] = Convert.ToByte((freqSettingsH >> 8) & 0xFF);
            dataOut[5] = Convert.ToByte(freqSettingsH & 0xFF);
jasper
Вот драйвер для AD9843 и SPI, под WinAVR.
Комменты есть, думаю разберешься.
Balun
Вроде запустил. Но рабтает странно. У меня системная частота 5 мгц.
Хочу получить синус 10 герц. А синтезатор меньше 200 герц не генерит. На самом минимальном значении регистра частоты. частота на выходе 200 гц. Может это быть из-за генератора 5Мгц?
jasper
Цитата(Balun @ Sep 17 2007, 19:48) *
Может это быть из-за генератора 5Мгц?

MCLK в 5MHz - вполне допустимо. Надеюсь, качество клока нормальное?

Где смотрите? Синус? А то, цифровой выход через компаратор на столь низких частотах работать не будет, там ФВЧ стоит. Может влияние выходных каскадов. Лучше для начала оторвать все лишнее и нагрузить выход на 200 Ом.

Но скорее всего, глюк обмена, программный или аппаратный, например, помехи по SPI могут быть. А по поводу программных - вышеприведенный драйвер на 100% рабочий.
Balun
Глюк нашел. Был в обмене спроцессором. У меня SPI программный.
Вот другой вот вопрос. У меня два синтезатора. Слок от одного генератора. Мне нада задавать разную фазу. Когда я пишу в два синтезатора фазу ноль то на осцилографе фаза смещена где то на 10 градусов. И мещение постоянно на всех частотах. Можно ли это как нить побороть.!
jasper
Синхронизация двух синтезаторов осуществляется подачей сигнала RESET сразу на оба синтезатора, который заводится на ножки RESET, т.е. аппаратный сброс.
Ресет сбрасывает внутренний регистр аккумулятора фазы, регистры, задающие частоты и сдвиги фаз, при этом сохраняются.
Balun
Спасибо, разобрался. Работает как нада.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.