昨年末のAD9833に失望した時点でポチしておいたAD9850モジュールが届いた。
超簡易包装だったので、「本当に大丈夫か?」という思いから、すぐに状態を確認してみたくなった。
データシートを見ると、パラレル入力と、シリアル入力の方法があり、周波数の設定もAD9833とは異なり、LSBから先に入力する形態になっている。
AD9833と同じように使えるかと思っていたが全くの誤算だった。
新たにコードを用意しないといけないことが分かった。
例によって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と確認してみた。
Phase設定をゼロとしているのだが、出力されている位相差は、-123°と表示されている。何か設定がおかしいのだろう。
しかし、設定した周波数10MHzは、問題なく出力されているようだ。
マニュアルが、簡素化されていて、コマンドの関連もよくわからない。
コントロール用のビットは、W32 = 0; W33 = 0以外がリザーブされているらしい。
なので、W32 = 0; W33 = 0のままだ。位相設定は、ゼロとしているがなぜか、位相差は大きいままだ。
もう少しちゃんとやらないといけないとは思いつつ、検収を上げる意味では、十分だろう。