Hallo Zusammen,
erstmal alles Gute für 2018 !
Nachdem ich meinen Pc nun wieder in Betrieb habe mit WIN 10,konnte es auch mit Bascom weitergehen. Ich arbeite ja immer noch am Verstehen von MAX 7219 und habe dabei auch einige Fortschritte gemacht. Auf jedem 7 Segm. eine Zahl darstellen etc.
Jetzt bin ich aktuell dabei ein Programm zu entwickeln, dass beliebe Zahlen anzeigt. dabei schiebe ich die Zahl in einen String und zeige diesen nach + nach an, weise also den einzelnen Werten eine 7 Segm. zu. So ist mein Plan. Ob das geht weis ich noch nicht, weil : plötzlich bekomme ich beim Syntax Check den Fehler 22 (Out of Sram Space) Wenn man die aus kommentierten Variablen wieder einbindet entsteht der Fehler. ( z.B. Zaehl_lg oder Zaehl_str) ich hab auch den Variablen andere Namen gegeben ( z.B. "B") aber das bringt nichts, dann ist eben B out of Sram Space.
Wer kann mir da mal bitte raten woran das liegt, bzw. was zu tun ist. Wo liegt mein Fehler?
Hier mein Programm soweit.
Herzlichen Dank vorab.
Gruss Theo
Alles anzeigen
erstmal alles Gute für 2018 !
Nachdem ich meinen Pc nun wieder in Betrieb habe mit WIN 10,konnte es auch mit Bascom weitergehen. Ich arbeite ja immer noch am Verstehen von MAX 7219 und habe dabei auch einige Fortschritte gemacht. Auf jedem 7 Segm. eine Zahl darstellen etc.
Jetzt bin ich aktuell dabei ein Programm zu entwickeln, dass beliebe Zahlen anzeigt. dabei schiebe ich die Zahl in einen String und zeige diesen nach + nach an, weise also den einzelnen Werten eine 7 Segm. zu. So ist mein Plan. Ob das geht weis ich noch nicht, weil : plötzlich bekomme ich beim Syntax Check den Fehler 22 (Out of Sram Space) Wenn man die aus kommentierten Variablen wieder einbindet entsteht der Fehler. ( z.B. Zaehl_lg oder Zaehl_str) ich hab auch den Variablen andere Namen gegeben ( z.B. "B") aber das bringt nichts, dann ist eben B out of Sram Space.
Wer kann mir da mal bitte raten woran das liegt, bzw. was zu tun ist. Wo liegt mein Fehler?
Hier mein Programm soweit.
Herzlichen Dank vorab.
Gruss Theo
BASCOM-Quellcode
- '(
- Programmname : Max7219_V3
- Prozessor : ATTiny 2313 (im DIL - Gehäuse)
- Takt : 8 Mhz
- Bascom Version :2.0.8.1
- 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
- In diesem Programm sollen ganze Zahlen dargestellt werden.
- ')
- $regfile = "Attiny2313.dat"
- '$crystal = 16000000 'mit Quartz; kein Teiler durch 8
- $crystal = 8000000
- $swstack = 40
- $hwstack = 40
- $framesize = 40
- '###################################
- ' 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 Dig_no As Byte 'Digit Nummer (Nummer der 7 Segm. Anzeige) 1=rechte Anzeige ; 6 = linke Anzeige
- Declare Sub Init_max7219()
- Declare Sub Daten_anzeigen()
- Declare Sub Initialisierung_senden()
- Dim Anz_wert As Integer
- Dim Zaehler As Word
- Zaehler = 123
- 'Dim Zaehl_str As String * 5 ' *5 weil Word max 5 Zahlen hat
- 'Dim Zaehl_lg As Byte
- 'Dim Hga As String * 1 'Hilfsgrösse A --> Zwischenvariable
- 'Dim Pos As Byte 'Position des zu lesenden Zeichens
- Init_max7219
- Do
- 'Zaehl_str = Str(zaehler) 'Zahl in String wandeln
- 'Zaehl_lg = Len(zaehl_str) 'Länge des String ermitteln
- ' For J = 0 To Zaehl_lg
- ' If J > 5 Then Exit For
- ' Pos = Zaehl_lg - J
- ' Hga = Mid(zaehl_str , Pos , 1) 'bei Mid werden die Zeichen von links gelesen
- ' Anz_wert = Val(hga) 'String in Byte wandeln
- 'Dig_no = J + 1
- 'Daten_anzeigen
- 'Next J
- '##############
- 'dieser Teil funktioniert problemlos
- 'For J = 0 To 5
- ' Dig_no = J + 1 'Achtung :die einzelnen Digits werden von 1 bis 6 gezählt
- ' Anz_wert = J
- ' Daten_anzeigen
- ' Wait 3
- 'Next J
- '################
- Loop
- End
- Sub Init_max7219()
- '7 Segment Anzeige initialisieren
- 'Shutdown Mode einstellen
- Befehl = &H0C 'Register für Shutdown (siehe Table 2)
- Datensatz = &H00 'Shutdown on (siehe Table 3)
- Initialisierung_senden
- 'Decode Mode einstellen
- Befehl = &H09 'Register für Decode Mode :hier BCD Code B (siehe Table 2)
- Datensatz = &HFF 'siehe Datenblatt Table 4
- Initialisierung_senden
- ' Anzahl der Digits(Anzahl der 7 Segm. Anzeigen) einstellen
- Befehl = &H0B ' Scan Limit (siehe Table 2 )
- Datensatz = &H05 'hier 6 Displays angeschlossen (siehe Table 8)
- Initialisierung_senden
- 'Intensität (Leuchtstärke / Bestromung der Segmente)
- Befehl = &H0A 'siehe Adress Map (Table 2)
- Datensatz = &H04 'Intensity Register (siehe Table 7)
- Initialisierung_senden
- 'Display Test
- Befehl = &H0F 'Display Test (siehe Table 2)
- Datensatz = 0 'Test = aus (siehe Table 10)
- Initialisierung_senden
- 'Shutdown Mode einstellen
- Befehl = &H0C 'Register für Shutdown (siehe Table 2)
- Datensatz = 1 'Shutdown off; Datensatz=0 wäre Shutdown on--> keine Anzeige (siehe Table3)
- Initialisierung_senden
- End Sub
- Sub Initialisierung_senden()
- Cs_display = 0
- Shiftout Din_display , Clk_display , Befehl , 1
- Shiftout Din_display , Clk_display , Datensatz , 1
- Cs_display = 1
- Waitms 1
- Cs_display = 0
- End Sub
- Sub Daten_anzeigen()
- Cs_display = 0
- Shiftout Din_display , Clk_display , Dig_no , 1
- Shiftout Din_display , Clk_display , Anz_wert , 1
- Cs_display = 1
- Waitms 1
- Cs_display = 0
- End Sub