Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » инициализация DDS генератора AD9833\34


инициализация DDS генератора AD9833\34

Сообщений 1 страница 4 из 4

1

Форумчане, не получается инициализировать микросхему... на выходе генерирует высокая частота и изменить ее не получается...

согласно материалу http://microsin.net/adminstuff/hardware … rator.html

Таблица 9. Запись 0xFFFC000 в регистр FREQ0.

Данные SDATA Результат ввода слова
0010 0000 0000 0000 Запись слова управления: (D15, D14) = 00, B28 (D13) = 1, HLB (D12) = X
0100 0000 0000 0000 Запись регистра FREQ0: (D15, D14) = 01, 14 бит LSB = 0x0000
0111 1111 1111 1111 Запись регистра FREQ0: (D15, D14) = 01, 14 бит MSB = 0x3FFF

config PORTD.4=output
config PORTD.5=output
config PORTD.6=output

Dim Tm As Word 

Tm=&B0000 0000 0001 0000 0000     ' Сброс регистров, RESET    без пробелов записано !!!
gosub AD9834

Tm=&B0000 0000 0000 0000 0000     ' Сброс RESET 
gosub AD9834

Tm=&B0010 0000 0000 0000 0000     ' настройка
gosub AD9834

Tm=&B0100 0000 0000 0000     ' запись старших битов
gosub AD9834

Tm=&B0111 1111 1111 1111     ' запись младших битов,  разное записывал сюда...
gosub AD9834


AD9834:
    Reset Portd.6 
    Shiftout Portd.5 , Portd.4 , Tm , 0
    Set Portd.6     
Return

Что я не так записываю ? ничего не получается на выходе микросхемы изменить!!!!  По разному про бывал и ни как ))) Может RESET не так делаю ?

Отредактировано vanno44 (2017-08-10 19:40:50)

0

2

А эта микра не по I2C управляется?

0

3

Sergik07 написал(а):

А эта микра не по I2C управляется?


SPI

0

4

Проверенный рабочий код для DDS

Инициализация и вывод сигнала

$regfile = "m328PBdef.dat"                                  '
$hwstack = 100
$swstack = 100
$framesize = 60
$crystal = 1000000                                          '
$baud = 9600

' ******************************************************************************************
Dim Control_register As Word
Dim Freq_reg As Double At &H0208
Dim Freq As Dword At &H0200                                 '
Dim Frequency_low As Word At &H0204                         '
Dim Frequency_high As Word At &H0206                        '

Const Scale_f = 10.73741824
Config Portb = Output
Psynch Alias Portb.5                                        ' Control lines for AD9833
Sclk Alias Portb.6
Sdata Alias Portb.7

' Starting values
Freq_reg = 100000
Freq_reg = Freq_reg * Scale_f
Freq = Freq_reg
Gosub Frec_converter

Psynch = 1                                                  ' set control line high
Gosub Init_ad9833                                           ' send init word to AD9833

Do

Gosub Sinewave
Gosub Load_freq_register
Waitms 5000

Gosub Triangular
Gosub Load_freq_register
Waitms 5000

'Gosub Squarewave
'Gosub Load_freq_register
'Waitms 5000

Loop

End

' ******************************************* AD8833 COMMANDS *************************************
'
'Send out control words to AD9833
'Operation                             Register         Value
'Set Frequency                         FREQ0         FREEQ0: D15 = 0, D14 = 1
'Set Frequency                         FREQ1         FREEQ1: D15 = 1, D14 = 0
'Set Phase                             PHASE0        PHASE0: D15 = 1, D14 = 1, D13 = 0
'Set Phase                             PHASE1        PHASE0: D15 = 1, D14 = 1, D13 = 1
'Set Mode - Sine                       CNTRL         D5 = 0, D1 = 0
'Set Mode - Triangular                 CNTRL         D5 = 0, D1 = 1
'Set Mode - Clock                      CNTRL         D5 = 1, D1 = 0
'Set Frequency Register                CNTRL         D11 = 0 (choose FREQ0); D11 = 1 (choose FREQ1);
'Reset                                 CNTRL         D8 = 0 or 1
'Sleep - No power-down                 CNTRL         D7 = 0, D6 = 0
'Sleep - DAC powered down (PD)         CNTRL         D7 = 0, D6 = 1
'Sleep - Internal clock (IC) disabled  CNTRL         D7 = 1, D6 = 0
'Sleep - DAC PD and IC disabled        CNTRL         D7 = 1, D6 = 1

