*

1台のarduinno nanoで割込みとSPIの同時使用

公開日: : Arduino, C言語, RaspberryPi, 開発

どもです。
先日手に入れたArduino nano(中華)で遊んでいます。
今回、この1台のArduino nanoで割込みとSPI通信を行ってみたので、その内容について書いてみます。

1.作業環境と使用デバイス
割込みとSPIを行うので、割り込み信号を発生させるデバイスとSPI通信を行うデバイスをそれぞれ用意します。
(もちろん1台で全て完結させることもできる…かもしれませんが、今回は別デバイスで行っています。)
で、実際に用意した構成が下記。
arduino_spi_and_interrupt

開発環境自体は、次の通りです。
<PC>
(HW)
CPU:Intel(R) Core(TM) i7-3770L 3.5GHz
メモリ:16.0(GB))

(SW)
OS:Windows7 Professional SP1 (64bit)
Arduino IDE:Ver.1.8.9
Eclipse : Ver.2019-12(4.10.0) (Build:20181214-0600)

<Arduino>
Arduino nano(中華版)

<RaspberryPi>
H/W:Raspberry Pi 3 model B
OS:Stretch – [2018-04-18-raspbian-stretch]

2.何のために?
これまで書いてきたエントリで、ArduinoからRaspberryPi3に対してSPI通信でデータを送信する方法を書いてきました。
なので、次は組み込みでよく使う機能である「割込み」について調べてみることにしました。
なお、実際の開発現場では、「通信」と「割込み」は当然ながら1つのデバイスに実装されます。
Arduinoでそれを実現できるか、実現するためにはどうしたらいいか、ということを調べるためです。

3.何をした?
Arduinoが2台手元(いや、実際にはもう数台ありますが…あ、どーでもいいですね)にありますので、一方で割込み発生用の信号を作ります。
もう一方のArduinoでは割込み発生回数をカウントし、かつSPI通信で割込みの発生回数をRaspberryPi3に送信します。
RaspberryPi3では、単純に受信した割込み回数を表示します。

4.やってみた
今回作成したコードですが、「キモ」になる割り込み/SPIの両方を実施するArduinoのもののみを載せます。
(他のコードは、これまで紹介してきたものとほとんど変わらない、あるいはとてもシンプルなので、割愛します。)

5.何をしている?
「何をしている?」とは書いていますが、やっていることと言えば、これまでの記事で書いてきた内容を、ただただ結合しただけ、です。

ただ、1つだけ説明しておく箇所があるとすれば、それはloop()内の、

です。
以前のSPI送受信サンプルでも書いたと思いますが、SPI通信が実行された際にバッファの先頭から順番に送信されるためには、SPIのデータピン(SPDR)に事前にデータをセットしておく必要があります。
上記コードは、そのための処理になります。
また、バッファのindexを1にセットしておくことで、SPI割り込みが発生した際に、SPDRにセットされたデータの次のデータが送信されます。

6.まとめ
今回のエントリでは、1台のArduinoで信号割込みとSPI通信(いや、SPIも割込みなんだけどね…)を同時に行うことに挑戦しました。
次回は、割込みを違う方法で発生させてみることに挑戦してみます。

ではっ!

関連記事

no image

C言語でEV3開発(12)-opOUTPUT_TIME_POWERコマンド

どもです。 今回のエントリーでは、これまた前回に引き続き、モーターを動かすためのコマンドについて書

記事を読む

iot_raspberrypi_gateway_001_eye_catch

IoT開発(10)
RaspberryPiをIoTゲートウェイにする(IV)
Appサーバーのセットアップ

この記事は、下記の記事の続きです。 IoT開発(6) RaspberryPiをIoTゲートウェ

記事を読む

no image

C言語でEV3開発(7)

どもです。 今回のエントリーでは、いよいよEV3を動かしていきます。 新しい環境に対して、最もよ

記事を読む

toppers

C言語でEV3開発(24)-APIの実行時間を測定してみた。

どもです。 今回、以前から気になっていた、開発環境/プラットフォームであるTOPPERS HRP2

記事を読む

toppers

C言語でEV3開発(26)-EV3で機械学習(1)-QLearningをC#に委譲してみた

どもです。 前回の投稿では、Q-LearningをEV3本体に実装してみたら、メモリが足りなくて動

記事を読む

no image

C言語でEV3開発(4)

どもです。 今回のエントリーは、前回のエントリー内容/EclipseでEV3の実行ファイルをビルド

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

どもです。 だいぶ、間が空いてしまいました。 久しぶりの更新です。 前回のエントリーで、「

記事を読む

toppers

C言語でEV3開発(27)-EV3にヒステリシス処理を実装してみた

どもです。 今回は、モーターから読み出した値に対するヒステリシス・フィルター処理です。 0.

記事を読む

cygwin_my_image

cygwinでstartコマンド

どもです。 このエントリでは、cygwinでWindows/コマンドプロンプトの「start」

記事を読む

raspberry-pi

QtでRaspberryPi/GUI開発(1):ためしに時計を作ってみた

どもです。 また更新の間隔が空いてしまいました。 久しぶりの更新です。 前回のエントリーで

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

arduino_relay_switch_002_ae_g5v_drv_eye_catch
Arduinoでリレースイッチ(2)-AE-G5V-DRV

どもです。 前回の記事では、「フォトカプラリレー」を使用したLチ

tlp222af_001_eye_catch
Arduinoでリレースイッチ(1)-TLP222AF

どもです。 つい先日、やっとのことでリレースイッチを手に入れるこ

c_sharp_eye_catch
外部からMariaDbにアクセスする(2)-C#からMariaDbにアクセスする。

どもです。 前回のエントリで、外部からMariaDbにアクセスす

c_sharp_eye_catch
外部からMariaDbにアクセスする(1)-データベースの設定

どもです。 今回は、Linux上のMariaDbにWindows

think_about_utest
middle_unit
最小…よりも(ほんの)少し大きいテストフレームワーク

どもです。 今回は、単体テストのフレームワークについて書きます。

→もっと見る

PAGE TOP ↑