*

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も割込みなんだけどね…)を同時に行うことに挑戦しました。
次回は、割込みを違う方法で発生させてみることに挑戦してみます。

ではっ!

関連記事

Arduino_Logo

Arduino nano(中華版)をセットアップしてみた

どもです。 突然ですが、「Arduino nano」互換(なのか?)の中華ボードを手に入れました。

記事を読む

no image

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

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

記事を読む

eclipse_4.3_kepler

elicpse/CDTでのgdbでのソースを追従したデバッグができない問題

どもです。 今回のエントリーは、Eclipse上でgdbを利用したデバッグ中に発生する問題について

記事を読む

no image

Windows-QtCreatorでのデバッグ

どもです。 更新の間隔が空いてしまいました。 久しぶりの更新です。 最近、Qtを触り始めま

記事を読む

raspberry-pi

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

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

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(11)-SPI通信をしてみた(その3)

どもです。 えー。 「Qtで…」とか書いておきながら、今回もやっぱりQtは出てきません。 そろ

記事を読む

google_test_top

C言語でEV3開発(5)

どもです。 今回のエントリーは、前回のエントリーでちくっと触れた、「単体テスト」について、です。

記事を読む

no image

C言語でEV3開発(7)

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

記事を読む

Arduino_Logo

ホールセンサーの種類と使い方

どもです。 今回のエントリは、表題にある「ホールセンサー」についてです。 1.「ホールセンサ

記事を読む

eclipse_oxygen

苦肉の策でLinux/EclipseでRaspberryPiのクロス環境を構築してみた

どもです。 前回のエントリでは、仮想環境(VirtaulBox)を用いたRaspberryPi3の

記事を読む

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="">

RasPi_Qt
QtでRaspberryPi/GUI開発(12)-gpioの状態をGUIに反映する

どもです。 今回は、gpioピンの状態(HIGH/LOW)の変化を画

raspberry-pi
RaspberryPi起動時にpigpiodがスタートしないようにする

どもです。 これまでpigpioを使用してRaspberryPiから

no image
自宅で電子工作(1):ブレッドボードでの配線を省略する

どもです。 突然ですが、電子工作を始めてみました。 1.背

Arduino_Logo
ホールセンサーの種類と使い方(割込み編)

どもです。 前回に引き続き、今回もホールセンサーについてです。

Arduino_Logo
ホールセンサーの種類と使い方

どもです。 今回のエントリは、表題にある「ホールセンサー」についてで

→もっと見る

PAGE TOP ↑