Forum: Mikrocontroller und Digitale Elektronik PIC Eprom in (welchen) Speicher übertragen?


von Thomas W. (Gast)


Lesenswert?

Hallo

Ich habe im PIC 18F2620 ca. 200 Bytes im EPROM gespeichert.

Nun muß ich öfter mit diesen Daten rechnen.
Dazu sollen sie in den Arbeitsspeicher oder RAM übertragen werden.

WOHON bringe ich die am günstigsten?
In den DATA RAM Adresse 0x20 bis 0xirgendwas?
Oder besser in ein Feld, das ich in C18 reserviere (BYTES[200])?
Oder gibt es noch eine bessere Möglichkeit?

Gruß
Thomas

von Frank K. (fchk)


Lesenswert?

Üblicherweise hält man in C seine Daten in Arrays, wenn es gleichartige 
Daten sind (z.B. Strings, aufeinanderfolgene Messwerte oder ähnliches), 
oder in Strukturen, wenn es verschiedenartige, aber logisch 
zusammenhängende Daten sind. structs kann man auch schachteln.

Einfach irgendwo wild in den Speicher zu schreiben, ist ganz übel, weil 
der Compiler nicht weiß, dass dieser Bereich schon belegt ist, und weil 
der nächste, der Deinen Code liest, nicht weiß, was in Speicherstelle 
345 oder in eeprom[187] steht und welche Bedeutung das hat.

Nutze also die Sprachelemente, die C Dir bietet ([], struct, union), 
damit Dein Code les- und verstehbar bleibt. Am Besten hast Du zum 
Schluss eine struct, die den eeprom-Inhalt widerspiegelt und die Du dann 
ins EEPRom schreiben oder daraus laden kannst.

fchk

von Thomas W. (Gast)


Lesenswert?

Hi

Also Du würdest die Lösung:

unsigned char bytes[200];

und in einer Schleife die 200 Werte, die über den Index angesprochen 
werden sollen, beim Start aus dem EEPROM da reinkopieren.

Sollte mir ja egal sein, wo der C18 Compiler das dann anlegt.

Gruß
Thomas

von heinzhorst (Gast)


Lesenswert?

Werden die Daten nach dem Einschalten öfters verändert oder handelt es 
sich quasi um "Konfigurationsparameter"? Du könntest die Daten einfach 
gleich nach dem Einschalten von EEPROM in den RAM schreiben und nur wenn 
sie verändert werden vom RAM in den EEPROM sichern. Falls die Daten 
öfters verändert werden:

Die Daten nur im RAM aktuell halten. Der 18F2620 hat Hi/Lo-Voltage 
Detection (HLVD). Damit kannst du einen Interrupt auslösen, wenn die 
Betriebsspannung unter einen bestimmten Wert fällt, sprich: Wenn das 
Gerät ausgeschaltet wird. In diesem Interrupt schreibst du die zu 
sichernden Daten vom RAM in den EEPROM. Musst nur dafür sorgen, dass die 
Kapazitäten in deiner Schaltung den Controller noch so lange versorgen 
können, bis dieser Vorgang abgeschossen ist. Das kann man aber berechnen 
(Entladekurve Kondensator).

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
Noch kein Account? Hier anmelden.