Forum: Mikrocontroller und Digitale Elektronik PIC 18F Variablen Speichern


von Kphos (Gast)


Lesenswert?

Im Manual kam bei mir folgendes Problem auf zudem ich nichts finden 
konnte, ich schreibe in meinem Mikrocontroller Programme die 
Berechnungen machen und muss deswegen verschiedene Werte ständig 
abspeicheren und auslesen wozu ein RAM ja gedacht ist.

Nur habe ich hier ja jetzt bloß den Data-Memory in dem die Register 
liegen sowie den Flashspeicher und seinen EEprom oder so ähnlich in dem 
PIC18F. Jedenfalls sehe ich hier nicht wo ich Werte Speichern soll die 
sich andauernd ändern, man könnte vielleicht das ein oder andere 
Register zweckentfremden und dort seine Werte speichern die erforderlich 
sind aber die anderen Speicher gehen ja bei dem andauernden Beschreiben 
kaputt.

Wäre gut wenn mir jemand sagen könnte wo ich denn hier jetzt weiter 
suchen/lesen soll zur speicherung von Arbeitsdaten die dauernd abgerufen 
werden müssen.

von Teo D. (teoderix)


Lesenswert?

Ich denke mal das Deine Fragestellung ungenau/unvollständig... ist!

Kphos schrieb:
> und muss deswegen verschiedene Werte ständig
> abspeicheren und auslesen wozu ein RAM ja gedacht ist.

Kphos schrieb:
> Jedenfalls sehe ich hier nicht wo ich Werte Speichern soll die
> sich andauernd ändern,...
> und dort seine Werte speichern die erforderlich
> sind aber die anderen Speicher gehen ja bei dem andauernden Beschreiben
> kaputt.

???

von Mike Glotzkowski (Gast)


Lesenswert?

Dir ist offenbar der Unterschied zwischen Flash (ROM) und RAM noch nicht 
klar.

von Kphos (Gast)


Lesenswert?

Ernsthaft, konntet ihr den Text nicht verstehen? Ich kann das kaum 
glauben, vielleicht bin ich ja in den letzten Jahren zu eigenbrötlerisch 
geworden und die Leuten verstehen meine Texte nicht mehr jedoch denke 
ich es ist sehr deutlich formuliert wo hier die Probleme liegen.

Ich habe eine hohe Zahl von Variablen(!) die mit einer hohen 
Aktualiserungsrate regelmäßig gespeichert werden sollen, dazu ist RAM 
normal gedacht nur kann ich soetwas wie RAM in einem normalen x86 auf 
meinen PIC18F nicht finden.

Also wie soll ich die jetzt speichern ohne mir den Flash kaputt zu 
machen? Das blöde PIC18F-Ding scheint keinen Arbeitsspeicher zu haben 
und ich suche irgendwelche Möglichkeiten wie man es löst. Ihr wollt mir 
doch nicht erzählen das ich auf dem PIC18F bloß die wenigen Register 
habe und dann nur solchen Festpeicher wie Flash?! Wozu habe ich dann 
denn diesen riesigen Program-Memory um riesige Programme zu schreiben 
wenn ich keinen Arbeitsspeicher habe um irgendwelche wichtigen Variablen 
abzulegen/zwischenzuspeichern? Würde ja bedeuten es müssen jedesmal an 
dem Mikrocontroller zusätzliche Rambausteine angeschlossen werden um die 
Aufgaben zu erledigen.

von Chris B. (dekatz)


Lesenswert?

Kphos schrieb:
> Nur habe ich hier ja jetzt bloß den Data-Memory in dem die Register
> liegen
Jain.
Bei den "Register" unterscheidet man "special function register" (also 
TMR0, STATUS, INTCON etc etc) und "file register" (dorthin kommen deine 
Variablen).
Beide liegen in einem zusämmenhängenden Speicher und der ist als RAM 
aufgebaut.

Wo nachlesen: Im Datenblatt deines Kontrollers, dort ist alles 
ausreichendst erklärt

von Chris B. (dekatz)


Lesenswert?

Ernsthaft: ich kann deinen Text schon verstehen.
Und nochmal ernsthaft: Das Datenblatt hast du wohl noch nie zur Hand 
genommen!?

von B. S. (bestucki)


Lesenswert?

Schau mal hier, Seite 49/50:
http://ww1.microchip.com/downloads/en/DeviceDoc/39605F.pdf

Hab irgend einen Typ genommen, sind alle ähnlich.

von Kphos (Gast)


Lesenswert?

Troll... Die Englische Übersetzung für Manual ist Datenblatt. Les dir 
mal in ruhe meine Texte durch bevor du hier solche ironischen Sachen 
postest.

Der Data-Memory in einem PIC ist sein Arbeitsspeicher, der wird 
Allgemein als Fire Register bezeichnet und der ist nur in GPR sowie SFR 
unterteilt. Da davon jedes Register eine ihm zugewiesene Funktion hat 
kann ich sie höchstens wie im ersten Beitrag geschrieben zweckentfremden 
nur ist das in meinen Augen nicht effektiv.

Es gibt den Program Memory Space und den Data Memory Space, der Program 
Memory Space ist Flash sowie EEProm und Data Memory Space soetwas 
ähnliches wie RAM also die File Register in denen die GPR sowie SFR 
liegen.

Laut Manual(Datenblatt) gibt es nur die Speicher und ich denke mir das 
es scheiße ist einen so riesen Flash ohne irgendwelchen richtigen 
Arbeitsspeicher zu haben. Die Möglichkeiten des Data Memory sind nur 
begrenzt also gehe ich mit dem Problem in ein Forum weil in dem Manual 
nichts steht wo ich noch Daten Speichern soll wo mir der Speicher nicht 
durch dauerndes beschreibne kaputt geht. Im Prinzip habe ich die Antwort 
schon längst nur denke ich es könnte vielleicht noch irgendwas geben wo 
ich meine Daten intern speichern könnte ohne externe Hilfsmittel wie 
einen zusätzlichen Speicherbaustein.

