Hi
ich habe einen Code der eigentlich auch funktioniert.
Wollte ihn jetzt auf einen Attiny2313 schreiben, nur dummerweise reicht der SRAM nicht aus.
Vor allem das 'config dcf' scheint ausschlaggebend zu sein. Gibt es irgendwo eine Angabe wieviel SRAM 'config dcf' verschlingt?
Besteht noch Hoffnung den Code so abzuändern dass es passt?
Beim Complieren sagt er bereits bei "Dim Dig0 As Byte , Dig1 As Byte..." er seit out of SRAM.
Code:$regfile = "attiny2313.dat" $crystal = 1000000 Config Dcf77 = Pinb.3 , Timer = 1 , Debug = 1 , Inverted = 1 , Timer1sec = 1 , Check = 1 Config Timer0 = Timer , Prescale = 1 , Edge = Rising Config Date = Dmy , Separator = . Config Portb.0 = Output ' din Config Portb.1 = Output ' cs Config Portb.2 = Output ' clk Max_din Alias Portb.0 Max_cs Alias Portb.1 Max_clk Alias Portb.2 Set Max_din ' cs, din, clk = high Set Max_cs Set Max_clk Dim Ausgabe As String * 8 Ausgabe = "_-HELP-_" Dim I As Integer Dim Sec_old As Byte , Dcfsec_old As Byte Dim Merker As Byte Declare Sub Max7221datenout(daten As Word) Declare Sub Max7221zeichenlesen Declare Sub Max7221init Dim Led_operation As Word Dim Dig0 As Byte , Dig1 As Byte , Dig2 As Byte , Dig3 As Byte , Dig4 As Byte , Dig5 As Byte , Dig6 As Byte , Dig7 As Byte Gosub Max7221init Gosub Max7221zeichenlesen Enable Interrupts Dim Zaehler As Byte Zaehler = 0 Sec_old = 99 : Dcfsec_old = 99 ': DCF_Debug_Timer = 0 Do For I = 1 To 78 'vorher 78 Waitms 10 If Sec_old <> _sec Then Exit For End If If Dcfsec_old <> Dcf_sec Then Exit For End If Next Waitms 220 Sec_old = _sec If Dcf_sec <> Dcfsec_old Then Gosub Led Dcfsec_old = Dcf_sec If _sec = 50 And Merker = 0 Then Gosub Schaltsekunde 'Softuhr ist 3 Sec. zu schnell If _sec > 55 Then Merker = 0 If Zaehler <= 8 Then Ausgabe = Time$ Dig7 = &B01100110 Else Ausgabe = Date$ Dig7 = &B01001000 End If Incr Zaehler If Zaehler = 11 Then Zaehler = 0 Gosub Max7221zeichenlesen Loop Schaltsekunde: Merker = 1 _sec = _sec - 3 Return Led: 'Toggle Portc.0 Return End 'end program Sub Max7221zeichenlesen Dim Db_zeiger As Word Dim Tl As Byte Dim Ez As Byte Dim Dat(8) As Byte Dim Einzelzeichen As String * 1 Tl = Len(ausgabe) Dim A As Byte , B As Byte B = 1 For A = 1 To Tl Einzelzeichen = Mid(ausgabe , A , 1) Ez = Asc(einzelzeichen) Select Case Ez Case 32 : Db_zeiger = 0 Case 45 : Db_zeiger = 1 Case 48 : Db_zeiger = 2 Case 49 : Db_zeiger = 3 Case 50 : Db_zeiger = 4 Case 51 : Db_zeiger = 5 Case 52 : Db_zeiger = 6 Case 53 : Db_zeiger = 7 Case 54 : Db_zeiger = 8 Case 55 : Db_zeiger = 9 Case 56 : Db_zeiger = 10 Case 57 : Db_zeiger = 11 Case 69 : Db_zeiger = 12 Case 72 : Db_zeiger = 13 Case 76 : Db_zeiger = 14 Case 80 : Db_zeiger = 15 Case 95 : Db_zeiger = 16 Case Else Db_zeiger = 0 End Select Dat(b) = Lookup(db_zeiger , Zeichensatz) Incr B Next A B = 8 For A = 0 To 7 Dig0.a = Dat(b).6 Dig1.a = Dat(b).5 Dig2.a = Dat(b).4 Dig3.a = Dat(b).3 Dig4.a = Dat(b).2 Dig5.a = Dat(b).1 Dig6.a = Dat(b).0 Decr B Next A Led_operation = &B0000000100000000 + Dig0 'dig0 Call Max7221datenout(led_operation) Led_operation = &B0000001000000000 + Dig1 'dig1 Call Max7221datenout(led_operation) Led_operation = &B0000001100000000 + Dig2 'dig2 Call Max7221datenout(led_operation) Led_operation = &B0000010000000000 + Dig3 'dig3 Call Max7221datenout(led_operation) Led_operation = &B0000010100000000 + Dig4 'dig4 Call Max7221datenout(led_operation) Led_operation = &B0000011000000000 + Dig5 'dig5 Call Max7221datenout(led_operation) Led_operation = &B0000011100000000 + Dig6 'dig6 Call Max7221datenout(led_operation) Led_operation = &B0000100000000000 + Dig7 'dig7 Call Max7221datenout(led_operation) Return End Sub Sub Max7221init Led_operation = &B0000110000000000 ' shutdown mode normal operation Call Max7221datenout(led_operation) Led_operation = &B0000110000000001 ' shutdown mode normal operation Call Max7221datenout(led_operation) Led_operation = &B0000100100000000 ' decode mode code b for digit 7-0 Call Max7221datenout(led_operation) Led_operation = &B0000101000000000 ' intensity | &H0A01 = 2/16 | &H0A09 = 10/16 | &H0A0F = 15/16(max on) Call Max7221datenout(led_operation) Led_operation = &B0000101100000111 ' scan limit digit 0-7 Call Max7221datenout(led_operation) Return End Sub Sub Max7221datenout(daten As Word) Max_cs = 0 Shiftout Max_din , Max_clk , Daten , 1 , 16 Max_cs = 1 Waitms 10 End Sub Zeichensatz: 'Segment A,B,C,D,E,F,G - sortiert nach ASCII Data 0 'SPACE DEC32 Data 1 '- DEC45 Data 126 '0 DEC48 Data 48 '1 DEC49 Data 109 '2 DEC50 Data 121 '3 DEC51 Data 51 '4 DEC52 Data 91 '5 DEC53 Data 95 '6 DEC54 Data 112 '7 DEC55 Data 127 '8 DEC56 Data 115 '9 DEC57 Data 79 'E DEC69 Data 55 'H DEC72 Data 14 'L DEC76 Data 103 'P DEC80 Data 8 '_ DEC95







Zitieren


Lesezeichen