Arduino nanoでソフトウェアシリアルが使えない問題

シェアする

タイトル通りArduino nanoでソフトウェアシリアルが使えない。

なぜ?

ソフトウェアシリアルとは何か


もともと、UARTがIC内部の機能として存在する。
つまり、ハードウェア上の機能である。

それを書き込みや外部とのシリアル通信に利用しているが、
その機能が1つしかICにない。

もし、2以上シリアル通信が必要になったらどうするか。

答えとしてはプログラムを組んでUARTの動作を再現すること。

それが、ソフトウェアシリアルというもの。

参考:ArduinoリファレンスSoftwareSerialライブラリ 

問題点


ソフトウェアシリアルのライブラリにあるスケッチ例を利用してループバックを試している。

が、シリアルコンソール上には「Ready」の文字が出るだけで先に進まない。

原因を探るためにまずはTXピンの波形を取る。

送信のTXピンはそれらしい信号を送信しているが、見た感じ受信側が反応していない。

他のデジタルピンに変更しても反応なし。

一応、調べてみたらこんなことが書かれていた。

Arduino forum : SoftwareSerial on Arduino Nano

下で「2つの独立したArduinoを想定している。

なるほど。

原因


「待てよ、おまえを知っているぞ」※ゲーム、スカイリムのセリフ

前にも割り込みなんかで紹介したプログラムは並列処理されない」と言う点。

完全に忘れてました( ◠‿◠ )

つまり、送信中はそのプログラムが動作している訳で受信プログラムはまだ動けず。

ハードウェア実装のUARTならバッファに溜めこむところだが、ソフトウェア実装は上記の通り送信中はバッファの口すら開かず溜まってくれない。

なら、Arduino2個用意すればいいんじゃね?

それはちょっと。

結果からすると、ご期待に応えられず対応策が考えられませんでした・・・。

でも、同時に送受信しない限りは問題なさそうなので使えなくもないかなと。

お詫びに次回以降、MAX10でハードウェアUARTを複数作って実践する記事を書くので許してね。

おわり

コメント

  1. nog2020 より:

    max10でのハード設計楽しみにしています!

    • おがぴ より:

      こんばんは!MAX10の用意がもう少しかかりそうですがやってみます!今持ってる基板、ブレッドボードの端と端を占拠してしまうのでジャンパー線が通せない状況なんですよね・・・これを解決次第ってところです。