前提・実現したいこと
Arduino MEGA2560とArduino IDEを用いて、24bitのD/Aコンバータ(以下DAC)を制御したいと考えています。
当該のICはSPI通信によってデータビットを書き込むことができるため、Arduino MEGA2560のSPI通信機能を使って、書き込みを行おうと考えています。
また最終的には、24bitのデータを16進数で扱い、Excelなどで管理したいと考えています。
発生している問題・エラーメッセージ
SPI.transfer(buffer,size)を用いた書き込みが行えない状態です。
ロジックアナライザで確認してみたところ、クロック周波数は確認できるのですが、
MOSIに出力が出ておらず、LOWが続いています。また、クロック周波数もわずかに8bitごとに途切れているようなパルスになっています。
また、16進数表記にしたバイナリデータを、バッファに入れ込む方法がわからず、詰まっています。
該当のソースコード
arduino
1#include <SPI.h> 2 3SPISettings ToRegister = SPISettings(5000000,MSBFIRST,SPI_MODE3); 4//クロック周波数:5MHz, 最上位ビットから転送,クロックアイドル時HIGH,立ち下がりエッジで情報を入力 5 6int buff[24] = {1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1}; 7 8 9 10void setup() { 11 // put your setup code here, to run once: 12 13 SPI.begin(); //SPI用のピン(50:MISO,51:MOSI,52:SCK,53:SS)をアクティブ化 14} 15 16 17 18void loop() { 19 // put your main code here, to run repeatedly: 20 SPI.beginTransaction(ToRegister);//セッティングを呼び出し 21 22 SPI.transfer(buff,24); 23 24 SPI.endTransaction(); 25 26} 27 28 29
試したこと
SPI.transfer(0xFF);など、8bitの通信は送信できていることをロジアナで確認しました。
調べたところ、この書き方では8bitまでしか通信を行えないとわかりましたので、バッファを用意することで8bit以上の通信を行おうと考えました。
質問させていただきたいこと
・上記のプログラムで通信を行えない原因
・(将来的にExcel等と連携させることを考えて)16進数をバッファに直接入れ込む方法
プログラミングの知識が浅いため、見当違いな解釈をしているかもしれませんが、どうぞよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/24 10:44