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

Thema: Variablen in XRAM oder ERAM (ATTiny13) ???

  1. #1
    Benutzer Stammmitglied Avatar von HPM
    Registriert seit
    16.02.2005
    Ort
    D-98744
    Beiträge
    78

    Variablen in XRAM oder ERAM (ATTiny13) ???

    Anzeige

    Powerstation Test
    Hallo Forumler,

    ich hatte mal gelesen, wenn man Variablen in den verkehrten Speicher schreibt gibt der Controller irgend wann den "Geist" auf!

    Ich will eine Variable ziehmlich oft schreiben und abfragen
    Der Tiny13 bringt mir ne Fehlermeldung, dass der SRAM nicht reicht wenn ich die Variable als Byte schreibe.
    Er bietet mir aber "XRAM Byte" und "ERAM Byte" an!
    Welches muss ich denn nun nehmen??

    Danke, für Eure Hilfe im Voraus!




    Code:
    '************************************************************
    'Voreinstellungen
    
    $regfile = "ATtiny13.DAT"                                   ' Definitionen für ATtiny13
    Config Portb = Output                                       ' alles Ausgänge
    Portb = 1                                                   ' Pullup setzen um Ausgang beim Einschalten auf 0 zu halten
    
    Dim I As Xram Byte
    'Dim I As  ERAM Byte
    Viel Spaß im Forum
    MfG Peter

    Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    XRAM hat der T13 nicht,
    ERAM hat er 64Byte genausoviel wie SRAM.

    Mit ERAM variablen kann man aber nicht direkt arbeiten, die muss man immer erst in eine normale Variable kopieren um damit zu rechnen, zu vergleichen oder sonst was !

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    49
    Beiträge
    377

    Re: Variablen in XRAM oder ERAM (ATTiny13) ???

    Zitat Zitat von HPM
    Er bietet mir aber "XRAM Byte" und "ERAM Byte" an!
    [...]
    Code:
    Dim I As Xram Byte
    'Dim I As  ERAM Byte
    Hallo HPM!

    Wenn du ERAM nimmst, dann wird die Variable in den EEPROM geschrieben und bei jedem Verwenden aus dem EEPROM ausgelesen. Das ist genau das was man sehr selten machen sollte. Am Anfang des Programms oder um Einstellungen zu speichern.

    Ich hatte heute auch das Problem, dass mir Bascom für den ATtiny13 zu wenig Speicher meldete. Darauf hin habe ich ein wenig an den Einstellungen gedreht um den Speicher ein wenig umzuräumen.

    Du kannst mit ``$hwstack``, ``$swstack`` und ``$framesize`` spielen. Ich habe bei meinem Programm diese Einstellungen verwendet. Allerdings muss ich jetzt noch mal nachlesen, was für was zuständig ist und ob ich damit keinen Blödsinn gemacht habe. Damit lässt sich das Programm zumindest wieder kompilieren.
    Code:
    $hwstack = 20
    $swstack = 20
    $framesize = 0
    mfg
    Gerold

  4. #4
    Benutzer Stammmitglied Avatar von HPM
    Registriert seit
    16.02.2005
    Ort
    D-98744
    Beiträge
    78
    Uiiii.... das ging aber schnell !!!
    Danke, für die fixe Antwort!

    Ich dachte ja auch, das der Tiny13 keinen XRAM hat aber sowohl bei
    DIM..XRAM als auch DIM..ERAM wird die Variable abgearbeitet!

    Habe mal ein kleines Lauflicht zur Probe gebastelt!

    Wo werden dann also die Daten abgelegt ???
    Ich wollte nur den Speicher, der nicht so oft beschrieben werden soll, schonen!

    Code:
    '************************************************************
    'Voreinstellungen
    
    $regfile = "ATtiny13.DAT"                                   ' Definitionen für ATtiny13
    Config Portb = Output                                       ' alles Ausgänge
    Portb = 1                                                   ' Pullup setzen um Ausgang beim Einschalten auf 0 zu halten
    
    Dim I As Xram Byte
    'Dim I As  ERAM Byte
    '************************************************************
    
    '************************************************************
    'Hauptprogramm
    
    Do
    Gosub Vor
    Gosub Rueck
    Gosub Aufl
    Loop
    End
    '************************************************************
    
    
    '************************************************************
    'Unterprogramme
    
    
    
    '************************************************************
    Vor:
    For I = 1 To 50
    Portb.0 = 0
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 0
    Portb.2 = 1
    Portb.3 = 1
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 0
    Portb.3 = 1
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 0
    Waitms 30
    Next I
    Return
    
    
    '************************************************************
    Rueck:
    For I = 1 To 50
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 0
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 0
    Portb.3 = 1
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 0
    Portb.2 = 1
    Portb.3 = 1
    Waitms 30
    
    Portb.0 = 0
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Waitms 30
    Next I
    Return
    
    '************************************************************
    Aufl:
    For I = 1 To 100
    Portb.0 = 0
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Waitms 30
    
    Portb.0 = 0
    Portb.1 = 0
    Portb.2 = 1
    Portb.3 = 1
    Waitms 30
    
    Portb.0 = 0
    Portb.1 = 0
    Portb.2 = 0
    Portb.3 = 1
    Waitms 30
    
    Portb.0 = 0
    Portb.1 = 0
    Portb.2 = 0
    Portb.3 = 0
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 0
    Portb.2 = 0
    Portb.3 = 0
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 0
    Portb.3 = 0
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 0
    Waitms 30
    
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Waitms 30
    Next I
    Return
    
    
    '************************************************************
    'Ende
    Viel Spaß im Forum
    MfG Peter

    Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    49
    Beiträge
    377
    Hallo HPM!

    Nachdem ich mich ein wenig schlauer gemacht habe http://avrhelp.mcselec.com/index.html?memory_usage.htm verwende ich bei mir jetzt diese Einstellungen:
    Code:
    $hwstack = 8
    $swstack = 2
    $framesize = 5
    Welche Einstellungen für dich OK sind, hängt von deinem Programm ab.

    mfg
    Gerold

  6. #6
    Benutzer Stammmitglied Avatar von HPM
    Registriert seit
    16.02.2005
    Ort
    D-98744
    Beiträge
    78
    Hallo Gerold,
    das war ein guter Tipp!!!
    MeinProg läuft mit den Einstellungen, die Du verwendet hast!

    Vielen Dank noch mal und einen guten Rutsch!!
    Viel Spaß im Forum
    MfG Peter

    Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Dimensioniere die Variablen einfach ohne alles, das funktioniert schon
    EEP-Variablen nimmt man für permanente Parameter, also Werte die man z.B. von außen setzt und die dann beim Reset aufgerufen werden. Der EEP kann laut Atmel 10.000x geschrieben und 100.000x gelesen werden, bevor er statistisch gesehen den Geist aufgibt (bzw. erste Fehler auftreten.). Es kann sicherlich sein, dass man den auch 1 Mio. mal schreiben/lesen kann, aber da darf man sich nicht drauf verlassen. Auf jeden Fall macht es keinen Sinn, normale Variablen darin zu speichern, vor allem weil man sie ja eh nur über eine Hilfsvariable auslesen kann - wäre also keine Resourceneinsparung.
    XRAM ist eine "Speichererweiterung" für die µC, das braucht man eher kaum.

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad