реклама на сайте
подробности

 
 
> ad9834, Хелп. Нужен пример работы с синтезатором!
Balun
сообщение Sep 12 2007, 12:58
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 34
Регистрация: 26-07-06
Пользователь №: 19 098



Хелп. Нужен пример работы с синтезатором ad9834! beer.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dopler
сообщение Sep 12 2007, 16:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



чтобы иметь возможность управлять всеми режимами микросхемы за одну команду, нужно передавать 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);
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016