Arduino: I2C nach 4-Wire SPI

  • Hallo,


    ich habe mit diesen Protokollen keine Erfahrung.


    1.
    Ich habe einige Module, die einen I2C Bus Interface haben. Ich wollte die Darstellung auf einem Display machen, das nur ein 4- SPI Interface hat und bei der der Hersteller Arduino Code bereit stellt.


    Geht das?
    Gibt es Bibliotheken die das Protokoll umwandeln und benötige ich noch Hardware oder soll ich lieber auf ein Display mit I2C Interface warten.


    2. Es gibt ein Display mit raus geführtem I2C Bus, aber vom Hersteller keine Unterstützung für den Arduino. Gleiche Frage: Ist das machbar ohne eine Eigenentwicklung?


    73 de Hajo

  • Hallo hajo,
    Die daten vom i2c modul lesen, d.h. eine komplette kommunikation zum modul aufbauen uns dann Sie gewuenschten daten byteweise ueber die spi schnittstelle rueberschieben.
    addi

  • Hätt ich auch gesagt. Hajo, Du willst ja sicher nicht die Daten so wie sie vom Modul kommen 1:1 ans Display geben, oder? Die müssen doch sicher aufbereitet werden. Um welche Hardware genau geht es denn?


    73

  • Hallo HaJo,
    beachte bitte ob die Module 5V vertragen, ich gehe von einem Arduino im Dip -Gehäuse aus, die laufen mit 5V.
    Falls deine devices nur mit 3,3V laufen, müsste du sog. Logical Level shifter einsetzen.
    Entweder Selbstbau oder Kauf.


    Das SPI-Display davon müsstest du den Controller in Erfahrung bringen.


    ansonsten könnte man die ersten Gehversuche (I2C bzw. SPI) mit einem Raspi machen.


    73 de Addi

  • Hallo,


    danke fuer die Antworten. Da es von groesserem Interesse sein koennte die lange Version:


    Ich hatte irgendwann mich entschlossen die Basteleien mit Drahtverhau aufzugeben und nur noch Wohnzimmertaugliches zu machen.


    So bekam ich den Hinweis von einem befreundeten OM, dass es ein 7" Display gibt mit 4 Loechern zur Befestigung:
    http://www.buydisplay.com/defa…1963-controller-board-mcu
    Auf dieses Board kann man direkt eine Adapterplatine aufsetzen:
    http://www.buydisplay.com/defa…-compatible-with-mega-due
    auf das wiederum direkt ein Arduino Due passt.


    Der Arduino Due war mir recht, da er schneller und ueber mehr Speicherplatz verfuegt.
    Die drei EInheiten passen wirklich gut zusammen und die Beispielbibliotheken und UTFT konnten nach etwas Fummelei benutzt werden und funktionieren. In UTFT sind viele graphische Routinen vorhanden. Die Textdisplayausgabe ist etwas rudimentaer, aber das laesst sich leicht ausbauen.


    Wie immer gibt es einen Haken:


    Analog IN 0-11+ DAC0/1 CANRX/TX und Digital 7-0 COM 14-19 sind frei und habe ich mit Tricks rausgeführt. Aber die festverdrahteten I2C sind beide belegt. Ich habe da einen Draht drangelötet, aber es funktionierte nicht.
    So habe ich an die Firma geschrieben und die hat mit geantwortet, das ich ein anderes Display nehmen sollte:
    http://www.buydisplay.com/defa…reen-panel-i2c-spi-serial
    fuer das in den naechsten Tagen eine Adapterplarine bereitgestellt wird ... allerdings nur mit SOftwareunterstuetzung 4-Wire SPI s.o.


    Zur Uebungen wollte ich Sensoren einsetzen und die Werte auf dem Display anzeigen ...


    73 de Hajo

  • hajo,
    es gibt sogenannte i2c hubs, die koennte man einsetzen. andererseits, i2c kann mehr als nur ein device ansprechen, wenn es keinen adressenkonflikt gibt.
    73 de addi

  • Hallo Hajo


    Du brauchst kein neues Display. Der Shield wird vom Due mit SPI angesprochen, vom Shield geht es per SPI auf das Display dort ist der
    SSD1963 Grafikkontroller, der steuert das Display parallel an.


    UTFT myGLCD(SSD1963_800,38,39,40,41); = PIN 38,39,40,41 vom DUE,
    warum nicht das Hardware SPI verwendet wird muss ich noch heraus finden... :thumbup:


    Das auf dem Shield beide i2C belegt sind ist ein "Fehler" (der Shield kann für den MEGA und Due verwendet werden), benötigt wir nur der erste i2C Bus (SDA Pin20, SCL Pin21) der zweite steht zur freien Verfügung (PIN SDA1, SCL1), neben dem AREF PIN. Achtung für den zweiten i2C braucht es noch Pullup Widerstände.
    Ich habe einfach die Stifte auf dem Shield ausgelötet.



    Nachtrag:

    Für den CTP (cap. Touch Controller) brauchst du den i2C.


    #define FT5206_WAKE 11 // Touch Controller wake PIN 11 vom DUE
    #define FT5206_INT 48 // Touch Controller interupt PIN 48 vom DUE
    uint8_t FT5206_addr = 0x38; //CTP I2C ADDRESS


    pinMode(8, OUTPUT); //backlight PIN 8 vom DUE
    digitalWrite(8, HIGH); //on
    // -------------------------------------------------------------
    pinMode (FT5206_WAKE, INPUT);
    digitalWrite(FT5206_WAKE, HIGH );


    Die Routinen vom FT5206 kann ich dir senden, die kannst du einfach in deinem Sketch einbinden.
    Der Font Controller und den SD-Karte Controller musst du wieder per SPI ansprechen, die haben aber eigene Librarys und separate PIN's.


    73 de Thomas

    73 de Thomas
    HB9RML

  • Hallo Thomas,


    bist halt ein Koenner. Ich dilletiere noch. Habe ich wieder etwas zu tun.


    Danke.
    73 de Hajo

  • Hallo,
    hier meine leider ausschweifenden Erfahrungen mit I2C-Pegelwandlern. Ich hatte das Problem mit einem Arduino Nano einen 3.3V-Baustein ansteuern zu müssen. Dabei habe ich verschiedenste Peglwandler und Hubs ausprobiert. Typische Gründe: Richtung der Level-Umsetzung entsprach nicht Richtung von Master / Slave-Betrieb. Spannungspegel auf der 3,3V-Seite entsprach zwar dem I2C-Standard, aber um ein paar mV nicht der Baustein-Pegelschwelle usw. usw.


    Irgendwann hatte ich keine Lust mehr und habe eine einfache Schaltung, die verblüffend häufig bei anderen Projekten auftauchte, ausprobiert. Und siehe da, das war die beste Lösung. Bidirektionaler Betrieb, egal wo der Master sitzt, Spannungspegel unkritisch, alles läuft. Kann ich nur empfehlen.


    73,


    Axel, DK4AQ

  • Hallo Hajo
    noch der vollständigkeitshalber...
    im Sketch werden die beiden i2C so verwendet


    wire.write(); i2C SDA,SCL, PIN 20/21
    wire1.write(); i2C SDA1,SCL1, PIN SDA,SCL

    73 de Thomas
    HB9RML

  • Hallo Uwe,


    Du kennst meine Wissensluecken aber sehr genau.


    Zur selbigen Frage hatte ich gestern im Geheimen einen anderen OM gefragt, da ich mich nicht blamieren wollte.


    Problem geloest ... auf zur naechsten Baustelle.


    73 de Hajo

  • Hallo,


    damit ich die Baustelle schliessen kann und auch fuer diejenigen, die mit dem Arduino Due arbeiten wollen:


    Wie Thomas HB9RML schon berichtete hat der Due zwei getrennte I2C-Busse. Bei meiner Loesung ist tatsaechlich der zweite Bus SDA1/SCL1 von dem Shield nicht benutzt worden und ich habe die Stifte ausgeloetet und direkt mit dem Due verbunden. Der erste Bus SDA/SCL hat interne Pull-Up Widerstaende. Mein "Problem" war, dass ich fuer den zweiten Bus entsprechende Widerstaende einbaute und keine Devices fand ... es funktionierte nichts. Auf dem Breakoutboard waren schon entsprechende Widerstaende eingebaut.


    Gefunden habe ich den Fehler mit der frei verfuegbaren Software I2C-Scanner.


    Um den zweiten Bus ansprechen zu koennen muessen folgende Statements deklariert werden:


    #include <Wire.h>
    extern TwoWire Wire1;


    Entsprechend wir die Wire Bibliothek aufgerufen:
    Wire1.begin(); usw.


    Dann geht es.


    Hat nur den Samstag gedauert ....


    73 de Hajo

  • Hallo Hajo
    Ja manchmal ist ein Logik Analyser nötig. Ich habe den Samstag auch "verbraten".
    Wollte unbedingt auf meinem ITX Board ein Ubuntu mit Quisk oder Gnuradio und einer externen Soundkarte als Panadapter auf meinem 7 Zoll Display zum laufen bringen. :cursing:


    Jetzt ist Windows drauf und es läuft. :D
    Mein Eindruck hat sich für mich wieder bestätigt. Linux ist ein Anwender feindliches Desktop OS. ;(


    I2C. Ah ich dachte die Statements kennst du schon, sonst hätte ich sie oben schon erwähnt.


    Hast du das mit den spartanischen Schriften schon gelöst ?
    Ich habe ein Fontchip auf dem Display den ich über SPI ansprechen könnte.
    Habe aber den Sinn des Chips noch nicht ganz verstanden.
    Wenn ich richtig liege kann ich die Zeichen per SPI-1 vom Chip lesen und per SPI-2 dem Display schicken.
    Ob das Sinn macht und ich das so will......

    73 de Thomas
    HB9RML

  • Hallo Thomas,


    Fonts: Da bin ich gestern vorerst gegen die Wand gelaufen und dort stehen geblieben ...


    In einem Beispiel hatte ich gesehen, dass es bei utft BigFonts gibt. Mehr heute Abend.


    I2c ist Software aber wenn ich da weiter mache, muss ich mir doch noch eine Hardwareloesung kaufen: Man steht sonst im Wald und sieht ...


    Und von GNU Radio habe ich immer noch die Schnauze voll ... Das ist schlimmer als Linux ohne Dokumentation.


    73 de Hajo

  • Hallo Hajo


    Das hatte ich am Anfang bei der Solf Erweiterung auch. Ich habe mir ein breakout Borad für Spannung und Strom eingebaut.
    Dann meinen eigenen Code erzeugt um das Board via i2C abzufragen. Leider kamen da nur unsinnige Werte retour.
    Da brauchte ich ein Logik Analyser und zu sehen ob mein Code auch "ankommt".


    So war ich dann sicher dass mein Code 100% richtig war, obwohl die Messungen des Boards immer noch unsinnig waren.
    Nach 2Tagen suchen habe ich dann den Fehler gefunden. Ich habe das Board anstelle der Drossel eingesetzt und die Drossel dann parallel zum Shunt (Mess) Widerstand eingelötet , damit war das Messresultat natürlich Schrott.....

    73 de Thomas
    HB9RML

  • Thomas,


    das hat man davon, wenn man einen GNU Solf++ baut :thumbup: Ist wie Linux!


    Em3301 Es müsste ein grösser Fontsatz 15x16 verfügbar sein. Der Rest ist nur ein eingeschränkter Auszug aus Unicode ... Aber wer will schon Aramäisch schreiben.


    73 de Hajo