SPI für Segmentanzeige mit Raspberry Pi auslesen

  • Hallo,

    ich bin relativ neu auf dem Gebiet und stehe nun an. Grundsätzlich möchte ich die Ziffern einer 4 Digit 7 Segmentanzeige, die von einem MC (ATMEL MEGA8L) angesteuert wird, auf einen Raspberry mit Python einlesen. Der MC verwendet - soweit ich das verstanden habe - SPI zum Ansteuern des Displays. Gibt es eine simple Möglichkeit, ohne LogicAnalyzer etc., das SPI Signal mit dem Raspberry mitzuschneiden und in ein valides xxxx Format mit den vier Ziffern zu bekommen? :conf: Wäre über Tipps sehr dankbar.

    Theesymon

  • Danke für eure Antworten!

    Ich muss mich korrigieren: kein direktes ansteuern des Displays mit SPI! Grundsätzlich geht es um einen Baustein im Modelleisenbahnbereich (LRC120 von Lenz), der verwendet wird, um die Kennung eines Zuges auszulesen. Das Display, dass auch dem LRC120 montiert ist, wird zumindest nicht direkt mit SPI angesprochen. Im Anhand sende ich euch das Datenblatt. ('C2623JD.pdf') Wie das Display selber funktioniert, ist für mich klar. Ich habe schon über einen Code und Zwischenwiderständen versucht, direkt die Ports des Displays auszulesen, woran ich leider gescheitert bin. Nachdem ich jetzt aber herausgefunden habe, dass der MC auf dem LRC120 die vollen Anschlüsse hat(MISO, MOSI, CLK, RST, AVCC, GND - siehe Anhang 'pins-atmega8.jpg' Modell MLF), dacht ich mir, dass das Signal aus dem SPI bus auch die Informationen enthält, die ich brauche, egal ob das ein IN- oder OUTPUT ist. Leider finde ich zu dem LRC120 (siehe Anhang 'LRC120.pdf') keine Schaltpläne. Ich habe es allerdings hier und weiß, der MC ein ATmega8L ist. Habe ich das jetzt halbwegs verständlich erklärt?

    Theesymon

  • Moinsen,

    Diese Displays werden über einen Matrix Code gesteuert. Das übernimmt bei den fertigen Displays dieser TM1637 Chip und wird hier von dem Mega8 übernommen.

    Wenn du schon einiges herausgefunden hast wäre es nicht schlecht alle Pins dieses Displays


    Nachzuverfolgen, wie diese mit dem Mega verbunden sind, ggf hängt auch noch eine Transistor oder paar Vorwiderstände dazwischen.
    Irgendwie mit Ausnahme der No PIn und No Connect müssen diese

    auch direkt oder indirekt beim Mega ankommen.
    Das Problem ist das die Ansteuerung über verschiedene An- und Auszeiten aus den oberen 5 Pins und den unteren 8 Pins erfolgt.
    Diese insgesamt 5+8 Pins synchron abzugreifen ist mit rein dem PI völlig illusorisch.
    Schau mal was du bei zB Reichelt aktuell noch an µDSP (Digitale Signal Prozessoren) bekommst, die über ausreichend Eingänge auch ADC verfügen und zudem noch frei Pins für eine Bus-Protokoll haben (I²C, SPI )

    Welche der LEDs in den Segmenten gerade leuchtet ergibt sich aus den Pins die gerade einen Stromkreis bilden. Plus an der 1 und geschaltenes GND an 2 ergäbe erstes Anzeige Element - Element C würde jetzt leuchten. Nur erfolgt der Wechsel so schnell, das sich unsere Augen behumbsen lassen und das als Dauer an wahrnehmen.

    Franky

    Franky

  • Ob das auf elektronischem Weg per Software auszulesen ist kann ich nicht sagen. Ich hätte da nur eine andere, vielleicht umständliche (dämliche) Idee, die in eine völlig andere Richtung geht.

    Falls Du zufällig eine RaspiCam hast, dann ein Foto der Anzeige machen und mit dem Python-Modul pytesseract den Text in diesem Bild auslesen. Ob der Text der Anzeige auf dem Foto in dem Fall für pytesseract lesbar ist, kann ich allerdings nicht sagen. Bei meinen Tests letztes Jahr hatte das nicht bei allen von mir verwendeten Bildern funktioniert.

  • Moinsen

    Ob das auf elektronischem Weg per Software auszulesen ist kann ich nicht sagen. Ich hätte da nur eine andere, vielleicht umständliche (dämliche) Idee, die in eine völlig andere Richtung geht.

    die Idee ist wirklich eine Alternative :thumbup:
    Ich weiß nur nicht, ob das Flimmern selber von der Kamera mit wahrgenommen wird ? Die einzelnen Anzeige Segmente werden mit einem Durchlauf Takt von 450kHz ein- und ausgeschaltet ? Könntest du das mal wenn du hast mit einer PiCamera und einer solchen TM1637 Anzeige testen ?
    Pi Camerra Kaufen und dann klappt es nicht ,weil es flimmert, oder die Momenthelligkeit nicht groß genug ist fände ich jetzt Blödsinn !?

    Franky

    @theesymon wie gerade erwähnt müssest du 13 Kanäle mit einer Samplingfrequenz von mind. 500Kps parallel und synchron einlesen können !!! Das schafft du auf du auf dem elektronischen Weg nur mit einem µDSP oder einem fetten µC ohne Betriebssystem.

    Franky

  • Könntest du das mal wenn du hast mit einer PiCamera und einer solchen TM1637 Anzeige testen ?

    Wer ich? Nö, ich habe so ein Teil nicht und meine RaspiCam liegt *irgendwo* rum. Wo hab ich die eigentlich verstaut? :conf: Dashalb schrieb ich ja "Falls Du zufällig eine RaspiCam hast".

  • Wer ich? Nö, ich habe so ein Teil nicht und meine RaspiCam liegt *irgendwo* rum. Wo hab ich die eigentlich verstaut? :conf: Dashalb schrieb ich ja "Falls Du zufällig eine RaspiCam hast".

    Das mit der Kamera ist natürlich eine Möglichkeit, aber die gefällt mir eigentlich nicht so. Da gehe ich mit der Kirche ums Kreuz. Aber ist auf jeden Fall eine Möglichkeit die ich - sollte nichts funktionieren - habe.

    450 kHz? Bist du dir da sicher? Das kommt mir gar sehr viel vor aber ich glaub dir schon...
    Weil du sagst ich müsste 13 Pins auf einmal auslesen: eigentlich brauche ich in der Zeit, in der von der einen zur nächsten Digit gewechselt wird, "nur" 9 Pins auslesen. Ich kann gern den Python Code schicken. Aber wenn du sagst das mach sowieso keinen Sinn kann ich mir das auch sparn...

    Das mit den µDSP kann ich mir auch mal anschaun und auch was die Connections zwischen MC und Anzeige werd ich mir auch nochmal genau anschaun.

    Wenns noch andere Ideen gibt, würd ich mich drüber sehr freuen. Irgendwer hat das bestimmt schon mal gemacht oder?

    Danke für eure schnelle und netten Antworten!

    Theesymon

  • Moinsen

    450 kHz? Bist du dir da sicher? Das kommt mir gar sehr viel vor aber ich glaub dir schon...
    Weil du sagst ich müsste 13 Pins auf einmal auslesen: eigentlich brauche ich in der Zeit, in der von der einen zur nächsten Digit gewechselt wird, "nur" 9 Pins auslesen. Ich kann gern den Python Code schicken. Aber wenn du sagst das mach sowieso keinen Sinn kann ich mir das auch sparn...

    Ich bin bei den 450kHz vom Datenblatt des Matrixencoders TM1637 ausgegangen. Klar kann es sein, das der Mega das etwas langsamer macht ;) Da in der Marix Ansprache ständig jedes Anzeigensegment einzeln für sich aber immer fortlaufend ein-und ausgeschaltet werden muss, sonst würde irgendwann mal nach paar µSek die Anzeige erlöschen, mußt du schon alle 13 Zugänge scannen, denn nur immer einer der oberen Pins mit einem der unteren Pins bringt ein solches Segment / Strich oder Punkt zum leuchten. Und wenn du etwas recodieren willst mußt du schon wissen über welchen der oberen Anschlüsse gerade Plus anliegt und wie der Strom zum Minus ( GND ) zu einem der unteren Anschlüsse läuft. Entweder alle, und du kannst anhand des Signalmusters eine Rekonstruktion machen, was nur eine Bit-Schieberei wäre. Oder du kannst nur den Segmentblock als 8 erfassen, oder du bekommst nur heraus welcher Strich leuchten soll, kannst ihn aber keiner Stelle zuordnen.
    Deswegen mußt du schon alle 13 Pins im Auge behalten.

    Dann wäre die Frage was hast du an Hilfsmitteln da ? zB ein Arduino ? oder Oszillographen, oder einen Frequenzzähler. Dann könnte man dir schon gezieltere Tpps geben.

    Ffranky

    Franky

  • Wäre es nicht einfacher, die Kommunikation zwischen Lok und Anzeige abzufangen? Es gibt Selbstbauprojekte für das RailCom-Protokoll.

    Z. B. hier.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!