ローコストLCDシリアル通信モニター(内部・外部クロック版)

Topics PICC Pro lite mode Actual use USART PWM LCD Interrupt PICkit2 PIC16F627A PIC16F628A PIC16F648A PIC16F1827  MPLAB SNAP

最新のPICマイコンを使用した更に安く実現できる方法はこちら。

はじめに

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

SC1602B(16桁2行)用 

SC2004C(20桁4行)用

aitendo (24桁2行)LCDモジュール用

ACM0802C-NLW-***(8桁2行)用

特徴

CGRAM対応。promdata.cのデータを書き換えると8種類のオリジナルキャラクターに対応します。
CG0〜7はアスキーキャラクタコード0x80〜0x87に対応しております。0x88〜0x8Fの場合はCG0〜7となります。
初期設定値として、トランプ記号などが入っています。
CGRAM0 ハート、CGRAM1 ダイヤ、CGRAM2 スペード、CGRAM3 クラブ、CGRAM4 令、CGRAM5 和、CGRAM6 ●、CGRAM7 ♪



LCDのキャラクター作成は下のサイトが便利です。マウスで直接ドットを操作し、出来上がった8バイトのデータをコピーしてpromdata.cのデータに使用します。 LCD Interfacing Tutorial: CGRAM Creating custom character

外付け発振回路を使用しているので、8MHzでもエラーレートが0.16%と小さく、水晶発振子を7.9872MHzにすれば、エラーレートがゼロとなります。

仕様

装置名 超ローコストシリアルLCDモニター
対応通信スピード 1,200/2,400/4,800/9,600/19,200/31,250(midiクロック)/38,400bps(公称値)
8MHzセラロック使用時、 ±0.5%の誤差
16F1827では内部クロックの使用が可能。その場合は±2%の誤差
エラーレートは後述の付録参照
バッファサイズ
PIC16F648A 64バイト
PIC16F1827 256バイト/128バイト
通信フォーマット 8ビット、パリティ無し、ストップ1ビット
表示形式 ●ASCII表示
コントロールコードはCRとCL以外は無視されます。
CR(0x0D)表示行を切り替えます。改行された場合は、そのライン以降のテキストは表示されたままとなります。
CL(0x0C)は表示をクリアし、カーソルをホーム位置に戻します。
●16進表示
アスキーコードを16進数で表示します。
各種機能 画面初期ボタン、モード切替ボタン、ASCII/16進表示切替ボタン、LCD電圧切替
MPU Microchip PIC16F627(A) (16F628(A),16F648Aでも可)※ver3.00以降は16F628(A)/16F648A, PIC16F1827
クロック 8MHzレゾネーター使用(7.9872MHzが入手できればエラーレートゼロ)
電源 3V〜5V 消費電流2.8mA@3.3V
その他 PICkit2/ICD2インターフェース搭載

回路図


