公開しているプログラムの中で不具合があった場合、その適用範囲が広い場合はこちらで訂正致します。
2009/2/16
lcd.cを使用しているプロジェクトについて不具合がある事を確認いたしました。
ローコストLCDシリアル通信モニター
超ローコストRS232Cモニター
LCDによってまれに初期設定が失敗し、一行モードになってしまう事がある。
LCDの初期動作を行うlcd_init()の部分のセットアップ時間が十分に取れていない部分があると推測。
__delay_us(40);//←この部分の時間を調整
lcd_write(0x28);// 4 bit mode, 1/16 duty, 5x8 font
4ビットモード設定後の時間の__delay_us(40);を__delay_us(100);にして対処。
以下に訂正ソースコードを掲載します。お手数ですが、lcd.cの該当部分を修正してビルドしてお使いください。(一部のプログラムでは多少違う場合があります。)
修正プログラム(一部)
なお、2009/1/12以降に公開されている部分は、修正済みのlcd.cでビルドを行っています。
この問題はSD1602HUOBのモジュールで顕著に現れました。新日本無線のLCDの資料と、サンライク社、旧日立のHD44780でイニシャルの規定が異なっていました。この100usウエイトを規定しているのは新日本無線の資料のみで、他の資料は実行時間の37usの規定のみです。waitが入っている分には問題がないと思いますので、今回は新日本無線の資料に習いwaitを100usとして対処しております。
※引用元 新日本無線NJU6420Bデーターシートより
40usにしていた理由は、データシートの設定時間が37usでありましたのでそのようにしていました。
修正プログラム(一部)の所で、4ビットモードにする手前で5msとっている部分がありますが、ここは100us以上あればよく十分長いため、そのままにしています。
(C)2009 air variable All Rights Reserved..