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
Alles anzeigen
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
- '(
- Programmname : Max7219_V2
- Prozessor : ATTiny 2313 (im DIL - Gehäuse)
- Takt : 16 MHZ
- Bascom Version :2.0.8.0
- Thema : ansteuern eines MAX 7219; angeschlossen sind auf der Testplatine
- 6 x 7 Segmentanzeigen mit gem. Kathode
- Der Maxv 7219 wird über SPI angesteuert
- Verwendet wird ein Max 7219 in DIL Gehäuse
- Pins vom uC zum Max7219
- A) MOSI = PB5 --> Din vom Max7219
- B) Clock = PB7 --> Clk von Max7219
- C) PB2 --> Load Pin von MAX 7219
- ')
- $regfile = "Attiny2313.dat"
- $crystal = 16000000 'mit Quartz; kein Teiler durch 8
- $swstack = 32
- $hwstack = 32
- $framesize = 40
- '$baud = 9600
- '###################################
- ' Verbindungen zwisch uC und Max7219
- Config Portb.2 = Output
- Cs_display Alias Portb.2
- 'beliebiger Pin am Tiny2313 --> Load von Max
- Config Portb.5 = Output
- Din_display Alias Portb.5 'Daten die übertragen werden sollen
- 'MOSI am Tiny2313 --> Din von Max
- Config Portb.7 = Output
- Clk_display Alias Portb.7 'Clock für Datenübertragung
- 'USCK am Tiny2313 --> Clk von Max
- '#####################################
- 'Variablenvereinbarung
- Dim Befehl As Byte
- Dim Datensatz As Byte
- Dim J As Byte
- Dim K As Byte
- K = 0
- Dim Dig_no As Byte 'Digit Nummer (Nummer der 7 Segm. Anzeige)
- 'Declare Sub Init_max7219()
- 'Declare Sub Daten_anzeigen()
- Dim Anz_wert As Byte
- 'Init_max7219
- '#### Display initialisieren #######
- Gosub Init_max7219
- Wait 1
- '###################################
- Do
- Anz_wert = 0
- Dig_no = &H01 'Digit 0
- Gosub Daten_anz_senden
- 'If K = 0 Then
- ' Daten_anzeigen
- 'End If
- Loop
- End
- Init_max7219:
- 'Shutdown Mode einstellen
- Befehl = &H0C 'Register für Shutdown (siehe Table 2)
- Datensatz = &H00 'Shutdown on (siehe Table 3)
- Gosub Daten_init_senden
- 'Decoder Modus
- Befehl = &H09 'Register für Decode Mode :hier BCD Code B (siehe Table 2)
- Datensatz = &H01 'siehe Datenblatt Table 4
- Gosub Daten_init_senden
- 'wenn nur 1 Digit angeshlossen hier ggf.Hex01 einsetzen
- 'Intensität (Leuchtstärke / Bestromung der Segmente)
- Befehl = &H0A 'Siehe Register Mapping (Table 2)
- Datensatz = &H06 'Intensity Register (siehe Table 7)
- Gosub Daten_init_senden
- 'Anzahl der Digits(Anzahl der 7 Segm. Anzeigen) einstellen
- Befehl = &H0B ' Scan Limit (siehe Table 2 )
- Datensatz = 5 '6 Displays angeschlossen (siehe Table 8)
- Gosub Daten_init_senden
- 'Display Test
- Befehl = &H0F 'Display Test (siehe Table 2)
- Datensatz = 0 'Test = aus (siehe Table 10)
- Gosub Daten_init_senden
- 'Shutdown Mode einstellen
- Befehl = &H0C 'Register für Shutdown (siehe Table 2)
- Datensatz = 1 'Shutdown off (siehe Table 3)
- Gosub Daten_init_senden
- Return
- Daten_init_senden:
- 'diese Sub dient nur zur Initialisierung
- Reset Din_display
- Reset Clk_display
- Reset Cs_display
- 'Cs_display = 0
- Shiftout Din_display , Clk_display , Befehl , 1
- Shiftout Din_display , Clk_display , Datensatz , 1
- 'Cs_display = 1
- Set Cs_display
- Return
- Daten_anz_senden:
- 'diese Sub dient zum senden der Daten für Anzeige
- Reset Din_display
- Reset Clk_display
- Reset Cs_display
- 'Cs_display = 0
- Shiftout Din_display , Clk_display , Dig_no , 1
- Shiftout Din_display , Clk_display , Anz_wert , 1
- 'Cs_display = 1
- Set Cs_display
- Return