Ist ja ein super Userfreundliches Klima hier...

von Kphos (Gast)


Lesenswert?

Das Troll galt dem Vorposter von bestucki, deinen Post habe ich nicht 
gesehen.

Richtig, die Manuals bzw. Mikrocontroller sind sich im allgemeinen sehr 
ähnlich. Logisch, erfindet ja nicht jeder eine komplett neue 
Computerarchitektur für seinen Chip.

Das Manual das ich lese ist PIC 18F4550 sowie ich die Controller dazu 
habe, sah es nur nicht als notwendig das zu Posten weil es doch im 
Prinzip alles das gleiche ist. Also wie ich dem Manual richtig entnehme 
gibt es außer dem anschließen eines externen Speicherbausteins keine 
weiteren Möglichkeiten hohe Kapazitäten von verschiedenen sich ändernden 
Variablen in hoher Wiederholungsrate schadenfrei abzuspeichern...

von B. S. (bestucki)


Lesenswert?

Kphos schrieb:
> Also wie ich dem Manual richtig entnehme
> gibt es außer dem anschließen eines externen Speicherbausteins keine
> weiteren Möglichkeiten hohe Kapazitäten von verschiedenen sich ändernden
> Variablen in hoher Wiederholungsrate schadenfrei abzuspeichern...

Dein PIC hat 2k SRAM. Wenn das nicht genügt, nimmst du einen dickeren 
Controller oder spendierst externes RAM. Oder du Programmierst 
sparsamer.

von Chris B. (dekatz)


Lesenswert?

Den GPR ist überhaupt keine Funktion zugewiesen oder irgendwie 
eingeschränkt (abgesehen von den Controllern welche DMA etc haben, da 
sind bestimmte Bereiche für DMA priorisiert).

Wenn du "Unmengen" RAM benötigst musst du PIC32 nehmen - da gibts bis 
256kB SRAM (oder mittlerweile mehr!).

von Kphos (Gast)


Lesenswert?

Seite 68 im Manual des PIC 18F4550, das unused habe ich nicht gesehen 
weil ich mich nur auf den Text und weniger auf die Bilder konzentriert 
habe. Das heißt dann wohl hier liegen neben den SFR sowie GPR-Registern 
noch komplett freie Speicherbänke... Bitte Posten ob ich es richtig 
verstehe aber ich denke schon

von Kphos (Gast)


Lesenswert?

Nein, habe es doch richtig gelesen. Die PIC 18F4550 haben 8 Bänke, 
dementsprechend sind die anderen "Unused", also nicht existent. Dann 
muss ich wohl sehen das ich in die Register sauber rein schreibe ohne 
Konflikte auszulösen und ggf. einen externen Speicher verwenden.

von PIG18 (Gast)


Lesenswert?

Das mit den PICs und dem RAM ist ein Problem seitdem ich die Dinger in 
der Hand habe. Du kannst eigentlich schon ein Datenfeld bis 256 Byte RAM 
anlegen, danach wird's aber komisch weil du im Linker Script die Bänke 
zusammenhängend deklarieren mußt.

Hast du den MPLAB® C18 C COMPILER USER’S GUIDE schon durchgeblättert?
In 5.2 APPLICATION: CREATING LARGE DATA OBJECTS AND THE USART
steht wie du den Speicher handhaben mußt.

von Kphos (Gast)


Lesenswert?

Ich programmiere komplett in ASM, dort ist das mit dem Speicher 
ansprechen so oder so etwas anders. Da habe ich sogenannte Bank Select 
Register auf die die ich vor dem schreiben achten muss nicht das ich in 
die falsche Bank schreibe.

von Klaus (Gast)


Lesenswert?

Kphos schrieb:
> Das heißt dann wohl hier liegen neben den SFR sowie GPR-Registern

Seite 69:
> PIC18 devices may have banked memory in the GPR area. This is
> data RAM which is available for use by all instructions.

Also: General Purpose Register ist ein anderes Wort für RAM

Kphos schrieb:
> Da habe ich sogenannte Bank Select Register auf die die ich vor dem
> schreiben achten muss nicht das ich in die falsche Bank schreibe.

Darum kümmere ich mich nicht, dafür habe ich Personal. Ein C-Compiler 
kann so etwas richtig gut, wird nie krank und macht keinen Urlaub. Man 
kann ihn ohne Arbeitgericht einfach kündigen und was jüngeres 
einstellen.

MfG Klaus

von Kphos (Gast)


Lesenswert?

lol!

Danke, jetzt sehe ich es auch. Scheint im GPR Bereiche zu geben die man 
frei verwendet.

Man kann sich auch solche Linker relativ einfach zu seinem ASM-Code 
programmieren die einem das meiste Abnehmen.

von Erich (Gast)


Lesenswert?

Kphos schrieb:
> Ich programmiere komplett in ASM, dort ist das mit dem Speicher
> ansprechen so oder so etwas anders. Da habe ich sogenannte Bank Select
> Register auf die die ich vor dem schreiben achten muss nicht das ich in
> die falsche Bank schreibe.

Du solltest auf C compiler umsteigen, dann brauchst du dich um "Bank 
Select" nicht mehr zu kümmern.
Der Compiler sagt dir dann schon, ob das Ram für dein Programm 
ausreicht.

Frage: Dir ist aber schon klar, daß RAM verloren geht wenn man die 
Spannung abschaltet?

Gruss

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.