※この回路は16F648Aですが、16F1827でも同じ配線です。

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 1 CN1 CON7X2 それぞれ対応しているLCDをご用意してください。
※それ以外の互換モジュールでは、電源の1-2が逆転している場合がありますので、配線時には使用するLCDモジュールの仕様を確認してください。
2 1 CN2 HEADER6_L PICkit2インターフェースコネクタ2.54mm L型
3 1 C1 10uF/16V 電解コンデンサ
4 3 C2,C3,C4 0.1uF 積層セラミックコンデンサ
5 2 D1,D2 1S2076_RENESAS 一般小信号用ダイオード(1SS119や1N4148等)
6 1 J1 CON2 電源コネクタ(別途3.3Vか5V5mA程度の電源が必要です)
7 1 R1 10K 10kΩ抵抗(茶黒橙金)※1/4〜1/32Wのカーボン抵抗等
8 1 R2 100 100Ω抵抗(茶黒茶金)※1/4〜1/32Wのカーボン抵抗等
9 3 SW1,SW2,SW3 SW PUSHBUTTON タクトスイッチ
10 1 SW4 SW SPDT トグルスイッチ
11 1 U1 PIC16F648A
PIC16F628(A)
PIC16F1827
PIC16F648AかPIC16F1827 を推奨します。
12 2 VR1,VR2 T100K(B) 半固定100kΩ抵抗(多回転タイプ)1kΩの固定抵抗+10kΩの半固定抵抗でも可
13 1 Y1 8MHz レゾネータ(セラロック)8MHz
14 1   基板 サンハヤトICB-93相当
15 4   スタッド ねじ、スペーサ
16 1  R3 100kΩ 通信のプルアップ
17 1 JP1 HEADER2X2 2列2段のヘッダー
  2   Short PIN JP1用ショートピン
      部材 電線、半田などが必要となります
      備考 その他、使用するインターフェース部品(私の場合はPHコネクターを二つ搭載し、トグルスイッチで切り替えています。

プログラムダウンロード

16F1827 SC1602B(16桁2行)・SC242A(24桁2行)用・ACM0802C(8桁2行)用


Date version Build Folder Device note
2024/11/02 2.00  MPLAB X IDE 6.20, XC8 Ver 2.50  lcd_serial_16f1827.X  PIC16F1827  MPLAB Xに対応。通信バッファサイズは128に落としています。フォルダ内に既にビルド済ファイルを入れております。
安価な書き込み機であるMPLAB SNAPに対応させるため、低電圧書き込みを有効にしてます。また(24行はあまり需要がないので、割愛しています。SNAPを使用するにあたり、一度でも高電圧書き込みを行ったPICマイコンには書き込みができないため、新品のPICマイコンを使用するか、PICkit4などの高電圧書き込み可能PICプログラマでプログラムすることになります。
2011/10/12 1.00 MPLAB8.76,Hitech PICC Pro lite mode v9.83 l cd_serial_16f1827 PIC16F1827 ソースコードは16桁2行外部クロックにしています。ビルド時main.hの部分を変更することでそれぞれのLCDタイプとクロックタイプを変更することが可能となっています。
同梱内容:ソースコード、プロジェクトコード一式、回路図、各Hexデータ

16F1827 SC2004C(20桁4行)用

Date version Build Folder Device note
New
2025/1/26
2.00  MPLAB X IDE 6.20, XC8 Ver 3.00 lcd_serial_16f1827_sc2004.X PIC16F1827 MPLAB SNAPに対応。外部発振方式にする場合は
main.hの define _InternalClockをコメントアウトしてください。 コンパイル時は、Project Properties ->XC8 Compiler Optimizationを選択しOption categoriesの項目で Optimization levelを2に変更する必要があります。


以下は旧版です。今後のアップデートはPIC16F1827にて行います。

Date version Build Folder Device note
2011/6/20 3.30 MPLAB8.70,Hitech PICC Pro lite mode v9.81 C:\picsrc\piccpro\lcd_serial16x2 PIC16F628A
(PIC16F648A)
SC1602B(16桁2行)用
 2011/6/20 1.20 MPLAB8.70,Hitech PICC Pro lite mode v9.81 C:\picsrc\piccpro\lcd_serial24x2 PIC16F628A
(PIC16F648A)
SC242A(24桁2行)用
2011/6/16 1.00 MPLAB8.,66 Hitech PICC Pro lite mode v9.81 C:\picsrc\piccpro\lcd_serial8x2 PIC16F628A
(PIC16F648A)
ACM0802C(8桁2行)用
2009/11/17 1.11 MPLAB8.40,Hitech PICC Pro lite mode v9.70 C:\picsrc\piccpro\lcd_serial_sc2004 PIC16F648A SC2004C(20桁4行)用

調整

LCDの濃度調整で、それぞれの電圧で最適になるように半固定抵抗を調整します。

表示と動作

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

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のコードであれば表示
文字が0x80〜0x87のコードはCGRAM0〜7までの対応
文字が0x88〜0x8fのコードはCGRAM0〜7までの対応

エスケープシーケンスでカーソル移動
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 カーソル以降を消去し改行

使用方法

電源投入時のLCD表示
スイッチは左から
コントラスト切り替えトグルスイッチ モードボタン 左ボタン 右ボタン

一番右のトグルスイッチは、回路図にありませんが、モニターライン選択です
モードボタンを押しながら左ボタンを押します
すると「SPEED:」と表示が変わりますのでモードボタンを離します
現在のボーレートが表示されます
左ボタンがボーレートダウンに対応しています
右ボタンはボーレートアップに対応しています
モードボタンを押し続けると、ボーレートが変更された場合はOKと表示します。
通信待機状態で右ボタンを押すと、アスキーと16進表示モードと交互に切り替わります。
16進表示モード時のabcdefを受信した表示
アスキーモード時のabcdefを受信した表示
3.3Vで使用する場合はコントラスト切り替えを切り替えて使用します

技術情報

動作説明

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

3Vでも動かせるようにするため、別途PIC内部のPWMモジュールで発振させ、負電源としてLCDに与えています。

ハードウェア

・3.3Vで動作させるため、PIC16F648Aのブラウンアウトリセットを使用していません。設定が4.2Vと固定値しかない為です。。PIC16F1827のブラウンアウトリセットは、2種類の電圧を設定できる(BORV_HIの設定で2.5V、BORV_LOの設定で1.9V)ので、2.5Vのブラウンリセットを設定しています。よって、リセットが安定しているPIC16F1827を使うことをお勧めします。

・発振周波数は8MHzのレゾネータを使用しているので通信は+0.16%のエラーレート(31,250bps除く)に、レゾネータの誤差(一般的に入手できるレゾネータは±0.5%)が加わります。エラーレートを無くしたい場合は7.9872MHzの水晶発振子を使用すれば、エラーレート無し(31,250bps除く)になります。

・PIC16F648A使用時、8MHzの周波数を超えて使用する場合は、PICの3V動作の範囲を超えますので注意が必要です。PIC16F1827の場合は16MHzまで1.8V、32MHzまで3.3Vで使用可能です。

・LCDのE信号について、ソフトウェアでパルス幅を生成しています。発振周波数などを変更する場合は、規定の最低時間である1uSを満足するように修正してください。

・TX入力(RB1)はPORTBグループはRBPUで内部の弱プルアップを設定しても、SPENでシリアルポートイネーブルビットが有効であれば、このポートのプルアップは解除されるため、100kΩ程度でプルアップしています。

・RS232Cレベルでの通信を行う場合は、レベルコンバーター回路(ADM3202ANなど)を設けてください。

・この回路は外付けに発振回路を設けているので、通信ボーレートの誤差を小さくすることが可能です。セラロック(レゾネーター)でも±0.5〜1%の精度を得ることができます。7.9872MHzの水晶発振子を使うことで、エラーレートをゼロにできます。もっと安くコンパクトに作る場合は、エラーレートは±2%になりますが16F1823を使用した回路があります。

ソフトウェア

・スイッチ操作は、プログラムを簡単にするために、押して離したら有効になるようになっています。
・通信はリングバッファを持っていますが、38,400bpsの場合は長い電文が続くと、データの取りこぼしを発生する可能性があります。使用する要件に合うかを確認してから使用してください。なお、バッファフローが起きた場合、バッファに格納されているデータは全て破棄されます。
・BRGの設定覚書(brg=64 when BRGH=0,brg=16 when BRGH=1 Refer to Microchip document DS40044A-PAGE71 Figure "EXAMPLE 12-1:CALCULATING BAND RATE ERROR" )

付録

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

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%
7.9872 19,200 7,987,200 16 25.00000 25 19200 0.00000%
7.9872 31,250 7,987,200 16 14.97440 15 31200 -0.16000%

・ボーレートとクロックの相関計算をするエクセルのシートをダウンロードできるようにしておきました。excel calculation sheet


2025/1/26 SC2004C(20桁4行)をMPLABX 6.20/XC8 3.00、MPLAB SNAP対応。
2024/11/02 MPLABX 6.20/XC8 2.50、MPLAB SNAP対応。
2011/10/12 PIC16F1827用追加
2011/10/1 旧プログラムを削除。一部説明変更。
2011/6/20 16桁2行、24桁2行のバージョンアップ
2011/6/16 ACM0802C-NLW-***(8桁2行)用プログラム追加
2010/12/1 aitendo LCDモジュール用プログラム追加
2009/11/17 PICC Pro 9.70向けに修正
2009/5/10 SC2004CSWBの写真を追加
2009/1/12 lcd.c修正
2008/11/15 一部修正
2008/11/9 サンライクSC2004C(20桁4行)のLCDに対応
2008/11/8 本文追記
2008/11/7 通信バッファタイプの公開
2008/11/6 Hitech PICC Pro lite mode v9.60 PL4build2729以降に対応
2008/1/13 補足説明、付録追加
2008/1/12 zip2.02に差し替え
2007/12/24 制限事項の追加など
2007/12/14 一部修正
2007/12/9 初版作成

(C)2008-2025 air variable All Rights Reserved..


ホーム