7 segment Common Anode Displays an MAX7219

    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!

    • 7 segment Common Anode Displays an MAX7219

      Hier einmal ein Testprogramm um Common Anode Displays an einem MAX7219 zu betreiben. Der ist dafür an sich nicht gemacht, Funktionieren tut es trotzdem. Die Displays sind hat da und müssen somit auch verschafft werden. Wahrscheinlich hat mit Meister Hora nur wegen sonem code die Displays vermacht X/ .

      Nur die Datenumrechnerei ist aufwändiger da die informationen für jedes 7Segment Display über alle 8 Ausgabe Bytes verteilt sind, die Daten sind quasi um 90 grad gedeht. Ist nicht ganz in meinem Hirn entstanden, die idee kam hier her: Link Da ich mit C nix anfangen kann hab ich halt mit Bascom gebastelt.
      IMG_0938 (Small) (2).JPG

      Quellcode

      1. ' Common Anode /Segment Displays an MAX7219
      2. 'Common Anode Display wird rückwärts angeschlossen
      3. ' digits reihenfolge:
      4. ' xxx xxx xxx xxx xxx xxx xxx xxx
      5. ' x8x x7x x6x x5x x4x x3x x2x x1x
      6. ' xxx xxx xxx xxx xxx xxx xxx xxx
      7. ' Anschluss des Displays an den MAX7219
      8. ' Pin 17 = Anode digit 8
      9. ' PIN 15 = Anode digit 7
      10. ' PIN 21 = Anode digit 6
      11. ' PIN 23 = Anode digit 5
      12. ' PIN 20 = Anode digit 4
      13. ' PIN 16 = Anode digit 3
      14. ' PIN 14 = Anode digit 2
      15. ' PIN 22 = Anode digit 1
      16. ' PIN 2 = A
      17. ' PIN 11 = B
      18. ' PIN 6 = C
      19. ' PIN 7 = D
      20. ' PIN 3 = E
      21. ' PIN 10 = F
      22. ' PIN 5 = G
      23. ' PIN 8 = DP
      24. $regfile = "M8def.dat" '
      25. $crystal = 8000000 '8MHz
      26. $hwstack = 32
      27. $swstack = 32
      28. $framesize = 40
      29. Config Portb = Output
      30. Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 128 , Noss = 0
      31. Enable Interrupts
      32. Spiinit
      33. Dim Wert(2) As Byte ' Array für die ausgabe, Wert(1) = adresse, Wert(2) = daten
      34. Dim H_wert(8) As Byte ' Array für ausgabewerte bei Common Cathode
      35. Dim V_wert(8) As Byte 'Array 90 grad gedreht für ausgabewerte Common Anode
      36. Dim Seg(8) As Byte ' Arry für Segment inhalt 0-9 + dezimalpunkt
      37. Dim Dez_punkt As Byte '8x 1 bit für dez punkt
      38. Dim Dez_punkt_helper As Byte 'Helper da array bei 1 beginnt, bytes mit null
      39. Dim Dl As Byte ' durchlaufzaehler
      40. Dim Dl_helper As Byte 'Helper da array bei 1 beginnt, bytes mit null '
      41. 'no decode
      42. Wert(1) = &H09
      43. Wert(2) = &H00
      44. Spiout Wert(1) , 2
      45. 'Helligkeit
      46. Wert(1) = &H0A
      47. Wert(2) = &H0F
      48. Spiout Wert(1) , 2
      49. ' 7 Digits; muessen immer sein zum drehen, müssen aber nicht angeschlossen sein
      50. Wert(1) = &H0B
      51. Wert(2) = &H07
      52. Spiout Wert(1) , 2
      53. 'testmode off
      54. Wert(1) = &H0F
      55. Wert(2) = &H00
      56. Spiout Wert(1) , 2
      57. 'shutdown off
      58. Wert(1) = &H0C
      59. Wert(2) = &H01
      60. Spiout Wert(1) , 2
      61. 'Testmode On - alle LED an
      62. Wert(1) = &H0F
      63. Wert(2) = &HFF
      64. Spiout Wert(1) , 2 'ausgabge 16-Bit Wert
      65. 'Wait 1
      66. 'Testmode Off
      67. Wert(1) = &H0F
      68. Wert(2) = &H0
      69. Spiout Wert(1) , 2 'ausgabge 16-Bit Wert
      70. Waitms 500
      71. 'Loop
      72. Seg(1) = 0
      73. Seg(2) = 1
      74. Seg(3) = 2
      75. Seg(4) = 3
      76. Seg(5) = 4
      77. Seg(6) = 5
      78. Seg(7) = 6
      79. Seg(8) = 10 ' bei 10 bleibt das display dunkel
      80. Dez_punkt = &B10000000 ' Mit jedem bit wird ein dez. punkt gesetzt- hier der des 8. digits
      81. Do
      82. 'ausgabedaten horizontal
      83. For Dl = 1 To 8
      84. Select Case Seg(dl)
      85. Case 0 : H_wert(dl) = &B00111111
      86. Case 1 : H_wert(dl) = &B00000110
      87. Case 2 : H_wert(dl) = &B01011011
      88. Case 3 : H_wert(dl) = &B01001111
      89. Case 4 : H_wert(dl) = &B01100110
      90. Case 5 : H_wert(dl) = &B01101101
      91. Case 6 : H_wert(dl) = &B01111101
      92. Case 7 : H_wert(dl) = &B00000111
      93. Case 8 : H_wert(dl) = &B01111111
      94. Case 9 : H_wert(dl) = &B01101111
      95. Case Else : H_wert(dl) = &B00000000
      96. End Select
      97. 'dez punkte dazurechnen
      98. Dez_punkt_helper = Dl - 1 'bits des byte beginnen bei 0, array bei 1
      99. If Dez_punkt.dez_punkt_helper = 1 Then H_wert(dl).7 = 1
      100. Next Dl
      101. 'alles um 90grad drehen
      102. For Dl = 1 To 8
      103. Dl_helper = Dl - 1
      104. V_wert(dl).0 = H_wert(1).dl_helper
      105. V_wert(dl).1 = H_wert(2).dl_helper
      106. V_wert(dl).2 = H_wert(3).dl_helper
      107. V_wert(dl).3 = H_wert(4).dl_helper
      108. V_wert(dl).4 = H_wert(5).dl_helper
      109. V_wert(dl).5 = H_wert(6).dl_helper
      110. V_wert(dl).6 = H_wert(7).dl_helper
      111. V_wert(dl).7 = H_wert(8).dl_helper
      112. Next Dl
      113. 'ausgabe, es müssen immer alle 8 Digits ausgegeben werden
      114. For Dl = 1 To 8
      115. Wert(1) = Dl
      116. Wert(2) = V_wert(dl)
      117. Spiout Wert(1) , 2
      118. Next Dl
      119. Wait 5
      120. Loop
      121. End
      Alles anzeigen

      Geht bestimmt noch schlanker, Schneller und Schöner. Für mich reichts auch so


      Tobias