- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 2 von 2

Thema: Brauche Hilfe beim entrümpeln

  1. #1

    Brauche Hilfe beim entrümpeln

    Anzeige

    E-Bike
    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
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    in subroutinen und funktionen benutzt man auch kein
    dim, sondern local

    also an stelle von :
    dim digit0 as byte

    dann
    local digit0 as byte
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress