DDS генератор=PIC+Proton+AD9833
|
|
Sh_Juri |
Дата: Пн, 23.05.2011, 13:59 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
20
Замечания:
±
На сайте с 20.01.2009
Статус:
Offline
|
Затеялся сделать генератор на AD9833. Уж очень понравились чужие разработки. Но все проги или на СИ или на Асме. Что-то не то делаю. Буду признателен за любую помощь. Схема и прога в архиве.
Juri
|
|
|
|
MasterPic |
Дата: Чт, 26.05.2011, 07:08 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
Так а что не получается то?
|
|
|
|
Sh_Juri |
Дата: Пт, 27.05.2011, 07:43 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
20
Замечания:
±
На сайте с 20.01.2009
Статус:
Offline
|
Данные передаются. Вижу осциллографом. Но не частота не амплитуда сигнала не изменяются. После записи и запуска, вижу синусоиду амплитудой не более 0.5вольта. Если в W2:(как в любой другой "W1:" или "W3:" заменить строку на эту "SHOut DO_AD,SCLK_AD,msbfirst,[$2168,$0000,$0000,$2068]" то получаю красивый меандр амплитудой почти 5вольт. Т.е в цикле 1-син.0.5в , 2-меандр, 3- син.0.5в в цикле. Если выключаю питание ,то при следующем включении, могу получить любую другую частоту от 0.5 гц до 1 мгц (не измерял но развертка на последнем делении). PIC подключен через MAX232 к COMпорту по типовой схеме из Help(а). Меняю прогу , по F10 компилируется , пишется в PIC и перезапускается. Спасибо за внимание.
Juri
|
|
|
|
MasterPic |
Дата: Пт, 27.05.2011, 10:42 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
Нужно даташит внимательно поизучать на тему генерирования синусоиды. Возможно, упущена какая-то незначительная деталь
|
|
|
|
demanik |
Дата: Сб, 28.05.2011, 14:53 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (Sh_Juri) Затеялся сделать генератор на AD9833
Я тоже заказал AD9833, на следующей неделе приедет и буду пробовать запустить.
Попробуй всё и вся... может быть пол...
|
|
|
|
Sh_Juri |
Дата: Сб, 28.05.2011, 20:24 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
20
Замечания:
±
На сайте с 20.01.2009
Статус:
Offline
|
Первую микросхему паял паяльником в переходник DIP. Сжог (если была рабочая). Следующие две - феном (температурой не более чем в datasheet). С ними и работаю.
Juri
|
|
|
|
demanik |
Дата: Сб, 28.05.2011, 22:35 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (Sh_Juri) Данные передаются. Вижу осциллографом. Но не частота не амплитуда сигнала не изменяются
попробуйте поставить: Ph0 = $C001 Ph1 = $E001 в мануале написано регистр фазы должен быть больше 0 и меньше 268435455
также посчитал для 1кгц FR00 = $69F1 FR01 = $4000 FR10 = $A9F1 FR11 = $8000
пробуйте
Попробуй всё и вся... может быть пол...
|
|
|
|
Sh_Juri |
Дата: Вс, 29.05.2011, 07:32 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
20
Замечания:
±
На сайте с 20.01.2009
Статус:
Offline
|
Поставил просчитанные Вами значения. Т.к. по проге должны присутствовать три сигнала , то меандр 12.6Кгц ,25.3Кгц,синус не более 0.5В. При выкл/вкл разные частоты , и значение второй частоты вдвое выше первой. Программа приняла слудующий вид.
CR1 VAR Word 'рег. контроля 1 CR0 = $2100 FR00 = $69F1 '4015 FR01 = $4000 '863 FR10 = $A9F1 '8000 FR11 = $8000 Ph0 = $C001 '0 Ph1 = $E001 '0 CR1 = $2000 CS_AD = 1 Start: GoSub W1 DelayMS 5000 GoSub W2 DelayMS 5000 GoSub W3 DelayMS 5000 GoTo Start
W1: CS_AD = 0 DelayMS 5 SHOut DO_AD,SCLK_AD,msbfirst,[CR0,FR00,FR01,FR10,FR11,Ph0,Ph1,CR1] CS_AD = 1 DelayMS 5 Return W2: CS_AD = 0 DelayMS 5 'SHOut DO_AD,SCLK_AD,msbfirst,[CR0,$6E14,$451E,$AE14,$851E,Ph0,Ph1,CR1] SHOut DO_AD,SCLK_AD,msbfirst,[$2168,$0000,$0000,$2068]' МЕАНДР CS_AD = 1 DelayMS 5 Return W3: CS_AD = 0 DelayMS 5 SHOut DO_AD,SCLK_AD,msbfirst,[CR0,$69F1,$4000,$8000,$8000,Ph0,Ph1,CR1] CS_AD = 1 DelayMS 5 Return
End
Juri
|
|
|
|
demanik |
Дата: Вс, 29.05.2011, 13:07 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (Sh_Juri) При выкл/вкл разные частоты Вы отправляете по SPI 8-бит а нужно 16. переделайте так: SHOUT DO_AD,SCLK_AD,MSBFIRST,[CR0\16,FR00\16,FR01\16,FR10\16,FR11\16,Ph0\16,Ph1\16,CR1\16] и паузы 5 милисекунд думаю вообще ненужны по даташиту там паузы несколько наносекунд при Вашей частоте кварца они атоматически болучатся больше.
Попробуй всё и вся... может быть пол...
|
|
|
|
demanik |
Дата: Вс, 29.05.2011, 15:04 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Еще оди нюанс попробуйте так: W1: CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[CR0\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[FR00\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[FR01\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[FR10\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[FR11\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[Ph0\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[Ph1\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[CR1\16] CS_AD = 1 RETURN
Попробуй всё и вся... может быть пол...
|
|
|
|
Sh_Juri |
Дата: Пн, 30.05.2011, 12:31 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
20
Замечания:
±
На сайте с 20.01.2009
Статус:
Offline
|
Попробовал оба варианта на двух чипах. Ожидаемого результата нет. Пробовал загружать бинарный код. Без результата.
Juri
|
|
|
|
anatol |
Дата: Пн, 30.05.2011, 21:38 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
На всякий случай расчеты http://designtools.analog.com/dt/ad98334/ad9833.html апликухи http://www.analog.com/en....ex.html
|
|
|
|
demanik |
Дата: Пн, 30.05.2011, 23:21 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (Sh_Juri) Ожидаемого результата нет Прбуйте так: Еще оди нюанс попробуйте так: W1: SCLK_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[CR0\16] CS_AD = 1 SCLK_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[FR00\16] CS_AD = 1 SCLK_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[FR01\16] CS_AD = 1 SCLK_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[FR10\16] CS_AD = 1 SCLK_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[FR11\16] CS_AD = 1 SCLK_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[Ph0\16] CS_AD = 1 SCLK_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[Ph1\16] CS_AD = 1 SCLK_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST,[CR1\16] CS_AD = 1 RETURN В мануале нарисовано что SCLK должен быть в "1" перед опусканием FSYNC.
Попробуй всё и вся... может быть пол...
|
|
|
|
Sh_Juri |
Дата: Вт, 31.05.2011, 11:48 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
20
Замечания:
±
На сайте с 20.01.2009
Статус:
Offline
|
Нет и так не получается. Спасибо за ссылки. С их сайта я брал кодовые слова. За месяц экперементов даже пробовал разобраться в чужих прогах на СИ. "MSBFIRST_H" ,я думаю, дожно удерживать SCLK в "1". Но и этот вариант результата не дал.
Juri
|
|
|
|
demanik |
Дата: Вт, 31.05.2011, 12:33 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (Sh_Juri) Нет и так не получается Приехал мой чип. Разобрался Логический анализатор рулит. Вместо MSBFIRST нужно использовать MSBFIRST_H
Ваша прога переделанная под 18F2620 работает. Code DEVICE = 18F2620 CONFIG_START OSC = INTIO67 FCMEN = OFF IESO = OFF PWRT = ON BOREN = SBORDIS BORV = 3 WDT = OFF WDTPS = 512 MCLRE = OFF LPT1OSC = OFF PBADEN = OFF CCP2MX = PORTC STVREN = OFF LVP = OFF XINST = OFF DEBUG = OFF CP0 = OFF CP1 = OFF CP2 = OFF CP3 = OFF CPB = OFF CPD = OFF WRT0 = OFF WRT1 = OFF WRT2 = OFF WRT3 = OFF WRTB = OFF WRTC = OFF WRTD = OFF EBTR0 = OFF EBTR1 = OFF EBTR2 = OFF EBTR3 = OFF EBTRB = OFF CONFIG_END
XTAL = 8 TRISA = %11100001 TRISB = %00000000 TRISC = %11110000 ADCON1 = %00000110 OSCCON = %01110000 '8MHz
' *** ОБЬЯВЛЕНИЯ ДЛЯ AD9833 *** CS_AD VAR PORTC.6 ' AD-8 Выбор м/с SCLK_AD VAR PORTC.5 ' AD-7 Clock DO_AD VAR PORTC.7 ' AD-6 Data ' *** Обьявление переменных *** CR0 VAR WORD 'рег. контроля 0 FR00 VAR WORD 'рег. частоты 00 FR01 VAR WORD 'рег. частоты 01 FR10 VAR WORD 'рег. частоты 10 FR11 VAR WORD 'рег. частоты 11 Ph0 VAR WORD 'рег. фазы 0 Ph1 VAR WORD 'рег. фазы 1 CR1 VAR WORD 'рег. контроля 1 CR0 = $2100 FR00 = $69F1 ' 1-khz FR01 = $4000 ' 1-khz FR10 = $A9F1 ' 1-khz FR11 = $8000 ' 1-khz Ph0 = $C001 Ph1 = $E001 CR1 = $2000 OUTPUT do_ad OUTPUT SCLK_ad OUTPUT cs_ad CS_AD = 1 GOSUB InitAD
Start: GOSUB Sinus DELAYMS 500 GOSUB Tria DELAYMS 500 GOTO Start
Sinus: CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[%0010000000000000 \ 16] CS_AD = 1 RETURN
Tria: CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[%0010000000000010 \ 16] CS_AD = 1 RETURN
InitAD: CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[CR0\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[FR00\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[FR01\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[FR10\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[FR11\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[Ph0\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[Ph1\16] CS_AD = 1 CS_AD = 0 SHOUT DO_AD,SCLK_AD,MSBFIRST_H,[CR1\16] CS_AD = 1 RETURN
END Каждые пол секунды меняет синус на треугольник и наоборот.
Попробуй всё и вся... может быть пол...
|
|
|
|