格安ロジックアナライザで UART 通信の波形を確認してみた
やりたいこと
タイトルの通り、UART 通信の波形を確認してみたい。
結論
先に結論を言うと、上手く波形を取得することができました。
詳細については以下をご参照ください。
背景
下記の CO2 センサー + Arduino UNO でセンサーの値を UART で取得しようと思ったが、上手くいかなかった。
なので、原因を確かめるために、ロジックアナライザを使用してみようと思った。
やってみる
今回、UART 送信を行うマイコンボードについては、Arduino UNO を使用しましたが、他の物でも大丈夫です。そのため、Arduino・Arduino IDE の使用方法についての詳細な説明は省略します。
1. ロジックアナライザを購入・セットアップ
購入したもの
ロジックアナライザは amazon で 2000 円弱のものを購入しました。
- 購入したロジックアナライザ
機材の準備
ケーブルとクリップは、自身ではんだ付けして、接続する必要があります。
また、自分が購入した個体はコネクタにケーブルが刺さらなかったため、一旦コネクタを切断し、他の物を付け直しました・・・。
-
ケーブルとクリップの部分をはんだ付け
- とりあえず、GND を黒のケーブルにしておくと良いと思います
- とりあえず、GND を黒のケーブルにしておくと良いと思います
-
ケーブルが刺さらない・・・😔
-
コネクタを付け直して完成
- 恐らく GND と思われる部分が CND になっているが、ホントに大丈夫なんだろうか・・・🙄
- 恐らく GND と思われる部分が CND になっているが、ホントに大丈夫なんだろうか・・・🙄
2. ソフトウェアインストール・セットアップ
ソフトウェアは Pulse View を使用します。
Pulse View のインストール・デバイスのセットアップ
Pulse View でロジックアナライザを使用できる状態にする手順については、下記のページが丁寧に解説してくれているため、そちらをご参照ください。
Pulse View で UART のデコーダーを設定する
-
デコーダーを設定するには、以下の黄色と黄緑色のアイコン(プロトコルデコーダーを追加)をクリックします
-
その後、デコーダー選択が表示されるため、検索ボックス "UART" と入れると、デコーダーが表示されます。表示されたものをクリックすることで、選択することができます
-
最後に、TX を設定します。今回は D0 を設定します
トリガーの設定
必須ではないですが、波形を見やすくするため、トリガーを設定します。
詳細として、Arduino の 7番 Pin を PalseView でいう D7 に接続し、トリガーを設定しています。
設定は立ち上がり(LOWからHIGHを検知する)にします。このようにすることで、7番 Pin が HIGH になった瞬間に、ロジックアナライザが計測を開始してくれます。
3. 波形を取得する
コードは以下を使用しました。
補足:SoftWareSerial を使用していますが、Serial だけで実施できます。ただ、あまり使ったことがない SoftwareSerial を試しに使用してみようと思ったため、以下のようなコードになっています。
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int triggerPin = 7;
byte txdataChar = 0x0f;
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(triggerPin, OUTPUT);
delay( 1000 );
}
void loop() {
// トリガー用。ロジアナで HIGH を検知してサンプリングを開始する。
digitalWrite(triggerPin, HIGH);
digitalWrite(triggerPin, LOW);
// データを送信する。
mySerial.write(txdataChar);
// シリアルモニターにも出力する。
Serial.println(txdataChar);
// ビット反転する。
txdataChar = 0xff ^ txdataChar;
}
結果
意図通りに、波形を取得することができました。
UART の所を見ると 0x0F, 0xF0, 0x0F・・・というように、ビット反転しながら、データが送信されていることが判ります。
Discussion