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.