Init_ad9833:
    Sclk = 1                                                ' make sure it is high
    Psynch = 0                                              ' lower the PSYNCH pin
    Control_register = &B0010_0001_0000_0000                ' RST asserted and set up for sine wave
    Shiftout Sdata , Sclk , Control_register , 0 , 16       ' MSB first on falling clock
    Psynch = 1                                              ' raise it to finish transfer
Return

Sinewave:
    Sclk = 1                                                ' make sure it is high
    Psynch = 0                                              ' lower the PSYNCH pin
    Control_register = &B0010_0000_0000_0000                ' RST now removed and set up for sine wave
    Shiftout Sdata , Sclk , Control_register , 0 , 16       ' MSB first on falling clock
    Psynch = 1                                              ' raise it to finish transfer
Return

Triangular:
    Sclk = 1                                                ' make sure it is high
    Psynch = 0                                              ' lower the PSYNCH pin
    Control_register = &B0010_0000_0000_0010                ' RST removed and set up for triangular wave
    Shiftout Sdata , Sclk , Control_register , 0 , 16       ' MSB first on falling clock
    Psynch = 1                                              ' raise it to finish transfer
Return

Squarewave:
    Sclk = 1                                                ' make sure it is high
    Psynch = 0                                              ' lower the PSYNCH pin
    Control_register = &B0010_0000_0010_1000                ' RST removed and set up for square wave
    Shiftout Sdata , Sclk , Control_register , 0 , 16       ' MSB first on falling clock
    Psynch = 1                                              ' raise it to finish transfer
Return

Frec_converter:
' ***************************************** LOAD AD9833 FREQ REGISTER *****************************
'https://www.avrfreaks.net/forum/ad9833-dds-waveform-generator-frequency-word
'Note: Changed to manually select DDS chip, write 6 bytes, then manually
'deassert DDS chip, around all 6 bytes, not around 2 byte words.
'Freq is >10000 and <= 12.5 MHz
'Calculate the Freq Register using Double precision
'On Entry have FD3 = FM = 10.73741824
'Generate an 8 byte, (64 bit), value for the value to be further
'formatted to put in the frequency register.
'First Send Control Word, above.
'Then send two bytes: 01 and 14 LSBs of data
'Then send two bytes: 01 and 14 MSBs of data
'Example:
'12.5 MHZ (the Highest Freq in range for this chip and project:
'12.5MHz = 12500000 Hz
'12500000 * 10.73741824 = 134,217,728
'This is the 28 bit data for the freq register
'134,217,728 = 1000 0000 0000 0000 0000 0000 0000  (28 bits)
'Now format it for loading into the chip, 2 writes of 2 bytes each
'Send 01 and 14 LSB:  0100 0000 0000 0000
'Then 01 and 14 MSB:  0110 0000 0000 0000

$asm
   push R16
   PUSH R17
   PUSH R18
   IN R18,SREG
   PUSH R18

' lower 14 bit   Frequency_low
   LDS R18, &H0200
   STS &H0204 , R18
   LDS R18, &H0201
   CBR R18, &HC0
   SBR R18, &H40
   STS &H0205 , R18

' upper 14 bit    Frequency_high
   LDS R16, &H0201
   LDS R17, &H0202
   LDS R18, &H0203
   LSL R16
   ROL R17
   roL R18
   LSL R16
   roL R17
   roL R18
   STS &H0206 , R17
   CBR R18, &HC0
   SBR R18, &H40
   STS &H0207 , R18

   POP R18
   Out Sreg , R18
   POP R18
   POP R17
   pop R16
$end Asm

Return

Load_freq_register:

   Sclk = 1                                                 ' make sure it is high
   Psynch = 0                                               ' lower the PSYNCH pin
   Shiftout Sdata , Sclk , Frequency_low , 0 , 16           ' MSB first on falling clock
   Psynch = 1                                               ' raise it to finish transfer
   Sclk = 1                                                 ' make sure it is high
   Psynch = 0                                               ' lower the PSYNCH pin
   Shiftout Sdata , Sclk , Frequency_high , 0 , 16          ' MSB first on falling clock
   Psynch = 1                                               ' raise it to finish transfer

Return

+3


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » инициализация DDS генератора AD9833\34