mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SRAM Speicherung


Autor: Pöhli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute !

Ich will den SRam meines ATmega 163 zur Abspeicherung von 16bit 
Messwerten nutzen.

Der SRAM ist 1024 gross.
Leider kann ich keine 500 Messwerte abspeichern,da der Datenspeicher ja 
erst bei $60 losgeht.
1024-96 = 928 blieben also ungefähr 450 Messwerte.
Jedoch ist ein Teil des SRAM bereits  für andere temporäre 
Zwischenspeicherungen vergeben,ich könnte also etwa erst ab Adresse 200 
(C8)den SRAM zur Messwertspeicherung verwenden. Würde also für etwa 400 
Messwerte reichen.

Irgendwelche Denkfehler bisher? Stimmt das so?

Ich lade den Z Pointer also mit 200 als Adresse und lasse ihn dann 
hochzählen, jeweils 2 x pro Speicherung?

Wenn der SRAM mit Messwerten gefüllt ist, der Speichervorgang ist 
abgehakt, und ich will erneut speichern - da wäre es angebracht den 
entsprechenden SRAM Bereich vorher zu löschen da sonst keiner weiss wo 
ein Speichern aufhört und das andere beginnt.

gibt es da eine komfortabelere Lösung als den gesamten Bereich in einer 
Schleife mit 00 zuzuspeichern?

Fragen über fragen....

Danke

Sirko

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denkfehler: das Z-Zegister zeigt immer gerade dahin, wo dein Speichern 
gerade zu Ende war. Also wozu dann Nullen in den Speicher schreiben? Das 
geht spätestens dann schief, wenn Dein Messwert mal Null werden sollte.

Bei so wenig Platz lohnt es darüber nachzudenken, ob die zu speichernden 
Informationen tatsächlich 16 Bit brauchen. Wenn es sich z.B. um langsam 
wandernde Größen handelt, dann kann man auch einfach die Änderung 
speichern. Man kommt dann mit 8 Bit pro Wert oder weniger hin. So oder 
ähnlich gibt es eine Reihe von Verdichtungsmöglichkeiten, die etwas 
Programmiergrips erfordern und die Resourcen besser nutzen. Kommt halt 
drauf an, was es genau ist.

MfG
Gerd


MfG
Gerd

Autor: Sebastian__ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
@Pöhli
der SRAM ist 1024Byte groß, $60 ist ja nur der anfangsoffset. --> $045F 
- $0060 = 3FF = 1023.

1. hast du noch einen Stack
2. wie du sagtest noch andere variablen
3. du kannst doch den gazen breich mit 2 verschachtelten schleichen 
abspeichern, 1. schleife is für die 500 messungen ---> for i=1 to 500 
... und die 2. scheife macht immer die beiden bytes der messwerte.
3. warum nicht der MEGA 128 oder .. 4kb SRAM oder im EE ablegen

MfG
Sebastian

Autor: Pöhli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Erst mal Danke für die Antworten !


@ Gerd:

Das 00 Speichern kommt daher:

Wenn ich eine Messung gespeichert habe und eine neue Messung durchführe 
die zB nur über die halbe Zeit geht, dann besteht der Speicherinhalt zur 
hälfte aus der neuen Messung, und zur Hälfte aus der vorangegangenen 
alten Messung, da diese Messwerte ja auch noch im SRAM stehen.
Daher die Überlegung den SRAM Bereich erst mal zu löschen....

Der Messwert wird nicht 0, von der Seite keine Gefahr.

Nur Änderungen kann ich nicht verwenden. Messwerte sind Messwerte und 
damit absolut, einer beliebigen(externen) PC - Erfassungssoftware kann 
ich keine relativen Änderungen anbieten. Schade eigentlich, die Idee 
gefällt mir !

@ Sebastian

tut mit leid, ich verstehe nur Bahnhof, geht das für mich auch 
allgemeinverständlicher?

mega128 wäre eine Alternative, hast recht. Aber der EEProm ist meines 
Wissens zumeinst noch kleiner als der SRAM, beim mega163 nur 512byte.

Nochal zum Kern der Frage: Wie "lösche" ich größere SRAM Bereiche?

Danke
Pöhli

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ATMega323 (lieferbar) bzw. MEGA32 dürfte die bessere Altrernative 
sein, gleiches Gehäuse in pinkompatibel. Der der MEGA323 ist fast 
überall ab Lager lieferbar aber nach ganz billig ca. 14-20 Euro je nach 
Händler in Kleinstückzahlen.
RAM Bereiche kannst du einfach mit ein Schleife löschen. z.B.

.equ RAM_S = $60     ;Start-Adresse RAM-Bereich
.equ RAM_L = 1000    ;Länge

ldi  R30,low(RAM_S)
ldi  R31,high(RAM_S)
ldi  R24,low(RAM_L)
ldi  R25,high(RAM_L)
clr  R16
CLEAR_LOOP:
st   Z+,R16
sbiw R24
brne CLEAR_LOOP

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.