質問

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

スペックシートから、BUSYフラグは実行中に設定されます。つまり、割り込み駆動が可能です。

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

役に立ちましたか?

解決

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

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

他のヒント

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

シフトレジスタの配線図とコードの変更は次のとおりです。 http:// www。 arduino.cc/playground/Code/LCD3wires

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

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

その後、ピンレジスタを直接操作し、バルクモードで操作するライブラリを作成しました。8つのピンすべてが1つのレジスタにアクセスできます。その後、私は世論調査に参加して、ポーリングによる利益を得ました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top