おんどとりとHEMSで測ってみよう! -30ページ目

おんどとりとHEMSで測ってみよう!

地元HMで建てたおうちのいろんなことを測ってみます。

今回も電子工作のお話です。

さらにマニアックになっていきますが、自分用の備忘録という意味もあるので、最後まで書いてみます。

前回は、AC100Vの電圧と光センサーの抵抗値を小さな電圧に変換して、マイコンに取り込むところまで書きました。
今回は、マイコンに取り込んだ数値をパソコンに送信する部分のお話です。

マイコンとパソコンをつなぐのに、RS232Cという通信規格を使います。
レオの年代より上の方だと、RS232Cという言葉に、ピーンと来るのではないでしょうか。
そうです。昔、パソコンに通信用モデムをつなぐのに使っていた規格です。

RS232Cは大昔の規格なので、使う電圧が±10V~20Vと、マイコンレベル(5V以下)と比べると、とても高いのが特徴です。
その分、(単純な伝送路としては)ノイズには強いのですが、一方で、通信速度が遅くて、プラスとマイナスの二つの電源を用意する必要があるという欠点があります。

今回の工作では、1分に1回、30文字くらいの伝送をするだけなので、通信速度が遅いのは全く問題ではありません。
しかし、電源が複雑になるのは問題です。
それを解決するためにRS232C変換ICというのがあります。今回使うのはADM3202ANというICです。
これはとても便利で、マイコンレベルの信号をRS232Cレベルの信号に増幅してくれます。
しかも、このIC自体は一般的な3.3Vの電源しか使いません。
IC自体が電圧発生装置の機能を持っているので、説明書どおりにコンデンサーをつけるだけで、期待したとおりに動きます。
どうせなら、IC内にチップコンデンサも埋め込んでくれるといいんですけど…



さて、その変換ICですが、回路図で言うと、右側の四角い塊になります。
見ていただくとわかりますが、基本的には、PICマイコンから2本の通信線(送信と受信ですね)を受け取って、RS232C用のD-SUB9コネクタに送り出す(これも送信と受信ですね)だけです。
それ以外は、このICが電圧を確保するために必要な回路なので、あまり気にする必要はありません。

なお、このADM3202というICは5Vでも動くそうなのですが、何せ長期間使いっぱなしになるので、メーカー推奨値の3.3Vで動かしています。

また、RS232Cは、シリアル通信とはいえ、送信用の線と受信用の線を明確に分けています。なので、送信と受信の接続を間違うと動きません。

続いて、ソフトウェアの話に移ります。
今回は、USART Library for PIC – Setup on MPLAB X IDEに紹介されている、Avinashさんという方が作ったライブラリを使います。
ページ中段あたりからダウンロードできます。
解凍すると、
・usart_pic16.c
・usart_pic16.h
・isr.c
の3つのファイルが出てきますので、.cファイルはプロジェクトのソースに、.hファイルはプロジェクトのヘッダーに加えて、さらにメインのソースコードに#includeを書き加える必要があります。

このライブラリは、簡単にRS232Cを扱うことができる優れものですが、使うにあたって1点だけ、注意することがあります。
それは、このライブラリが、PICの動作周波数を20MHzと想定しているということです。

usart_pic16.cの40行目あたりを見ると、9600baud、19200baud,28800baud,33600baudそれぞれの場合のレジスタSPBRGの値が書いてあります。この値は、20MHz動作の場合の数字です。この数字を自分が動かしたい周波数で正しく動作する数字に修正する必要があります。
計算式は、マニュアルに書いてあります。16F1827の英文マニュアルですと、26.3に、16F1938の日本語マニュアルですと、25.3に書いてあります。それを参考にして、自分が通信したいbaud rateでのSPBRGを計算して、usart_pic16.cを修正します。

ライブラリには様々な関数が入っていますが、今回使うのは、4つだけです。
ポート初期化 USARTInit(baud rate)
受信確認  USARTDataAvailable()
一文字受信 USARTReadData()
文字列送信 USARTWriteLine(文字列)

ポート初期化は最初に1度だけ行います。
通信速度などの設定を行います。

PCとの通信手順は、こんな感じです。
(1) PC タイマーを使って一定間隔で"S"の文字を送信
(受信確認後、一文字受信)
(2) PIC "S"の字を受信したら、測定を開始し、結果を2回送信
(文字列送信)
(3) PC 結果を受信して2回分を比較し、同じであれば1サイクル完了
受信結果が異常であれば、"r"の文字を送信(エラー訂正)
(4) PIC "r"の字を受信したら、測定結果を、2回再送信して(3)へ

このサイクルを指定した時間に1度繰り返します。

測定に0.02秒以上はかかっていますし、その後のデータ転送にも、
30文字 × 8bit / 9600bps = 0.025秒
以上はかかっているので、1サイクルに最低でも0.05秒はかかっているはずです。

なので、測定周期は、0.1秒程度が限界ではないかと思われます。
なんて言いながら、確認試験では1秒周期までしか試していません。(^▽^;)

まだ続きますが、今回はこれで終わりです。
次回は最終回ということで、PCとPICのソースコードを全公開したいと思います。



にほんブログ村に参加しています。
下のボタンのうちお好きな一つをクリックしていただけるととてもうれしいです。(^-^)/


にほんブログ村 住まいブログ 一戸建住宅(施主)へ にほんブログ村 環境ブログ 風力発電・太陽光発電へ にほんブログ村 地域生活(街) 東北ブログ 山形県情報へ
にほんブログ村  にほんブログ村  にほんブログ村
 ブログランキング