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
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
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
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.