SPI (Serial Peripheral Interface) とはどんな通信方式なのかを勉強して、シフトレジスタ 74HC597 (PISO) から Arduino へ、SPI でデータを受けとる実験をしてみました。
この記事は「meyon's STUDY」に投稿した記事の抜粋です。
なお、Arduino 公式サイトのアナウンスに従い、用語の言い換えをしています。新しい用語については Arduino & Serial Peripheral Interface (SPI) を参照してください。
74HC597 から Arduinoへデータを受ける方法
データを受信する場合も、Arduino からデータを送ります。このとき送信するデータはダミーデータです。SPI.transfer(dummyData) でダミーデータが に送信され、同時に受信した のデータは戻り値として出力されます。
ダミーデータは 74HC597 では利用しませんから、 はどこへも接続しません。利用するのは送信時に出力されるシリアルクロック で、74HC597 のシフトクロック に接続します。
74HC597 側では、チップセレクト を受けてパラレルロード を生成し、ストレージレジスタからシフトレジスタへデータを渡します。そして に同期してデータを へ送出します。
送信が完了すると が HIGH になりますので、これをストレージクロック として、外部からのパラレルデータをストレージレジスタへ読み込みます。つまり、74HC597 から送られてくるデータは、一回前の通信が完了したときのデータということになります。
コントローラ (Arduino) 側では、チップセレクト を LOW にすることで通信を開始し、終了したら HIGH にもどす。SPI.transfer() を実行するとシリアルクロック が送出される。 に出力されるデータは、ペリフェラル側では利用しない。
ペリフェラル (74HC597) 側。 は につながっているが、LOW になっても何も起こらない。
の立ち下がりエッジで、一定時間のパラレルロード パルスを生成する。これにより、シリアルデータ に データ が出力される。
() の立ち上がりエッジでデータをシフトし、8ビットのデータが へ送られる。コントローラも、データを の立ち上がりエッジで読み込み、SPI.transfer() の戻り値として出力する。
受信が終了し が HIGH になると、それがストレージクロック となり、新たなデータがストレージレジスタへ読み込まれる。
回路図
Arduino は Nano Every です。使用するピンは、 が D13、 が D12、 は D8 です。UNO や NANO では は D10 ですので、間違えないように。 (D11) は使用しません。
左の Dip スイッチで 8ビットのデータを生成、それをシフトレジスタ 74HC597 に読み込み、Arduino へ送ります。
下部の NOR ゲート 74HC02 を使った回路はワンショットパルス回路。チップセレクト が LOW になったときに、パラレルデータをロードするための を生成します。パルス幅は 90nsほどになっています。
スケッチ
9行目。Arduino Nano Every では のピンモードを設定してやらないとうまく動きません。UNO や NANO では必要ないです。
Dipスイッチで生成した 8ビットデータが、シリアルモニタに出力されます。
spi_receiving_test.ino
// Sketch for 74HC597 to Arduino SPI-Test 2023.9.10 meyon
#include <SPI.h>
SPISettings mySettings(8000000, MSBFIRST, SPI_MODE0);
void setup() {
// In Nano Every,SS is pin-D8, Mode setting required
pinMode(SS, OUTPUT);
Serial.begin(9600);
SPI.begin();
}
void loop() {
static byte receivedValue = 0;
SPI.beginTransaction(mySettings);
digitalWrite(SS, LOW);
receivedValue = SPI.transfer(0xff);
digitalWrite(SS, HIGH);
SPI.endTransaction();
Serial.println(receivedValue, BIN);
delay(50);
}
投稿者の人気記事
-
meyon230
さんが
2023/09/21
に
編集
をしました。
(メッセージ: 初版)
-
meyon230
さんが
2023/09/21
に
編集
をしました。
(メッセージ: 一般公開)
-
meyon230
さんが
2023/09/21
に
編集
をしました。
(メッセージ: タグ「SPI」を追加)
-
meyon230
さんが
2023/11/01
に
編集
をしました。
(メッセージ: リンク先URL変更)
ログインしてコメントを投稿する