Max7219 7 Segment

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Max7219 7 Segment

      Ich habe den Code des 8x 7Segment-Displays etwas modifiziert.
      Die leeren Stellen werden nun ausgeschaltet.
      Der Rest vom Code ist wie gehabt.
      In der Hauptschleife wird immer initialisiert, da ich wohl Probleme mit EMV habe. Vielleicht sollte ich ein paar Pullups nutzen.
      Viel Spass

      Source Code

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $hwstack = 256
      4. $swstack = 256
      5. $framesize = 256
      6. Baud 9600
      7. Wait 1
      8. Config Portc.0 = Output : Din_display Alias Portc.0
      9. Config Portc.1 = Output : Clk_display Alias Portc.1
      10. Config Portc.4 = Output : Cs_display Alias Portc.4
      11. Dim Zahl As Dword
      12. Dim Laenge As Byte
      13. Dim I As Byte
      14. Dim Ii As Byte
      15. Const Anzahl_displays = 8
      16. 'anzuzeigende Werte an den einzelnen Stellen
      17. Dim Display_adress As Byte , Display_daten As Byte
      18. Dim N_1 As Byte , N As Word
      19. Dim Tausender As Word , Hunderter As Word , Zehner As Word , Einer As Word
      20. Gosub Init_max7219
      21. Dim W_st(anzahl_displays) As Byte
      22. Dim Anzeigestr As String * 9 At W_st Overlay 'Display initialisieren
      23. '#####################################################
      24. Do
      25. Anzeigestr = ""
      26. Gosub Init_max7219
      27. Zahl = Zahl + 1
      28. Anzeigestr = Str(zahl)
      29. Gosub Anzeigen
      30. Loop
      31. End
      32. '#####################################################
      33. Anzeigen: 'senden der anzuzeigenden Zahlen an den einzelnen 7-Segmentanzeigen
      34. Laenge = Len(anzeigestr)
      35. Ii = Laenge + 1
      36. For I = 1 To Laenge Step 1
      37. Ii = Ii - 1
      38. Display_adress = I : Display_daten = W_st(ii)
      39. Cs_display = 0
      40. Shiftout Din_display , Clk_display , Display_adress , 1
      41. Shiftout Din_display , Clk_display , Display_daten , 1
      42. Cs_display = 1
      43. Next I
      44. Laenge = Laenge + 1
      45. For I = Laenge To 8 Step 1
      46. Display_adress = I : Display_daten = 15
      47. Cs_display = 0
      48. Shiftout Din_display , Clk_display , Display_adress , 1
      49. Shiftout Din_display , Clk_display , Display_daten , 1
      50. Cs_display = 1
      51. Next I
      52. Return
      Display All
    • Hallo Michael, die Störungen liegen einfach nur an meinem Platinenlayout. Ich experimentiere zur Zeit mit einer kleinen CNC und habe zum Test die Leiterbahnen sehr eng beieinander. In der Freiverdrahtung sieht alles gut aus.
      Das Beispiel hätte ich natürlich besser kommentieren können, Verzeihung!
      Es passiert dort finden folgendes;
      Der String wird gezählt,
      Je nach Länge werden die einzelnen Zeichen über SPI an den max7219 gesendet und anschließend die leeren Zeichen mit der Value 15 nachgeschoben.
      Bis das ganze Display mit 8 Segmenten voll gefüllt ist.
      Sonst hatte man dort in der Ausgabe "Nullen". Zudem habe ich den Array für die Ausgabe gedreht. D.h. erst Byte 8 ...dann 7 dann......usw.
      Das ist notwendig zur richtigen Darstellung einer Zahl.
      Ich werde demnächst den Punkt des Displays und das Minus noch realisieren.
      Dann überarbeite ich meine Kommentare und melde mich.
      Gruß, Mathias