steh aktuell vor einem kleinen Problem aber vielleicht geht das auch gar nicht so wie ich mir denke.
Ausgangslage.
Kleiner Arduino Sketch der via der Seriellen Konsole ein String ausgibt.
Dieser String wird mittels eines LogicAnalyzer abgegriffen RX-Pin Board und dann mit dem
UART Analyzer im Klartext angezeigt (ASCII).
Dieses würde ich jetzt gern mit einem 16x2 (1602) Display welches zu Hauf in etlichen Arduinoprojekten Anwendung auch probieren.
Das Display wird mittels eines I2C Expanders (Serielle to i2c) angesteuert.
Ein Sketch soll dann ein String ans Display geben und der LogicAnalyzer geht an die Clock-und Datenleitung...
Soweit so gut , passt alles ..Display gibt mir mein String aus und der Analyzer empfängt die Daten.
Aber ich kann aus den Binärdaten kein ASCII machen bzw. sehe ich im Klartext nicht mein String den ich ans Display sende. Auch mit dem im Datenblatt enthaltenden Character Codes bzw, Pattern lassen sich die Binärdaten in den String wie er im Display steht übersetzen ..
Aber mal die kurze Frage ...geht das überhaupt was ich vor habe?
Also , das mit der Seriellen konsole funktioniert ja so wie gedacht...
Den String was ich mir an die Konsole sende kann ich 1zu1 im LogicAnalyzer auslesen.
Ist das nicht eine Fage an deinen LogicAnalyzer, ob er den Inhalt von I2C Nachrichten darstellen kann?
Und bitte schön als Text?
Da UART-seriell hauptsächlich für Text verwendet wird und einfacher ist, ist die Chance größer, dass es geht.
Wenn du generell I2C Daten auf dem LA siehst, schau doch erst mal, was genau deine Display-Lib an Wire.h übergibt. Vielleicht entdeckst du da Ergebnisse des LA.
Das Protokoll der I2C Schnittstelle hat einiges an Adressdaten und auch Steuersignale bzw Anfragen von Daten vom Slave und Antworten des Slaves an den Master.
Es wird die Adresse (7Bit + Lese/Schreibebit) vom Master ausgegeben und dann vom Slave durch 1 Bit bestätigt. Auch kann der Slave den Master anhalten. All diese Signale mußt Du bei der Interpretierung der einzelnen Bits auf dem Bus berücksichtigen.
Nur die SDA Leitung aufzunehmen genügt meiner Meinung nicht. Du mußt auch die SCK leitung mit aufnehemn und die beiden in Relation setzen.
Informiere Dich mal zuerst über die genaue Funktionsweise und Protokoll des I2C Busses.
zB I2C – RN-Wissen.de
Dann ist noch zu sagen daß beim I2C Interfaces eines HD44780 Display Moduls zwischen I2C Interface und Modul wieder ein Bus Interfece ist, der 4 Bit breit ist und selbst ein bestimmtes Protokoll hat. https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
Die 8 Bit die der I2C Überträgt sind keine Ashii Zeichen der darzustellenen Zeichen, sondern 4Bit Daten und die dazugehörigen Steuersignale (E, RS und möglicherweise R/W, die sich während eines "Taktzyklus" des LCD Busses ändern da die 4 Bit Daten bei einem Statuswechsel des E Signals abgespeichert werden. 8Bit werden also in 4 Schreibanweisungen des I2C Expanders gemacht.
Dann sieh Dir mal genu die Bibliothek an. Wie die Daten versendet werden.
Zusammenfassend:
I2C Protokol lernen (wie Daten verschickt/Empfangen werden und welche elektrischen Signale das sind).
Funktion des verwendeten I2Cexpander verstehen. Die Daten der I2C Schnittstelle speichern im Expander Daten nach dem Protokoll des Expanders. (zb in verschiedenen Registern).
Bus des HD44780 LDC Controller auf dem Displaymodul verstehen.
Funktionsweise des HC44780 verstehen (Welche Register was machen, Daten und Steuerdaten, Selbstdefinierte Zeichen usw.)
Dann kannst Du aus (meinen sehr überschlagsmäßigen Schätzungen) aus 200 Byte I2C Daten 10 angezeigte Zeichen herausholen.
PulseView funktioniert mit dieser Sorte Logic Analyser
um I²C zu decodieren muss man die SDA und die SCL-Leitung an den logic analyser anschließen
Tja und weil ja der I2C zu 8-bit-parallel IO-Chip dem HC44780 die entsprechenden Bitmuster reinschiebt die der HC44780 baucht um daraus dann Buchstaben auf dem Display zu machen müsste man jetzt über das I2C-Protokoll einen HC44780-decoder drüber stapeln um dann wirklich an die dargestellten Buchstaben dran zu kommen.
Bei der I2C-Ansteuerung ist das Anzeigen lassen eines Buchstabens z.B. "A" nicht einfach das senden des ASCII-code für "A" sondern eine größere Bytefolge
µC "Hallo PCF8547 wie geht es dir?
PCF8547 antwortet "Mir geht es gut!"
µC "Achtung ich möchte daten in dein Datenregister schreiben" dein Datenregister schreiben
PCF "ACK"
µC die Daten sind ....
PCF "ACK"
usw. usw.
Das ist das eigentliche Problem.
Deshalb sieht man da auch nach dem decodieren des I2C-buses keine ASCI-Zeichen
Jetzt müsstest du mal genauer beschreiben was deine Anwendung ist.
Muss das unbedingt über I2C-sniffen sein?
Kannst du die Daten die per I2C an das I2C-Display gehen parallel auf eine serielle Schnittstelle senden?
Sollen die aufgezeichneten Daten in einen anderen Raum übertragen werden?
Sollen die Daten aufgezeichnet werden und zu einem späteren Zeitpunkt angeschaut werden?
Dazu hätte ich folgende Ideen:
schlicht und ergreifend eine Videokamera aufnehmen lassen was das Display anzeigt
Mit OpenCV das Bild des Displays aufnehmen und OCR machen lassen.
Das hört sich aufwendig an dürfte aber totzdem einfacher sein als das BitBanging auf dem I2C-Bus zu decodieren.
Noch eine Möglichkeit wäre das ganze BitBanging auf dem I2C-Bus aufzuzeichnen um es dann später wieder abzuspielen und auf einem I2C-Display anzeigen lassen. Das braucht aber ordentlich Speicherplatz. Dazu muss man das wahrscheinlich auf einer SD-Karte speichern
Denn eine Serielle Ausgabe auf ein LCD ausgeben - das gibts es sogar in den Beispielen der LCD Library. Und wenn man Zugriff auf den "kleinen Arduino Sketch" hat - dann könnte man ja statt der seriellen Ausgabe auch gleich eine Ausgabe auf das LCD vornehmen.
Also erkläre bitte noch mal genau was du da vor hast.
erstmal Danke an alle ..
und ja ich benutze Sikrog und habe natürlich auch die Clockleitung am LogicAnalyzer..
Den Analyzer vom I2c ist natürlich auch drauf geschaltet.
Aber weiß ja jetzt durch euch das es nicht so einfach wie bei der UART geht ..
Danke an uwefed...
den passenden Abschnitt wo der String überdtragen wird habe ich auch schon lokalisiert.
Auch ein gewisses grundverständnis vom I2c habe ich bzw. wie dort eine Komunikation zwischen Master und Slave statfindet weiß ich..
Aber der Umstand was Uwefed geschrieben hat war mir nicht so klar
"der 4 Bit breit ist und selbst ein bestimmtes Protokoll hat"
Auch die funktion des PCF8574 muss ich mir doch mal anschauen...und auch die Biblothek vom i2c und wire..
Also habt dank und ich hab jetzt wohl noch jedemenge zu lernen (-;
jetzt steckt jetzt kein bestimmtes projekt dahinter sondern einfach nur
etwas verstehen wollen.
mit Uart und dem Logicanalyzer hab ich angefangen
Und habe mich als nächstes mit dem i2c protokoll beschäftigt ..(Aufbau/funktion/etc..)
und wollte halt dort auch probieren die daten wenn du so willst zu sniffen um sie mir im Klartext (sofern es ja nur ein Text auf ein display senden geht) auch im Logicanalyzer anschauen ...
aber geht ja jetzt nicht so einfach..
Vieleicht solltest Du zu Deiner Übung ein anderes I2C Gerät verwenden zB eine RTC.
Da hast Du im Gegensatz zum HD44780 LED Modul nicht ein Interface das ein anderes Interface ansteuert das dann auch noch Daten und Steuersignale mischt.