Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » DDS генератор=PIC+Proton+AD9833 (Работа с программируемым генератором AD9833)
DDS генератор=PIC+Proton+AD9833
Sh_Juri Дата: Пн, 23.05.2011, 13:59  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 20.01.2009

Статус: Offline

Затеялся сделать генератор на AD9833. Уж очень понравились чужие разработки. Но все проги или на СИ или на Асме. Что-то не то делаю. Буду признателен за любую помощь. Схема и прога в архиве.
Прикрепления: AD9833.rar (37.9 Kb)


Juri
ЯНДЕКС Дата: 23.05.2011
MasterPic Дата: Чт, 26.05.2011, 07:08  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 186
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Так а что не получается то?
Sh_Juri Дата: Пт, 27.05.2011, 07:43  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Нужно даташит внимательно поизучать на тему генерирования синусоиды. Возможно, упущена какая-то незначительная деталь
demanik Дата: Сб, 28.05.2011, 14:53  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (Sh_Juri)
Затеялся сделать генератор на AD9833


Я тоже заказал AD9833, на следующей неделе приедет и буду пробовать запустить. cool


Попробуй всё и вся... может быть пол...

Sh_Juri Дата: Сб, 28.05.2011, 20:24  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 20.01.2009

Статус: Offline

Первую микросхему паял паяльником в переходник DIP. Сжог (если была рабочая). Следующие две - феном (температурой не более чем в datasheet). С ними и работаю.

Juri
demanik Дата: Сб, 28.05.2011, 22:35  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 10   ±
Замечания:   ±
На сайте с 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 милисекунд думаю вообще ненужны по даташиту там паузы несколько наносекунд при Вашей частоте кварца они атоматически болучатся больше.
cool


Попробуй всё и вся... может быть пол...

demanik Дата: Вс, 29.05.2011, 15:04  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 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
cool


Попробуй всё и вся... может быть пол...

Sh_Juri Дата: Пн, 30.05.2011, 12:31  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 20.01.2009

Статус: Offline

Попробовал оба варианта на двух чипах. Ожидаемого результата нет. Пробовал загружать бинарный код. Без результата.

Juri
ЯНДЕКС Дата: 30.05.2011
anatol Дата: Пн, 30.05.2011, 21:38  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 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
Репутация: 10   ±
Замечания:   ±
На сайте с 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. cool


Попробуй всё и вся... может быть пол...

Sh_Juri Дата: Вт, 31.05.2011, 11:48  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 20.01.2009

Статус: Offline

Нет и так не получается. Спасибо за ссылки. С их сайта я брал кодовые слова. За месяц экперементов даже пробовал разобраться в чужих прогах на СИ. "MSBFIRST_H" ,я думаю, дожно удерживать SCLK в "1". Но и этот вариант результата не дал.

Juri
demanik Дата: Вт, 31.05.2011, 12:33  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (Sh_Juri)
Нет и так не получается

Приехал мой чип. Разобрался happy
Логический анализатор рулит.
Вместо 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

Каждые пол секунды меняет синус на треугольник и наоборот. cool


Попробуй всё и вся... может быть пол...

Форум Picbasic.ru » Программирование МК » Proton PicBasic » DDS генератор=PIC+Proton+AD9833 (Работа с программируемым генератором AD9833)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: