ローコストLCDシリアル通信モニター(PIC16F1823)

Topics PICC Pro lite mode XC8  MPLABX Actual use USART PWM LCD Interrupt PICkit2 PIC16F1823

外部発振回路を使うPIC16F648A/PIC16F1827を使用した通信モニターについてはこちらへ移動しました。
 更に古いタイプ

はじめに

パソコンでは古い入出力となったシリアル通信ですが、組み込み系のマイコンや内部回路では、プロトコルが簡単で理解しやすいシリアル通信が今でも使われています。開発やデバッグなどでちょっとした電文を確認したい時があると思いますが、そのときに大変便利な装置です。アスキー表示、バイナリ表示ができます。また、簡易コンソールとしても使用できます。

特徴

以前に公開している16F648系からセラロックを省き、値段の安いPIC16F1823を使用した事で更にコストを下げています。
現在ソフトウェアがサポートしているLCDモジュールは4種類です。



デバッグ中の様子。秋月電子のFT232RLモジュールを使用して通信のデバッグを行っています。

基板裏側。配線はさほど多くないので、数時間で完成します。回路図上には表記していませんが、バックライト用の配線を施しています。

仕様

装置名 超ローコストシリアルLCDモニター16F1823版
対応通信スピード 1,200/2,400/4,800/9,600/19,200/31,250(midi)/38,400bps(公称値)
エラーレートは後述の付録参照
。内部発振の±2%の誤差が加わります。
70バイト以上の通信バッファ内蔵。
対応LCD SC1602B(16桁2行)
SC242A aitendo (24桁2行)
ACM0802C-NLW-***(8桁2行)
SC2004(20桁4行) ※ASCII表示のみ

※いずれも互換品が使用できますが、電源の配線は各LCDのデータシートを必ず確認の上ご使用ください。
通信フォーマット 8ビット、パリティ無し、ストップ1ビット
表示形式 ●ASCII表示 カーソルが点滅表示
●16進表示  カーソルがアンダーバー表示
表示形式切替は右ボタンで行います。
各種機能 画面初期ボタン、モード切替ボタン、ASCII/16進表示切替ボタン、LCD負電圧用発振出力
MPU Microchip 16F1823
クロック 内蔵オシレーター使用 8MHz ±2%
電源 3V~5V 消費電流2.8mA@3.3V
その他 PICkit2/ICD2インターフェース搭載

回路図



LCDの電源設定

表示仕様 代表的なキャラクターLCD型番 電源※
16桁2行 SC1602B 1:VCC 2:GND
SD1602 1:GND 2:VCC
8桁2行 ACM0802C 、LMB0820DFC 、SC0802 1:GND 2:VCC
24桁2行 SC242A(aitendo) 1:GND 2:VCC
20桁4行 SC2004 ※ASCII表示のみ 1:GND 2:VCC

※電源は必ず使用するLCDのデータシートを確認してください。


部品表

その他に、基板、電線、半田などが必要となります。

Item Quantity Reference Part 備考
1 4 C1,C3 0.1uF 積層セラミックコンデンサ
2 1 C2 10uF/16V 電解コンデンサ
3 1 DBG1 HEADER6_L PICKIT2/3接続用2.5mm Lアングルコネクタ
4 1 JP1 HEADER 2X2 電源設定用のヘッダーです。ジャンパーが2つ必要になります。
5 1 J1 CON2 電源コネクターです。
6 1 J2 CON1 通信入力用コネクターです。
7 1 LCD1 CON7X2
SB1602BS等
SUNLIKE SC1602BS-B液晶ユニット+コネクタオスメス
※電源について、使用するLCDモジュールの仕様を必ず確認してください。
8 1 R1 10K 10kΩ抵抗(茶黒橙金)※1/4~1/32Wのカーボン抵抗等
9 1 R2 100K 100kΩ抵抗(茶黒黄金)※1/4~1/32Wのカーボン抵抗等
10 2 R3,R4 100 100Ω抵抗(茶黒茶金)※1/4~1/32Wのカーボン抵抗等
11 3 SW2,SW3,SW4 PUSH_BUTTON タクトスイッチ
12 1 U1 PIC16F1823 PICマイコンMicrochip 16F1823 14ピンのDIPソケットも用意します。
13 1 VR1 T10K(B) 半固定10kΩ抵抗※3.3Vで使用するときは搭載しません。
14 1 VR2 T100K(B) 半固定100kΩ抵抗(多回転タイプ)※3.3Vで使用するとき
15 2 C4,C5 0.1uF 積層セラミックコンデンサ※3.3Vで使用するとき
16 2 D1,D2 1S2076 一般小信号ダイオード(1N4148等)※3.3Vで使用するとき

アイテム番号14~16について、この装置を3.3Vで使用したい場合に搭載する回路です。PICマイコンから負電圧を生成するための発振出力が出ているので、これを利用して負電圧を生成できます。

プログラムダウンロード

Folderで指定されているフォルダにmain.c等の全てを解凍すれば、プロジェクトがそのまま使用可能です。いずれもzipで圧縮されておりhexファイルが同梱されていますので、PICプログラマーがあれば、そのまま利用可能です。versionの部分をダウンロードします。表示されているBuild環境以外で再度ビルドした場合の動作等は保証されません。

SC1602B(16桁2行)・SC242A aitendo (24桁2行)・ACM0802C-NLW-***(8桁2行)用

Date version Build Folder Device note
New
 2015/12/20
1.43   MPLABX v3.15
XC8 v1.35
 C:\data\picsrc\MPLABXProjects\lcd_serial_16f1823.X

hex \lcd_serial_16f1823.X\dist\default\production
※3種類のhexファイルはフォルダ直下に格納済
PIC16F1823  MPLABX に対応。ソースコード修正。
2011/10/11 1.33 MPLAB8.76
Hitech PICC Pro lite mode v9.83
C:\picsrc\piccpro\lcd_serial PIC16F1823 MIDIボーレート31,250bpsに対応。
3種類のLCDは、各HEXに分かれていますが、ソースコードは16桁2行となっています。lcd.hのdefine文を切り替えることで各種LCDに対応します。
2011/6/26 1.31 MPLAB8.70
Hitech PICC Pro lite mode v9.82
C:\picsrc\piccpro\lcd_serial

(C:\picsrc\piccpro\lcd_serial\lcd_serial8x2)
(C:\picsrc\piccpro\lcd_serial\lcd_serial16x2)
(C:\picsrc\piccpro\lcd_serial\lcd_serial24x2)
PIC16F1823 SC1602B(16桁2行)用
aitendo (24桁2行)LCDモジュール用
ACM0802C-NLW-***(8桁2行)用

各LCDが毎のフォルダになっています。
これら3種類のソースはlcd.c以外は共通のファイルになっています。

解凍すると、別々のフォルダになっており、*.hexを書き込むことですぐに使用可能です。ソースは共通にしており、lcd.hのdefine文で液晶種類を切り替える方式にしています。

SC2004(20桁4行)

Date version Build Folder Device note
New
2011/6/26
1.00 MPLAB8.70,Hitech PICC Pro lite mode v9.82 C:\picsrc\piccpro\lcd_serial_16f1823_sc2004 PIC16F1823 SC2004(20桁4行)対応
バイナリーモードはHitech PICC ProのLiteモード時の容量制限のため実装していません。

LCDをシリアル通信を利用して表示機能として利用する事に特化しています。エスケープシーケンスによるカーソル移動ができます。


調整

使用するLCDの1pin、2pinの電圧に応じてJP1で電源の極性を変更します。LCDの濃度調整で、それぞれの電圧で最適になるように半固定抵抗を調整します。


使用方法

電源を入れると、予め設定されているボーレートで受信可能状態となります。(初期値は38,400bps)
ASCIIモードとBINモードでは、カーソルの表示が異なる事で、モードを表現しています。ASCIIモードは点滅、BINモードはアンダーバーです。変更は右ボタンを押す毎に切り替わります。表示モードは電源を切っても記憶します。
左ボタンを押すと、表示をクリアします。
ボーレートの変更は、モードボタンを押しながら左ボタンを押します。左右ボタンでボーレートを選択し、モードボタンで設定します。
モードボタンを押しながら左ボタンを押して離し、モードボタンが離されるまで、バージョンとLCD種別表示を行います。ボーレートは、次回のボーレート更新まで記憶します。

