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 .
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
Alles anzeigen
Geht bestimmt noch schlanker, Schneller und Schöner. Für mich reichts auch so
Tobias
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
- ' Common Anode /Segment Displays an MAX7219
- 'Common Anode Display wird rückwärts angeschlossen
- ' digits reihenfolge:
- ' xxx xxx xxx xxx xxx xxx xxx xxx
- ' x8x x7x x6x x5x x4x x3x x2x x1x
- ' xxx xxx xxx xxx xxx xxx xxx xxx
- ' Anschluss des Displays an den MAX7219
- ' Pin 17 = Anode digit 8
- ' PIN 15 = Anode digit 7
- ' PIN 21 = Anode digit 6
- ' PIN 23 = Anode digit 5
- ' PIN 20 = Anode digit 4
- ' PIN 16 = Anode digit 3
- ' PIN 14 = Anode digit 2
- ' PIN 22 = Anode digit 1
- ' PIN 2 = A
- ' PIN 11 = B
- ' PIN 6 = C
- ' PIN 7 = D
- ' PIN 3 = E
- ' PIN 10 = F
- ' PIN 5 = G
- ' PIN 8 = DP
- $regfile = "M8def.dat" '
- $crystal = 8000000 '8MHz
- $hwstack = 32
- $swstack = 32
- $framesize = 40
- Config Portb = Output
- Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 128 , Noss = 0
- Enable Interrupts
- Spiinit
- Dim Wert(2) As Byte ' Array für die ausgabe, Wert(1) = adresse, Wert(2) = daten
- Dim H_wert(8) As Byte ' Array für ausgabewerte bei Common Cathode
- Dim V_wert(8) As Byte 'Array 90 grad gedreht für ausgabewerte Common Anode
- Dim Seg(8) As Byte ' Arry für Segment inhalt 0-9 + dezimalpunkt
- Dim Dez_punkt As Byte '8x 1 bit für dez punkt
- Dim Dez_punkt_helper As Byte 'Helper da array bei 1 beginnt, bytes mit null
- Dim Dl As Byte ' durchlaufzaehler
- Dim Dl_helper As Byte 'Helper da array bei 1 beginnt, bytes mit null '
- 'no decode
- Wert(1) = &H09
- Wert(2) = &H00
- Spiout Wert(1) , 2
- 'Helligkeit
- Wert(1) = &H0A
- Wert(2) = &H0F
- Spiout Wert(1) , 2
- ' 7 Digits; muessen immer sein zum drehen, müssen aber nicht angeschlossen sein
- Wert(1) = &H0B
- Wert(2) = &H07
- Spiout Wert(1) , 2
- 'testmode off
- Wert(1) = &H0F
- Wert(2) = &H00
- Spiout Wert(1) , 2
- 'shutdown off
- Wert(1) = &H0C
- Wert(2) = &H01
- Spiout Wert(1) , 2
- 'Testmode On - alle LED an
- Wert(1) = &H0F
- Wert(2) = &HFF
- Spiout Wert(1) , 2 'ausgabge 16-Bit Wert
- 'Wait 1
- 'Testmode Off
- Wert(1) = &H0F
- Wert(2) = &H0
- Spiout Wert(1) , 2 'ausgabge 16-Bit Wert
- Waitms 500
- 'Loop
- Seg(1) = 0
- Seg(2) = 1
- Seg(3) = 2
- Seg(4) = 3
- Seg(5) = 4
- Seg(6) = 5
- Seg(7) = 6
- Seg(8) = 10 ' bei 10 bleibt das display dunkel
- Dez_punkt = &B10000000 ' Mit jedem bit wird ein dez. punkt gesetzt- hier der des 8. digits
- Do
- 'ausgabedaten horizontal
- For Dl = 1 To 8
- Select Case Seg(dl)
- Case 0 : H_wert(dl) = &B00111111
- Case 1 : H_wert(dl) = &B00000110
- Case 2 : H_wert(dl) = &B01011011
- Case 3 : H_wert(dl) = &B01001111
- Case 4 : H_wert(dl) = &B01100110
- Case 5 : H_wert(dl) = &B01101101
- Case 6 : H_wert(dl) = &B01111101
- Case 7 : H_wert(dl) = &B00000111
- Case 8 : H_wert(dl) = &B01111111
- Case 9 : H_wert(dl) = &B01101111
- Case Else : H_wert(dl) = &B00000000
- End Select
- 'dez punkte dazurechnen
- Dez_punkt_helper = Dl - 1 'bits des byte beginnen bei 0, array bei 1
- If Dez_punkt.dez_punkt_helper = 1 Then H_wert(dl).7 = 1
- Next Dl
- 'alles um 90grad drehen
- For Dl = 1 To 8
- Dl_helper = Dl - 1
- V_wert(dl).0 = H_wert(1).dl_helper
- V_wert(dl).1 = H_wert(2).dl_helper
- V_wert(dl).2 = H_wert(3).dl_helper
- V_wert(dl).3 = H_wert(4).dl_helper
- V_wert(dl).4 = H_wert(5).dl_helper
- V_wert(dl).5 = H_wert(6).dl_helper
- V_wert(dl).6 = H_wert(7).dl_helper
- V_wert(dl).7 = H_wert(8).dl_helper
- Next Dl
- 'ausgabe, es müssen immer alle 8 Digits ausgegeben werden
- For Dl = 1 To 8
- Wert(1) = Dl
- Wert(2) = V_wert(dl)
- Spiout Wert(1) , 2
- Next Dl
- Wait 5
- Loop
- End
Geht bestimmt noch schlanker, Schneller und Schöner. Für mich reichts auch so
Tobias