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型番 | 電源※ |
---|---|---|
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コネクターを二つ搭載し、トグルスイッチで切り替えています。 |
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データ |
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..