DDS_AD9851

Sterowanie pod BASCOM AVR i przeliczenia

Przeliczenie słowa AD9851

00000001 01101100 00010110 11000001 -1MHz (23860929 *180)/2^32= 4294967220/4294967296 =0.999

00000010 11011000 00101101 10000011 -2MHz

00000100 01000100 01000100 01000100 -3MHz

00001110 00111000 11100011 10001110 -10MHz

00000000 00000000 00000000 00011000 -1Hz

00000000 00000000 00000000 00110000 -2Hz

00000000 00000000 00000000 01001000 -3

00000000 00000000 00000000 01011111 -4

00000000 00000000 00000000 11101111 -10Hz

00000001 01101100 00010110 11000001

1 01101100 00010110 11000001

przeliczenia

DDS_FTW - słowo sterujące DDS - częstotliwość startu

DDS_FTW = F_start * 2^32 / DDS_CLCK

dla 1MHz

DDS_FTW = 1 MHz * 2^32 / 180

DDS_FTW = 4294967296/180

DTW_TW = 23860929.422222222222222222222222 =23860929(d)1011011000001011011000001 (bin)

0000000 1011011000001011011000001 sprawdzenie

00000000 00000000 01011101 00110101 - 1kHz 23861*180/2^32 = 4294980/4294967296= 0.0010000029578805

DDS_FTW = 0.001 MHz * 2^32 / 180

DDS_FTW = 4294967.296/180

DTW_T = 23860.929422222222222222222222222 ~ 23861

1. Phase set to 11.25°

2. 6? REFCLK multiplier engaged

3. Powered-up mode selected

4. Output = 10 MHz (for 180 MHz system clock)

00001110 00111000 11100011 10001110

W0 = 00001001

W1 = 00001110

W2 = 00111000

W3 = 11100011

W4 = 10001110

If in serial mode, load the 40 bits starting from the LSB lo ca tion

of W4 in the above array, loading from right to left, and end ing

with the MSB of W0

Table III. 40-Bit Serial Load Word Functional Assignment

W0 Freq–b0 (LSB)

W1 Freq–b1

W2 Freq–b2

W3 Freq–b3

W4 Freq–b4

W5 Freq–b5

W6 Freq–b6

W7 Freq–b7

W8 Freq–b8

W9 Freq–b9

W10 Freq–b10

W11 Freq–b11

W12 Freq–b12

W13 Freq–b13

W14 Freq–b14

W15 Freq–b15

W16 Freq–b16

W17 Freq–b17

W18 Freq–b18

W19 Freq–b19

W20 Freq–b20

W21 Freq–b21

W22 Freq–b22

W23 Freq–b23

W24 Freq–b24

W25 Freq–b25

W26 Freq–b26

W27 Freq–b27

W28 Freq–b28

W29 Freq–b29

W30 Freq–b30

W31 Freq–b31 (MSB)

W32 6? REFCLK Multiplier En able

W33 Logic 0*

W34 Power-Down

W35 Phase–b0 (LSB)

W36 Phase–b1

W37 Phase–b2

W38 Phase–b3

W39 Phase–b4 (MSB)

to poniżej to akurat definicja pod nogi dla atmega8

----------- początek fragmentów bascoma

Dim Ddsword As Long 'DDS_FTW- Frequency Tuning Word

Dim Dds_mode As Byte ' 1x=0 6x=1 tryp pracy generatora DDS AD9851

Dds_mode = 1

Config Portd.7 = Output ' DDS FQ Update

Dds_fqud Alias Portd.7 '13 noga procka - 8 noga DDSA

Config Portd.5 = Output 'DDS DDS_CLOCK

Dds_clock Alias Portd.5 '11 noga procka - 7 noga DDSa

Config Portd.6 = Output 'DDS DATA

Dds_data Alias Portd.6 '12 noga procka - 25 noga DDSa

' a to cała magia wysłania danych do DDS AD9851 po 3 drutach

Shiftout , Dds_data , Dds_clock , Ddsword , 3 , 32 , 2 'zawsze wysyłane 32 bity LSB first

Shiftout , Dds_data , Dds_clock , Dds_mode , 3 , 8 , 2 'zawsze dane wysyłane do FTW

Set Dds_fqud

nop

nop

nop

Reset Dds_fqud

nop

nop

---------------------- koniec fragmentów bascoma...

a tu wzór na zasade obliczania

DDS_FTW = F_GEN_OUT * (2 ^ 32) / DDS_CLOCK

Dla informacji po włączeniu trzeba DDS-a zainicjować wysyłając zera.

Sam nie sprawdziłem ale koledzy wykorzystują podwójne wysłanie zer.

Dlatego przyjmuję że jest to pewniejszy sposób niż jeden raz.

Zastanawiam się tylko czy da się zmniejszyć opóźnienie i czas wysyłania pakietu przez minimalizację opóźnień " nop " w programie.