*

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

ではっ!

関連記事

Qt_logo_2016

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

どもです。 前回のエントリーでは、ラジオボタンのグループ化と、選択されたボタンの特定方法まで記載し

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(4):イベントハンドラの設定

どもです。 前回のエントリーで、「タッチスクリーンを買った」と書きました。 今回からは、このタッ

記事を読む

no image

QtでRaspberryPi/GUI開発(3):ためしに時計を作ってみた(其の参)-StyleSheetの適用

どもです。 前回のエントリーでは、グループ化されたボタンに対するイベントハンドラについて書きました

記事を読む

eclipse_4.3_kepler

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

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

記事を読む

python

Ev3開発サポートツール(4)-Pythonによるグラフ表示

どもです。 前回のエントリーで、VisualStudioCommunityでのPythonの開発環

記事を読む

no image

C言語でEV3開発(7)

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

記事を読む

Arduino_Logo

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

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

記事を読む

MindStormControl_SprachScreen

EV3開発サポートツール(1)-C#のユーザーコントロール開発

どもです。 突然ですが、今回はC#に関するエントリになります。 具体的には、C#/WPFで、独自

記事を読む

no image

C言語でEV3開発(10)-opOUTPUT_CLEAR_COUNTコマンド

どもです。 前回のエントリーのラストで、「モーターを動かすコマンド」と書きましたが、今回紹介するコ

記事を読む

eclipse_oxygen

Eclipse/CrossCompile環境でプロジェクトをクリーンできない

どもです。 今回は、Eclipseでクロスコンパイル環境を作成した場合、を実行すると「指定されたフ

記事を読む

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
Rasbianの新しいバージョンが出たので、クロス環境を更新してみた。(その後)

どもです。 前回、Linux/RaspberryPiでのQt(Q

RasPi_Qt
Rasbianの新しいバージョンが出たので、クロス環境を更新してみた。

どもです。 RaspberryPiのOS:Raspbianの新し

no image
RaspberryPiのOS:RaspbianをNOOBSでセットアップしてみた

どもです。 今回の内容は、「今更!?」ですがNOOBSでRasp

GitHub
C/C++のスタブを自動生成するツールを公開しました

どもです。 突然ですが、C/C++の単体テストで使用する「スタブ

Arduino_Logo
フォトレジスタを使ってみた-Arduinoで光検出

どもです。 今回は、タイトル通り「フォトレジスタの使い方」です。

→もっと見る

PAGE TOP ↑