Moin zusammen.
Ich versuche seit Wochen ein ACK zu erreichen, weiß gerade nur nicht, ob
ich da einem Denkfehler auf dem leim gegangen bin wie bei der Auswahl
des Übertragungsmodus...
Dies habe ich nunmehr erfolgreich zum laufen bekommen...
Daten welche auf dem Display erscheinen sollen, werden auch sauber
dargestellt.
Nur sowie ich einen das ACK haben will, bekomme ich alles nur kein ACK
bzw NAK.
der Code schaut wie folgt aus...
Echt keinen plan, warum ich bei ReadSender kein ACK/NAK bekomme sonder
irgendwelchen Datenmüll.
Hat jemand von euch eine Idee?
Zusatzinfo: Programme schreibe ich alle mit Code:Blocks und arbeite auf
den GNUBLIN Systemboards.
Ich kenn Deine I2C-Lib ja nicht, aber üblicher Weise braucht man auch
die Funktionen Start, sende Adresse+R/W und Stop.
Versuch doch erstmal, einen standard I2C-Slave im Page-Mode zuzugreifen,
z.B EEPROM 24C64.
Es sieht auch nicht sonderlich übersichtlich aus, wenn man Funktions-
und Debug-Code miteinander verwurstet. Ich würde dafür wenigstens
separate Zeilen nehmen.
Besser wäre natürlich, daß man nur bei falschen Ergebnissen in einen
Fehlerabbruch geht, der dann den Fehler ausgibt. Es ist ja in der Regel
sinnlos, bei einem Fehler mit dem nächsten Schritt weiter zu machen.
Und bei einem I2C-Fehler muß man ja wenigstens noch ein Stop senden, um
den Bus wieder in den Ruhezustand zu bringen.
P.S.:
IMHO muß man auch die Paketlänge und die korrekte CRC senden, sonst
kommt natürlich kein ACK.
Peter Dannegger schrieb:> Ich kenn Deine I2C-Lib ja nicht, aber üblicher Weise braucht man auch> die Funktionen Start, sende Adresse+R/W und Stop.
wird alles durch die API
http://gnublin.org/gnublin-api/doc/html_de/classgnublin__i2c.html
gesteuert...
> Versuch doch erstmal, einen standard I2C-Slave im Page-Mode zuzugreifen,> z.B EEPROM 24C64.
Ähmmm da seh ich aber keine Daten soweit ich das im Filter habe...
> Es sieht auch nicht sonderlich übersichtlich aus, wenn man Funktions-> und Debug-Code miteinander verwurstet. Ich würde dafür wenigstens> separate Zeilen nehmen.
Jedesmal rein und raus ebenso bescheiden. die von dir erwähnten
Debugzeilen fliegen sowieso, wenn ich ein ACK bzw NAK sehe...
> Besser wäre natürlich, daß man nur bei falschen Ergebnissen in einen> Fehlerabbruch geht, der dann den Fehler ausgibt. Es ist ja in der Regel> sinnlos, bei einem Fehler mit dem nächsten Schritt weiter zu machen.> Und bei einem I2C-Fehler muß man ja wenigstens noch ein Stop senden, um> den Bus wieder in den Ruhezustand zu bringen.
Fehlerabbruche habe ich Bisher keine gehabt. sonst läuft das Programm ja
wie es soll... erhalte im ACSII-Modus nur kein ACK / NAK. Egal, ob ich
bcc mit sende oder nicht. Im beschriebenen BINÄR-Modus arbeitet das
System nicht.
> P.S.:> IMHO muß man auch die Paketlänge und die korrekte CRC senden, sonst> kommt natürlich kein ACK.
Soviel zum Thema Paketlänge...
Maik LoveNigth schrieb:> wird alles durch die API> http://gnublin.org/gnublin-api/doc/html_de/classgnublin__i2c.html> gesteuert...
Na wenn Du das sagst.
Ich würds trotzdem erstmal mit einem EEPROM testen.
Maik LoveNigth schrieb:>> Versuch doch erstmal, einen standard I2C-Slave im Page-Mode zuzugreifen,>> z.B EEPROM 24C64.>> Ähmmm da seh ich aber keine Daten soweit ich das im Filter habe...
Du schreibst was rein "Hallo Welt" und dann liest Du es aus.
Maik LoveNigth schrieb:> Soviel zum Thema Paketlänge... I2C.send(lang);
Genau das meinte ich mit verwursten. In den riesen Debugausgaben
übersieht man leicht die Funktion.
Und was machst Du, wenn die Daten 0-Bytes enthalten?
Und wo wird die CRC gesendet?
Peter Dannegger schrieb:> Maik LoveNigth schrieb:>> wird alles durch die API>> http://gnublin.org/gnublin-api/doc/html_de/classgnublin__i2c.html>> gesteuert...>> Na wenn Du das sagst.> Ich würds trotzdem erstmal mit einem EEPROM testen.>> Maik LoveNigth schrieb:>>> Versuch doch erstmal, einen standard I2C-Slave im Page-Mode zuzugreifen,>>> z.B EEPROM 24C64.
Schauen, ob ich noch einen alten finde... Mach mir da a keine Hoffnung.
Bestellen??? Hmmm. Mindesbestellwert?!
> Maik LoveNigth schrieb:>> Soviel zum Thema Paketlänge... I2C.send(lang);>> Genau das meinte ich mit verwursten. In den riesen Debugausgaben> übersieht man leicht die Funktion.
Da geb ich dir recht... Aber wer schreibt darf sowas nicht übersehen,
und wenn doch muß er halt Trafic in kauf nehmen.
Bei so kleinen sachen geht das ja noch aber wenn es ü 2K zeilen Code
sind... Aber wir verstehen uns.
> Und was machst Du, wenn die Daten 0-Bytes enthalten?
[c]if (Data != '')
{
Anweisung
}
Darüber mach ich mir gedanken, wenn es soweit kommen sollte.
> Und wo wird die CRC gesendet?
Wenn du mit CRC das im Datesheet beschriebene bbc meinst...
Spielt keine Rolle, ob ich das im ACSII-Modus mitschicke oder nicht...
ACK Ist und bleibt <> 0x06 und NAK <> 0x15
und das ist das KERNPROBLEM...
Habe hier Sehr viele Themen gefunden, was dieses TFT-Display angeht, NUR
Nicht die Bohne, wie das mit dem ACK gelöst wurde...
Wie gesagt... Selbst wenn ich es mir eine 24cxx teste wird das ergebnis
das selbe sein... Das weiß ich jetzt schon...
Edit: Ob ich das nun via RS, I²C oder SPI mache spielt keine Rolle...
das Problem ist und bleibt das selbe...
Ich kann Dir ja mal meinen funktionierenden Code zeigen.
Er läuft auf dem ATmega2560 über die UART3.
Ich hab die UART genommen, weil man da nicht irgendwelche Wartezeiten
einbauen muß.
Bei I2C oder SPI muß man das nämlich.
Hmmm...
Ich hab so einen Leisen verdacht, als ob ich das Problem erahne...
Da ich ja mit "enDebian" also Systemboard arbeite werd ich wohl ein
Problem mit dem Timings bekommen...
setzt mich heut Abend nochmal ran...