Max7219 Anfängerfragen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Max7219 Anfängerfragen

      Hallo miteinander!

      Ich will mir etwas mit den bekannten MAX7219 bauen.
      Ich weiß das es fertige Codes in Bascom für diese Bausteine gibt, jedoch kann ich diese nicht verstehen.

      Deswegen will ich mich auch selbst dran machen diese in meinem Programm anzusteuern.

      Das hat bis jetzt auch einigermaßen geklappt.
      Einen kann ich ansteuern wie ich es möchte, aber die anderen 3 die kaskadiert sind, wollen nicht so recht.

      Wenn ich das Datenblatt richtig verstanden habe, soll man zuerst das senden was man auf dem 2ten Display sehen will, also zuerst die Adresse, dann die daten. Danach soll man den noop befehl senden.

      Jedoch klappt das bei mir nicht so wirklich und die Max7219 machen was sie wollen.
      Evenutell kann mir ja jemand bei der Fehlersuche behilflich sein.

      das was meiner meinung nach auf dem ersten angezeigt werden sollte (da_reihe_1(1), wird auf den 3ten angezeigt. Auf den ersten und zweiten wird das angezeigt was auf dem 2ten angezeigt werden sollte (da_reihe_1(2).

      Ich komme da grade nichtmehr so wirklich weiter.





      Hier ein Ausschnitt aus meinem code:

      Quellcode

      1. Ad_reihe_1 = &H01
      2. Da_reihe_1(1) = &B10101111
      3. Da_reihe_1(2) = &B01010101
      4. Ad_noop = &H00
      5. Portb.4 = 0 'portb.4 ist mein CS
      6. Spiout Ad_reihe_1 , 1
      7. Spiout Da_reihe_1(1) , 1
      8. Portb.4 = 1
      9. Portb.4 = 0
      10. Spiout Ad_reihe_1 , 1
      11. Spiout Da_reihe_1(2) , 1
      12. Portb.4 = 1
      13. Portb.4 = 0
      14. Spiout Ad_noop , 1
      15. Spiout Ad_noop , 1
      16. Portb.4 = 1
      17. Wait 50
      Alles anzeigen
    • Der cs löst in den maxen (Mehrzahl von max) eine Übernahme der letzten 16 bit im internen Zwischenspeicher, als Adresse und Daten, aus. Wenn du zB 3 maxe kaskadiert hast, musst du 2 bytes für den weitesten entfernten max ausgeben, dann gleich die 2 bytes für den 2. max und gleich die 2 bytes für den ersten max. Jetzt haben alle maxen ihre 2 passenden bytes in ihrem Zwischenspeicher und jetzt wird die Übergabe mit dem cs initiiert.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • djmsc: Leider konnte ich mit der Suche nur ein komplett fertiges Programm für eine Uhr mit DCF 77 finden, diesen code konnte ich nicht verstehen, ausserdem funkionierte er nicht bei mir.

      tschoeatsch: Dein Tipp das erst nach dem Senden aller daten CS auf high gesetzt werden darf, hat mich schließlich zum Erfolg gebracht! a_22_9ac28a82

      Die von dir geposteten Links sind ebenfalls sehr hilfreich.

      Dadurch habe ich bemerkt das dieses tolle Forum hier sogar ein Lexikon hat, und das wenn man die normale Forumssuche nutzt, die Lexikon Artikel nicht durchsucht werden.

      Ansonsten hätte ich diese schon gefunden beim durchsuchen des Forums.

      Vielen Dank für die Hilfe!

      mfg
    • So, nun hab ich folgende Situation bei der ich nicht weiterkommen.

      Ich verwende den Code von tschoeatsch um die MAX7219 anzusteuern, soweit so gut.

      Mit einem Modul das ich aus Deutschland bestellt habe funktioniert dieser Code einwandfrei.

      Allerdings habe ich nun viele dieser Module aus China bestellt (10Stk ) bei diesen funktioniert der Code leider nicht.

      Scheinbar sind diese Module anders verschalten als die etwas hochwertigeren aus Deutschland.

      Hier sieht man das Problem in "visueller" Form:



      Durch ändern folgendes Codeschnipsels hab ich es geschaft das der Text folgendermaßen angezeigt wird:

      YouTube/z5PX-Uv8-kQ

      Ich habe folgende Zeile abgeänder: for n = 0 to 7 step 1 , das war vorher for n = 7 to 0 step -1

      BASCOM-Quellcode

      1. Ausgabe:
      2. For Zeile = 1 To 8
      3. Bs_spalte = 1
      4. Cs = 0
      5. Do
      6. For N = 0 To 7 Step 1
      7. Bit_nummer = Zeile - 1
      8. Disp_daten.n = Bildspeicher(bs_spalte).bit_nummer
      9. Incr Bs_spalte
      10. Next N
      11. Shiftout Din , Clk , Zeile , 1
      12. Shiftout Din , Clk , Disp_daten , 1
      13. Loop Until Bs_spalte > Spalten
      14. Cs = 1
      15. Next Zeile
      16. Return
      Alles anzeigen

      Vielleicht kann mir jemand helfen. natürlich könnte man die ASCII Tabelle bearbeiten, aber da gibt es doch bestimmt eine elegantere Lösung für dieses Problem ;)
    • Dein link geht leider nicht. Ich könnte mir vorstellen, die haben die Zuordnung der Leds um 180° gedreht. Im ersten Filmchen sieht man ja, dass die scrollrichtung nach links geht, vorher nach rechts. Wenn das so ist, dann muss man halt den Bildspeicher von der anderen Richtung her zu den maxen schieben.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • Jetzt musst du nur noch die Zeilen umstellen, die unterste nach oben, die obere nach unten (und die dazwischen natürlich auch). Also for Zeile=8 to 1 step -1
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Wenn ich dein erstes Filmchen betrachte, nachdem du umgesteckt hast, dann sind erstmal die Ziffern ok. Das heißt die Zeilen passen. Wenn ich jetzt den Eingangsstecker rechts habe, dann ist die Zeile 1 unten und bit0 davon links, bzw bit7 rechts unten. Jetzt immer den Stecker auf der rechten Seite. Zeile 1 des Bildspeichers (bit0 vom den bytes des Bildspeichers) müssen also in die Zeile 8 vom max kommen und die Spalten des Bildspeichers werden von bit0 der Max-Zeilen aufwärts verteilt.

      Ich denke, dieser code sollte eine passende Anzeige ergeben.

      BASCOM-Quellcode

      1. Dim Zeile_max As Byte
      2. Ausgabe: 'der Bildspeicher wird an die Max7219 übertragen
      3. For Zeile = 1 To 8 'Zeilennummer des Bildspeichers, oberste Zeile=1 =bit0 der spalte
      4. Zeile_max = 8 - Zeile 'Zeilennummer des max 1=unten, 8=oben
      5. Bs_spalte = 1
      6. Cs = 0 'Beginn der Datenübertragung
      7. Do
      8. For N = 0 To 7 'bit0 ist links in der Zeile der Matrix, bit7 rechts
      9. Bit_nummer = Zeile - 1
      10. Disp_daten.n = Bildspeicher(bs_spalte).bit_nummer 'ein bit einer Spalte dem bit einer Zeile für den Max zuordnen
      11. Incr Bs_spalte
      12. Next N
      13. 'ein byte ist jetzt zusammen gesetzt und kann gesendet werden
      14. Shiftout Din , Clk , Zeile_max , 1
      15. Shiftout Din , Clk , Disp_daten , 1
      16. Loop Until Bs_spalte > Spalten
      17. Cs = 1 'Flanke überträgt die Daten für einer Bildspeicher-Zeile an die Max7219
      18. Next Zeile
      19. Return
      Alles anzeigen
      Neu ist die Variable Zeile_max
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ghostrider1911 schrieb:

      Scheinbar sind diese Module anders verschalten als die etwas hochwertigeren aus Deutschland.

      Ghostrider1911 schrieb:

      Bei den chinesischen ist der Punkt links unten.
      Ich denke die sind nur anders beschaltet. Auch glaube ich nicht, dass die "deutschen" Module aus Deutschland kommen. Die wurden wahrscheinlich auch nur aus China nach Deutschland importiert und dann weiterverkauft.
      Wenn das die Lösung ist, möchte ich mein Problem wieder haben.
    • Achtung, im code ist ein Fehler versteckt!
      Spoiler anzeigen
      Zeile_max=9-Zeile, es muss ja ein Wertebereich von 1 bis 8 entstehen
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Und weil es viele Wege gibt, dieser müsste auch ohne der neuen Variable gehen

      BASCOM-Quellcode

      1. Ausgabe: 'der Bildspeicher wird an die Max7219 übertragen
      2. For Zeile = 1 To 8 'Zeilennummer des max, oberste Zeile=8 =bit0 der spalte
      3. Bs_spalte = 1
      4. Cs = 0 'Beginn der Datenübertragung
      5. Do
      6. For N = 0 To 7 'bit0 ist links in der Zeile der Matrix, bit7 rechts
      7. Bit_nummer = 8 - Zeile
      8. Disp_daten.n = Bildspeicher(bs_spalte).bit_nummer 'ein bit einer Spalte dem bit einer Zeile für den Max zuordnen
      9. Incr Bs_spalte
      10. Next N
      11. 'ein byte ist jetzt zusammen gesetzt und kann gesendet werden
      12. Shiftout Din , Clk , Zeile , 1
      13. Shiftout Din , Clk , Disp_daten , 1
      14. Loop Until Bs_spalte > Spalten
      15. Cs = 1 'Flanke überträgt die Daten für einer Bildspeicher-Zeile an die Max7219
      16. Next Zeile
      17. Return
      Alles anzeigen
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • @tschoeatsch vielen Dank für deine Bemühungen! Es klappt mit deiner Anpassung einwandfrei, sowohl mit neuer Variable als auch ohne.

      Somit kann ich die billigen Module aus china nun auch benutzen.

      @ceperiga Das die Module anders verschalten sind ist klar, währe es ein anderer chip würde ja garnix funktionieren.
      Das beide Module aus China kommen ist mir auch klar, jedoch gibt es offensichtlich mehrere Qualitätsstufen, tschoeatsch hatte scheinbar auch die "guten"

      Ich hatte das gute von Makershop bestellt, die billigen aus ebay.

      Die Qualität ist definitiv schlechter bei den Modulen aus china, schon alleine die positionierung der buchsenleisten auf der platine ist teilweise recht krumm. Ausserdem sieht man an der Platine hinten das der Lack der drauf ist sehr unsauber ist.

      Auf den Dot Matrix anzeigen selbst steht die gleiche Nummer, die andere Art der Beschriftung lässt trotzdem auf einen billigeren Nachbau schließen.

      Jedoch hab ich für ein Modul glaub ich 3,20 € bezahlt, und für solch eine große Anzeige ist das völlig in Ordnung denke ich.