Max7219 weitere Probleme

    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 weitere Probleme

      Hallo Zusammen,
      bin z.Zt. dabeieinen Max7219 in Betrieb zu nehmen. Dabei klemmts ganz gewaltig. Was habe ichbisher gemacht : eine Platine habe ich aufgebaut nach dem Bild im Datenblatt,mit 6 x 7Segm. gem. Kathode
      Ansteuern willich den Max mit Tiny 2313 Die Verbindungen zwischen Max und Uc sind wie folgt :MOSI Pin PB5 am Tiny 2313 ; SCK Pin PB7 am Tiny 2313; Load vom Max an PB2 vomTiny 2313 (hier bin ich mir nicht sicher ob das richtig ist)
      Sie Schaltungder Testplatine habe ich unten angefügt. Dito das bis jetzt erstellte Programm.
      Ich willerstmal nur eine Zahl darstellen. Das Programm habe ich mir zusammengesuchthier im Forum und bei Mcselc. Mir persönlich gefällt zwar die Struktur der Sub’snicht, aber da es alle so machen hab ich es erstmal übernommen. Wenn ich dasProgramm flasche leuchten / blinken die einzelnen Segmente in den Digits „wiedoll“.Danach ist Ruhe, alle Segmente aus.
      Dabei möchteich, das jetzt eine (1) „0“ angezeigt wird. Das funktioniert nicht. Ich hab mitden versch. Parametern schon auf verschiedenste Weise „rumgespielt“. Es bringtnichts. Meine Frage ist auch, kann man das überhaupt mit einem Tiny 2313ansteuern? Wo mache ich Fehler im Programm bei der Initialisierung oder imweitern Programm?
      Kann sich dasbitte mal jemand anschauen und beraten ?
      Herzlichen Dankfür Eure Mühe vorab.
      Gruss
      Theo

      Quellcode

      1. '(
      2. Programmname : Max7219_V2
      3. Prozessor : ATTiny 2313 (im DIL - Gehäuse)
      4. Takt : 16 MHZ
      5. Bascom Version :2.0.8.0
      6. Thema : ansteuern eines MAX 7219; angeschlossen sind auf der Testplatine
      7. 6 x 7 Segmentanzeigen mit gem. Kathode
      8. Der Maxv 7219 wird über SPI angesteuert
      9. Verwendet wird ein Max 7219 in DIL Gehäuse
      10. Pins vom uC zum Max7219
      11. A) MOSI = PB5 --> Din vom Max7219
      12. B) Clock = PB7 --> Clk von Max7219
      13. C) PB2 --> Load Pin von MAX 7219
      14. ')
      15. $regfile = "Attiny2313.dat"
      16. $crystal = 16000000 'mit Quartz; kein Teiler durch 8
      17. $swstack = 32
      18. $hwstack = 32
      19. $framesize = 40
      20. '$baud = 9600
      21. '###################################
      22. ' Verbindungen zwisch uC und Max7219
      23. Config Portb.2 = Output
      24. Cs_display Alias Portb.2
      25. 'beliebiger Pin am Tiny2313 --> Load von Max
      26. Config Portb.5 = Output
      27. Din_display Alias Portb.5 'Daten die übertragen werden sollen
      28. 'MOSI am Tiny2313 --> Din von Max
      29. Config Portb.7 = Output
      30. Clk_display Alias Portb.7 'Clock für Datenübertragung
      31. 'USCK am Tiny2313 --> Clk von Max
      32. '#####################################
      33. 'Variablenvereinbarung
      34. Dim Befehl As Byte
      35. Dim Datensatz As Byte
      36. Dim J As Byte
      37. Dim K As Byte
      38. K = 0
      39. Dim Dig_no As Byte 'Digit Nummer (Nummer der 7 Segm. Anzeige)
      40. 'Declare Sub Init_max7219()
      41. 'Declare Sub Daten_anzeigen()
      42. Dim Anz_wert As Byte
      43. 'Init_max7219
      44. '#### Display initialisieren #######
      45. Gosub Init_max7219
      46. Wait 1
      47. '###################################
      48. Do
      49. Anz_wert = 0
      50. Dig_no = &H01 'Digit 0
      51. Gosub Daten_anz_senden
      52. 'If K = 0 Then
      53. ' Daten_anzeigen
      54. 'End If
      55. Loop
      56. End
      57. Init_max7219:
      58. 'Shutdown Mode einstellen
      59. Befehl = &H0C 'Register für Shutdown (siehe Table 2)
      60. Datensatz = &H00 'Shutdown on (siehe Table 3)
      61. Gosub Daten_init_senden
      62. 'Decoder Modus
      63. Befehl = &H09 'Register für Decode Mode :hier BCD Code B (siehe Table 2)
      64. Datensatz = &H01 'siehe Datenblatt Table 4
      65. Gosub Daten_init_senden
      66. 'wenn nur 1 Digit angeshlossen hier ggf.Hex01 einsetzen
      67. 'Intensität (Leuchtstärke / Bestromung der Segmente)
      68. Befehl = &H0A 'Siehe Register Mapping (Table 2)
      69. Datensatz = &H06 'Intensity Register (siehe Table 7)
      70. Gosub Daten_init_senden
      71. 'Anzahl der Digits(Anzahl der 7 Segm. Anzeigen) einstellen
      72. Befehl = &H0B ' Scan Limit (siehe Table 2 )
      73. Datensatz = 5 '6 Displays angeschlossen (siehe Table 8)
      74. Gosub Daten_init_senden
      75. 'Display Test
      76. Befehl = &H0F 'Display Test (siehe Table 2)
      77. Datensatz = 0 'Test = aus (siehe Table 10)
      78. Gosub Daten_init_senden
      79. 'Shutdown Mode einstellen
      80. Befehl = &H0C 'Register für Shutdown (siehe Table 2)
      81. Datensatz = 1 'Shutdown off (siehe Table 3)
      82. Gosub Daten_init_senden
      83. Return
      84. Daten_init_senden:
      85. 'diese Sub dient nur zur Initialisierung
      86. Reset Din_display
      87. Reset Clk_display
      88. Reset Cs_display
      89. 'Cs_display = 0
      90. Shiftout Din_display , Clk_display , Befehl , 1
      91. Shiftout Din_display , Clk_display , Datensatz , 1
      92. 'Cs_display = 1
      93. Set Cs_display
      94. Return
      95. Daten_anz_senden:
      96. 'diese Sub dient zum senden der Daten für Anzeige
      97. Reset Din_display
      98. Reset Clk_display
      99. Reset Cs_display
      100. 'Cs_display = 0
      101. Shiftout Din_display , Clk_display , Dig_no , 1
      102. Shiftout Din_display , Clk_display , Anz_wert , 1
      103. 'Cs_display = 1
      104. Set Cs_display
      105. Return
      Alles anzeigen






    • Warum das gezerre mit manuellen pin/ports, shiftout geht zwar aber.....Zum grundverständnis ok, nur muss man sich ja auch nicht quälen, grad als Anfänger will man irgendwann auch mal ergebnisse sehen a_35_aee4835d
      Soft spi währe meiner Meinung nach viel einfacher, hard spi geht ja nicht so einfach da dem Tiny ja der Hard Spi fehlt, er hat nur usi.
      Abrr egal ob der weg jetzt oder Soft-SPI, bau dir mal ein kurzes Programm mit dem du hardcoded eine led nach der anderen. Dann nach und nach erweitern.


      Tobias
    • Hallo Theo,

      dein Init vom Max7219 sieht mir zu kurz aus.
      Hier das Beispiel wie es die meisten machen.
      Allerdings ist das, dass Init für die Punktmatrix.

      BASCOM-Quellcode

      1. Init_max7219: ' Initialisieren des MAX7219
      2. Reset Cs
      3. Digit = &H0C : Display_daten = 0 ' Shutdown On
      4. Shiftout Din , Clk , Digit , 1
      5. Shiftout Din , Clk , Display_daten , 1
      6. Set Cs
      7. 'Waitms 50
      8. Reset Cs
      9. Digit = &H09 : Display_daten = &H00 ' kein decode "B" für alle datits
      10. Shiftout Din , Clk , Digit , 1
      11. Shiftout Din , Clk , Display_daten , 1
      12. Set Cs
      13. 'Waitms 50
      14. Reset Cs
      15. Digit = &H0A : Display_daten = &H0F ' Helligkeit 0-F
      16. Shiftout Din , Clk , Digit , 1
      17. Shiftout Din , Clk , Display_daten , 1
      18. Set Cs
      19. 'Waitms 50
      20. Reset Cs
      21. Digit = &H0B : Display_daten = 7 ' Anzahl digits 8
      22. Shiftout Din , Clk , Digit , 1
      23. Shiftout Din , Clk , Display_daten , 1
      24. Set Cs
      25. 'Waitms 50
      26. Reset Cs
      27. Digit = &H0F : Display_daten = 0 ' Test Off
      28. Shiftout Din , Clk , Digit , 1
      29. Shiftout Din , Clk , Display_daten , 1
      30. Set Cs
      31. 'Waitms 50
      32. Reset Cs
      33. Digit = &H0C : Display_daten = 1 ' Shutdown Off
      34. Shiftout Din , Clk , Digit , 1
      35. Shiftout Din , Clk , Display_daten , 1
      36. Set Cs
      37. Return
      Alles anzeigen

      Und hier noch das Programm dazu.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • @Theo ich erkenne im Programm keinen Fehler und das Blinken beim flashen werte ich als Zeichen, das der Max mit den Anzeigen arbeitet. Ich vermute jetzt, dein layout passt nicht mit der Zählweise der Dig_no zusammen. Probiere einfach mal alle möglichen Stellen durch.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • @Theo ich hab' dein Programm probiert, es geht. Bei mir flackert aber nix beim flashen. Hast du eine Verbindungen zum max überprüft?
      Ich verwende das Pollinboard und ein Max-Modul mit aufgesetzter 8x8Matrix. Da werden halt die Leds, die deinen Segmenten entsprechen angesteuert.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo Zusammen,
      Danke erstmal zu den Beiträgen! Ich werde die jetzt nach + nach abarbeiten.
      @djsmc: Dein Init-Programmteil ist wie meiner, nur das Du halt eine Matrix ansprichst, und ich eben 7 Segmenter ansprechen will.
      @ schraubbaer : und wie bastelt man sich ein Soft SPI (davon hab ich nämlich gar keine Ahnung) und hab eben auf die Schnelle auch nichts im Netz gefunden.

      Ich werde jetzt mal hier umstellen auf eine Max 328p, den habe ich da als Testboard.
      @tschoeatsch : es ist ja schön dass mein Prog. bei Dir funzt, das gibt ja Hoffnung. Was für einen Prozessor hast Du denn genommen ? Die Verbindungen vom Tiny2313 Bord zum Max sind mit diesen "Jump Wires" gemacht. Die geben an sich keine Probleme bei mir.
      melde mich wieder, sobald ich weitere Erfahrungen/Erkenntnisse habe.

      Gruss
      Theo
    • Theo schrieb:

      Wenn ich dasProgramm flasche leuchten / blinken die einzelnen Segmente in den Digits „wiedoll“.Danach ist Ruhe, alle Segmente au
      ein Pullup (ein Widerstand nach plus) an CS des MAX7129 verhindert ein Ansprechen der SPI-Einheit während des AVR-Flashens. So kann auch keine falsche Konfiguration geladen werden, das soll der AVR ja später machen.
    • Hallo Zusammen,
      @Michael: das mit dem Pull up an Load vom Max7219 war ein guter Vorschlag. Ich hab mal 10K provisorisch "dazwischen gebastelt" und schon war das wilde Flackern beim Flaschen weg. Bei meinen Recherchen im Internet hab ich das in einer Schaltung mal gesehen, aber nicht für so wichtig erachtet, und daher im Layout auch nicht vorgesehen.

      Ansonsten geht's jetzt etwas besser. die Segmente werden angesteuert aber nicht wie sie sollen ( also kein Decode B) Ich muss jetzt mal suchen/überlegen, wie ich die Anzeige komplett leeren kann, um dann jeweils neu aufzusetzen. Für Heut ist "Schicht im Schacht".
      Herzlichen Dank für Eure Tipps und Anmerkungen.

      Gruss
      Theo