PIC内部のPWMモジュールから83.8KHzの発振出力しているので、これを利用してLCDのコントラストピンに負電源を与える事ができます。

検証はしていませんが、70バイト以上の通信バッファを持っているので、アスキーモードであれば、取りこぼしは恐らく発生しないと思います。バイナリーモードの場合は38,400bpsの場合、100バイト位の連続受信はできると思います。


付録

表示と動作

プログラム種別 ASCIIモード時 BINモード時
SC1602B(16桁2行)用
aitendo (24桁2行)LCDモジュール用
ACM0802C-NLW-***(8桁2行)用
カーソル点滅
文字が0x20~0xffのコードであれば表示

ascii code 12 (ctrl +l) LCD消去
ascii code 0x0b (ctrl +k)カーソル以降の行を消して切替
ascii code 0x0d (Enter) 行の切替のみ
ascii code 0x11 (ctrl +q)カーソルを消す
ascii code 0x17 (ctrl +w) カーソル表示
カーソルがアンダーバーになる
該当するアスキーコードを16進表示
SC2004(20桁4行) カーソル点滅
文字が0x20~0xffのコードであれば表示

エスケープシーケンスでカーソル移動
0x1b,0x5b,0x41 up
0x1b,0x5b,0x42 donw
0x1b,0x5b,0x43 right
0x1b,0x5b,0x44 left

ctrl+q カーソル非表示
ctrl+w カーソル表示
ctrl+l LCDクリア
ctrl+m カーソル以降を消去し改行
実装なし


エラーレート

・ボーレートのエラーレート表

Fosc(MHz) baud fosc brg(parm) x integer real error rate
8 1,200 8,000,000 64 103.16667 103 1201.923077 0.16026%
8 2,400 8,000,000 16 207.33333 207 2403.846154 0.16026%
8 4,800 8,000,000 16 103.16667 103 4807.692308 0.16026%
8 9,600 8,000,000 16 51.08333 51 9615.384615 0.16026%
8 19,200 8,000,000 16 25.04167 25 19230.76923 0.16026%
8 38,400 8,000,000 16 12.02083 12 38461.53846 0.16026%
8 31,250 8,000,000 16 15.00000 15 31250 0.00000%

上記エラーレートに内部発振回路の±2%の発振誤差が加わります。エラーレートを無視できない場合は、16F648A/16F1827の外付け発振回路式をお使いください。一般的に1ビットあたり3%程度であれば実用範囲と言われています。
ボーレートとクロックの相関計算をするエクセルのシートをダウンロードできるようにしておきました。excel calculation sheet

基板図


表面 青:基板上で配線 赤色:表側でジャンパー線 橙・緑色:ジャンパー線で対応
一部の抵抗、コンデンサやスイッチなどのピン番号は、回路図と異なっています。
詳しい配線やデータはダウンロードできます。






Date version Tool note
new
2015/11/23
bd_lcdserial16f1823_20151123-213614.zip  PasS 1.52
PCBE 0.60.1
 配線修正(D2,C5)、ライブラリ欠落のエラー回避
2012/5/4 bd_lcdserial16f1823_20120505-010615.zip PasS
PCBE

基板データはPadSで製作。PCBE形式へ変換したデータ同梱(DL不可)



2015/12/20 ソースコードをMPLABXに対応(バグ修正)
2015/11/23 PasS、PCBEデータ修正
2012/5/4 基板製作データ追加
2011/10/12 エラーレート表追加
2011/10/11midiクロックのボーレート追加 ver.1.33公開
2011/10/1 一部説明追加
2011/7/27 一部加筆
2011/6/26 ローコストLCDシリアル通信モニターのPIC16F1823版の公開

(C)2011-2015 air variable All Rights Reserved..


ホーム