ja1yaz’s diary

感動したいおやじの備忘録的ブログ 

AD9850モジュールが届いた。

昨年末のAD9833に失望した時点でポチしておいたAD9850モジュールが届いた。

超簡易包装だったので、「本当に大丈夫か?」という思いから、すぐに状態を確認してみたくなった。

データシートを見ると、パラレル入力と、シリアル入力の方法があり、周波数の設定もAD9833とは異なり、LSBから先に入力する形態になっている。

AD9833と同じように使えるかと思っていたが全くの誤算だった。

AD9850モジュール

新たにコードを用意しないといけないことが分かった。

例によってRaspberrypi-picoに接続して確認してみた。

お試しのコードとして、下記で確認した。

 

from machine import SPI, Pin
import time
import math
spi = SPI(1, baudrate=8000000, polarity=0, phase=0, bits=8, firstbit=SPI.MSB,sck=Pin(10),mosi=Pin(11))

cs=Pin(13,Pin.OUT)

def spi_data_write(data):
    cs.value(0)
    spi.write(data.to_bytes(5,"big"))
    cs.value(1)

def fbit_lsb(data):
    i=0
    j=0
    k=0
    #a_lists=[]
    while i<40:
        
        j=int(data/(2**(39-i)))
        #a_lists.append(j)
        data=data%(2**(39-i))
        k=k+j*(2**i)
        i+=1
    
    return k
    
        
p_data=2**36*0x00
freq=10000000
f_data=int(freq/125000000*2**32)
data=f_data+p_data

print(data,bin(data))
print(fbit_lsb(data),bin(fbit_lsb(data)),hex(fbit_lsb(data)))
spi_data_write(fbit_lsb(data))
#time.sleep(1)
#spi_data_write(data)

 

念のためオシロスコープで、サイン波出力1,2と確認してみた。

 

AD9850_SIN波

Phase設定をゼロとしているのだが、出力されている位相差は、-123°と表示されている。何か設定がおかしいのだろう。

しかし、設定した周波数10MHzは、問題なく出力されているようだ。

マニュアルが、簡素化されていて、コマンドの関連もよくわからない。

コントロール用のビットは、W32 = 0; W33 = 0以外がリザーブされているらしい。

なので、W32 = 0; W33 = 0のままだ。位相設定は、ゼロとしているがなぜか、位相差は大きいままだ。

もう少しちゃんとやらないといけないとは思いつつ、検収を上げる意味では、十分だろう。