Frage

Ich habe einen HD44780-LCD-Bildschirm, und ich habe die Liquid Bibliothek mit dem Arduino-Entwicklungspaket zur Verfügung gestellt werden. Allerdings ist es nicht zuverlässig. Ich habe bemerkt, einige Probleme mit ihm, und stattdessen Interrupt getrieben zu sein, es schläft nur so lange, wie der Entwickler des Chip denkt sollte den Vorgang auszuführen nehmen.

Aus den Datenblättern wird die BUSY-Flag gesetzt werden, während es ausgeführt wird, das heißt, es möglich ist, unterbrechungsgesteuert werden.

Kennt jemand eine Bibliothek, die dies tatsächlich der Fall ist, und es alle 8 Bits erfordert verbunden werden können oder ich behalte es bei 4 Pins?

War es hilfreich?

Lösung

Ich glaube nicht, dass Sie einen Interrupt für diese benötigen. Mit Blick auf LiquidCrystal.cpp in der Arduino Verteilung, brauchen Sie nur den LiquidCrystal::write4bits, LiquidCrystal::write8bits zu ändern, und LiquidCrystal::pulseEnable Code. Die ersten beiden Methoden durch die Überwachung der besetzten Leitung (BD7), bevor das Schreiben von Daten, und der letzte würde modifiziert, um die 100us Pause zu entfernen.

beginnen soll

Ich denke, der Grund, warum dies nicht in dem Standard-Code getan wurde, ist, dass viele Nutzer dieser LCDs nur R / W binden, so dass die Anzeige auf Masse immer im Schreibmodus ist, was es unmöglich machte das BUSY-Signal zu lesen. Dies ist jedoch in die Bibliothek übergeben wird, indem _rw_pin auf -1, so dass der Puls und Code schreiben kann, bedingt den r / w Stift als eine Möglichkeit der Erfassung beschäftigt als Geschwindigkeitsoptimierung nutzen.

Andere Tipps

Es ist möglich, 8-Bit auf drei Stifte zu verwenden; Sie brauchen nur ein Schieberegister. Ich bin mit einem HEF4094BP von mouser.com (Versand mehr kosten wird als der eigentliche Chip)

der Schaltplan und Code-Änderungen für das Schieberegister sind hier: http: // www. arduino.cc/playground/Code/LCD3wires

Vor einiger Zeit geändert ich die Liquid lib den Besetzt-Flag zu unterstützen. Bitte beachten Sie, dass echte Interrupt-gesteuerten Betrieb nicht möglich - für jede Sie die Enable Zeile zweimal wechseln lesen müssen. Daher müssen Sie den Besetzt-Flag abzufragen.

Dann habe ich einige Benchmarks fand ein, dass die Abfrage des Busy-Flag ist langsamer als nur für die meisten Befehle warten. (Die Ausnahme sind die ‚klar‘ und ‚Heimat‘ Befehle). Der Grund dafür war, dass wie 8 aditional Schritte erfordert zusätzliche Anrufe zwischen Lesemodus und Schreibmodus Umschalten auf digitaWrite und 8 weitere Anrufe pinMode. Auch bei 16MHz Arduinos diese langsamer als die nur darauf warten 100 us.

Danach schrieb ich eine Bibliothek, die die Pin-Register direkt und in Bulk-Modus manipuliert - alle 8 Pins mit einem Registerzugriff. Danach war ich im Baseballstadion einen Nutzen durch die Abfrage zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top