Hallo Allerseits, ich hab mein 16x2 HD44780 Display über einen PCF8574 von TI am TWI des atmega8. Das ganze funktioniert soweit eigentlich auch ganz gut. Einziger Schönheitsfehler ist das ich es nicht schaffe das Bussy-Flag auszulesen. (im Moment kompensiere ich das mit Delays). Meine Frage ist nun ob das ein Hardwareproblem ist, oder ob ich da in der SW was falsch mache. ich habe RS an P4, R/W an P5 und E an P7 des PCF8574. Meiner Ansicht nach müsste ich also erst mal 0x20 senden damit R/E H ist, dann 0xA0 senden damit E auch noch nach H gehen. Nun sollten das High-Nibble an den Datenleitungen anliegen. Nun lese ich also vom PCF8574 Daten. Da ist jetzt die Frage was nun mit meinen Steuerleitungen passiert. Meiner Ansicht nach müssten die Leitungen alle H sein da mit Pull-Ups angeschlossen. Somit sollte es da eigentlich kein Problem geben, oder? Danach E auf L ziehen damit das nächste Nibble am Datenbus anliegt und wieder nach H damit die Daten gelesen werden können. Wieder lesen, und gut ist. Nur leider funktioniert das nicht. Kennt einer das Problem oder weiß vielleicht woran das liegen könnte. Danke schon mal, der Jochen
Der I2C ist ja mit 100kBit sehr langsam und Du must ne ganze Menge I2C-Pakete erzeugen für das Signalspiel. Da vermute ich mal, daß das Busy Bit schon längst wieder aus ist, ehe Du es auch nur einmal eingelesen hast. Mit den festen Wartezeiten solltest Du bei einem so langsamen Bus also schneller sein. Peter
Hallo Jochen, Um die ports als eingang zu nutzten solltest Du die pins erst auf high setzten. auszug aus das datenblatt,erste seite: "The I/Os should be high before being used as inputs." Grüße Mark.
Hi jochen, kannst du mal den code bitte posten weil ich mich demnächst auch an so etwas dranmachen will allerdings immoment noch probs mit der ansteuerung des pcf habe .... wäre supper wenn du den code grad hochladen könntest damit ich das dann entsprechned bei mir abändern kann. cu knirps
Wenns schneller gehen soll, dann empfehle ich meine Lösung in der Codesammlung mit dem 74HC164. Man braucht zwar 3 Drähte, aber dafür ist die Ansteuerung wesentlich einfacher und es muß nur je ein Byte geschoben werden. Beim PCF8574 muß man ja je Byte 7 Bytes senden: - Start - I2C-Adresse - 1.Nibble + E = 0 - 1.Nibble + E = 1 - 1.Nibble + E = 0 - 2.Nibble + E = 0 - 2.Nibble + E = 1 - 2.Nibble + E = 0 - Stop Aber beim 74HC164: - komplettes Byte reinschieben (über SPI) während E = 0 - E = 1 setzen (SBI) - E = 0 setzen (CBI) Peter
Hallo Peter, die Lösung wäre ja mit dem PCF genauso möglich, wenn ich noch eine Dritte Leitung (für E) mit dazu nehme. Bin aber so wie es im Moment tut ganz zufrieden. Wäre zwar nett wenn das mit dem Bussy-Flag gehen würde ist aber kein must have. Der Jochen
@Jochen, trotzdem mußt Du dann immer noch mindestens 9 Bit bei lahmen 100kHz senden, also 90µs. Bei nötigen 37µs Wartezeit zwischen den Bytes bist Du bist dann also immer noch um Klassen langsamer als mit 74HC164. Ganz abgesehen davon, daß Du für einen PCF8574 fast 10 Stück 74HC164 kaufen kannst. Mit der Nibble-Methode ohne extra E brauchst Du sogar (7*9+2)*10µs = 650µs, kein Wunder, daß Du da nie ein Busy zu sehen bekommst. Das AVR SPI kann bis zu 4MHz, das sind dann nur 2µs bis in dem 74HC164 das Byte drin ist. Du must also noch zusätzliche 35µs echt warten bis zum nächsten Byte. Bzw. Du wählst gleich einen entsprechend niedrigeren SPI-Takt. Peter
Hallo noch mal, Was die Kosten angeht, da hab ich drei Stück umsonst von TI bekommen ;-). Was die Geschwindigkeit angeht, geb ich Dir natürlich Recht. Das ist für mich allerdings unwichtig da ich ja keine Daten in Hochgeschwindigkeit durch das Display jagen will ;-) Ansonsten werd ich mir die Idee auf jeden Fall im Hinterkopf behalten. Schönen Tag noch, der Jochen
Hi, der AVRco Pascal Compiler macht das mit einem PCA9555. Da wird das Display im 8Bit Modus angesprochen und das Busy Flag wird auch berücksichtigt. Nachteil bei der Lösung ist eigentlich nur das es den PCA9555 nur in SMD gibt, ansonsten funzt das prima. Gruß Markus www.embedit.de PS: Wenn das Display einen KS007x Controller hat kann es Probleme mit dem Timing geben, das stimmt nämlich mit dem eines original HD44780 nicht überein
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.