4

HD44780 LCD スクリーンがあり、Arduino 開発パッケージで提供される LiquidCrystal ライブラリを使用しています。ただし、信頼性は高くありません。私はそれに関するいくつかの問題に気付きました.割り込み駆動ではなく、開発者がチップが操作を実行するのにかかると考える限り、スリープします。

仕様書によると、実行中に BUSY フラグが設定されます。これは、割り込み駆動が可能であることを意味します。

実際にこれを行うライブラリを知っている人はいますか?8ビットすべてを接続する必要がありますか?それとも4ピンのままにしておくことができますか?

4

3 に答える 3

3

このために中断する必要はないと思います。Arduino ディストリビューションのLiquidCrystal.cppを見ると、 LiquidCrystal::write4bitsLiquidCrystal::write8bits、およびLiquidCrystal::pulseEnableコードを変更するだけです。最初の 2 つの方法は、データを書き込む前にビジー ライン (BD7) を監視することから始めます。最後の方法は、100us の一時停止を削除するように変更します。

これがデフォルト コードで行われなかった理由は、これらの LCD の多くのユーザーが R/W をグランドに接続するだけで、ディスプレイが常に書き込みモードになり、BUSY 信号を読み取ることができなくなったためだと思います。ただし、これは _rw_pin を -1 に設定することによってライブラリに渡されるため、パルスおよび書き込みコードは速度の最適化としてビジーを検出する方法として条件付きで r/w ピンを使用できます。

于 2009-12-02T22:36:42.227 に答える
1

3 つのピンで 8 ビットを使用することが可能です。シフトレジスタが必要です。私は mouser.com の HEF4094BP を使用しています (送料は実際のチップよりも高くなります)

シフト レジスタの配線図とコードの変更はこちら: http://www.arduino.cc/playground/Code/LCD3wires

于 2010-08-17T16:10:32.150 に答える
0

しばらく前に、LiquidCrystal ライブラリを変更して、ビジー フラグをサポートしました。実際の割り込み駆動操作は不可能であることに注意してください。読み取りごとに、 Enable ラインを 2 回トグルする必要があります。したがって、ビジー フラグをポーリングする必要があります。

次に、いくつかのベンチマークを実行して、ビジー フラグのポーリングは、ほとんどのコマンドを待機するよりも遅いことがわかりました。(例外は、'clear' および 'home' コマンドです)。その理由は、読み取りモードと書き込みモードを切り替えるには、 への 8 回の追加呼び出しと へdigitaWriteの 8 回の追加呼び出しのような追加の手順が必要だからpinModeです。16MHz の Arduino を使用しても、100µs 待つよりも遅くなります。

その後、ピン レジスタを直接かつ一括モードで操作するライブラリを作成しました。1 回のレジスタ アクセスで 8 つのピンすべてにアクセスできます。その後、私は球場にいて、投票によって利益を得ました。

于 2011-09-14T22:05:16.990 に答える