- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Array in EEPROM / ERAM schreiben

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.04.2007
    Beiträge
    19

    Array in EEPROM / ERAM schreiben

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe folgendes Problem:
    Bei meinem Höhenmesser speichere ich die Messdaten in einem Array welches im RAM abgelegt ist. Nun möchte ich, damit die Daten bei fehlender Betriebsspannung erhalten bleiben, diese Werte in das ERAM schreiben.

    Wegen der begrenzten Anzahl an Schreibvorgängen auf ein ERAM soll man dieses ja nicht mit Hilfe einer Schleife, sondern blockweise beschreiben (deshalb auch mein Umweg über das Array im RAM). Leider lässt sich aber das Array nicht einfach kopieren a´la

    Code:
    Dim ESpeicher(800) as Eram Integer 
    Dim Speicher(800) as Integer      
    
    Speicher(800) = ESpeicher(800)
    Gibt es eine andere Möglichkeit?

    Danke

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113

    Re: Array in EEPROM / ERAM schreiben

    Zitat Zitat von 2512708
    Hallo,
    Wegen der begrenzten Anzahl an Schreibvorgängen auf ein ERAM soll man dieses ja nicht mit Hilfe einer Schleife, sondern blockweise beschreiben (deshalb auch mein Umweg über das Array im RAM).
    Es ist nicht die Zahl von Schreibvorgängen auf das EEPROM an sich, sondern die Zahl auf jede einzelne Zelle ist beschränkt (min. 100000).
    Daher ist es vollkommen unerheblich, ob du einzelne Bytes in einer Schleife oder ein ganzes Array schreiben würdest.
    Außerdem ist nicht klar, bei welchen µC Typen der bekannte Fehler mit dem ersten EEPROM Byte besteht. Daher sollte diese besser nicht benutzt werden.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.04.2007
    Beiträge
    19
    Ok.

    Das heist aber, dass ich das erste Byte auslassen muss und mit dem 2. beginne.
    Wie mach ich das denn?
    Ich wollte eigentlich nur meine Array-Schleife direkt ins ERAM schreiben, so wie ich es ins RAM gemacht habe. Kann ich dazu das "Start-Byte", oder vielleicht sogar den ganzen Bereich, definieren?
    Noch was anderes: Stimmt es dass man in das ERAM nur einzelene Bytes schreiben kann? Ich hab das irgendwo in einem anderen Zusammenhang mal gelesen. Dort wurde deshalb eine Word- Variable in zwei Bytes zerlegt und beim Auslesen wieder zusammengesetzt.

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    31
    Beiträge
    601
    Hi,

    Stimmt es dass man in das ERAM nur einzelene Bytes schreiben kann? Ich hab das irgendwo in einem anderen Zusammenhang mal gelesen. Dort wurde deshalb eine Word- Variable in zwei Bytes zerlegt und beim Auslesen wieder zusammengesetzt.
    Microcontroller sind (meist) 8-bit Systeme. Daher werden alle Werte/Variablen bei der Speicherung in einzelne Bytes "aufgeteilt", da ja die Speicherstellen nur 8 bit breit sind. Es können also gar keine 16-bit Werte gespeichert werden (physikalisch), auch wenn es vielleicht im Programm den Anschein hat, hier erledigt der Compiler nämlich die ganze Arbeit mit der "Aufteilerei".

    Viele Grüße

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Nur um das nochmal richtig klar zu machen:
    Du kannst natürlich von deinem Programm aus andere Wert als Bytes in das EEPROM schreiben. Die benötigen dann dort, ebenso wie im SRAM, eben mehrere Bytes. Also z.B. so:

    Dim dummy As Eram Byte 'Dies landet in der EEPROM Zelle 0
    Dim X_Eram As Eram Word 'Dies landet in den EEPROM Zellen 1 + 2
    Dim X_Sram As Word
    X_Sram = &HAA55
    X_Eram = X_Sram

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    01.04.2007
    Beiträge
    19
    Im Simulator kann ich nun beobachten wie die Werte ins SRAM und ERAM geschrieben werden.
    Leider lässt sich anschließend mit dem Print Befehl nur der SRAM ausgeben.
    Bei
    Code:
    Print Espeicher(index)
    kommt schon beim kompilieren die Fehlermeldung:

    Numeric Parameter expected [ESPEICHER(INDEX)]

    Was ist denn das nun wieder?

    Hier noch die relevanten Codeabschnitte:

    Code:
    Dim Speicher(8) As Integer
    Dim Espeicher(8) As Eram Integer
    Espeicher(8) = Speicher(8)
    Dim Index As Word
    
    ...
    Speicher(index) = Alt
    Espeicher(index) = Speicher(index)
    ...
    
    ...
    For Index = 1 To 8
    Print Espeicher(index)
    Next Index
    ...
    Wie gesagt, das geht komischerweise:

    Code:
    For Index = 1 To 8
    Print Speicher(index)
    Next Index

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Noch mal zur Klärung:
    ERAM-Variablen kannst du nur in Zuweisungen mit SRAM-Variablen nutzen. Ausschließlich.

    Also dies hier

    Espeicher(1) = x
    x = Espeicher(3)

    Alles andere geht nur über SRAM Variablen.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    01.04.2007
    Beiträge
    19
    Danke, jetzt hab ichs endlich gecheckt!

    Keine math. Berechnungen, Funktionen o.ä. mit ERAM.
    Alles mit SRAM machen.

    1. Code mit SRAM schreiben
    2. Gleiche Speicherplätze im ERAM reservieren
    3. ERAM mit SRAM füllen
    4. Zum Auslesen des ERAM zuerst den SRAM mit den gespeicherten Werten füllen und dann SRAM auslesen.

    Code:
    Dim Speicher(8) As Integer                     '1.
    Dim Espeicher(8) As Eram Integer               '2.
    
    Espeicher(index) = Speicher(index)             '3.
    
    For Index = 1 To 8                             '4.
    Speicher(index) = Espeicher(index)
    Print Speicher(index)
    Next Index
    Ganz schön umständlich und speicherfressend finde ich. Jetzt verstehe ich auch was damit gemeint ist, wenn von den Nachteilen von Bascom gegenüber C gesprochen wird. Naja, macht nix. Vorerst bleibe ich bei BASCOM, funktioniert ja.

    Danke nochmal an alle.

Berechtigungen

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

12V Akku bauen