Forum: Compiler & IDEs Ein simples Byte in das interne EEPROM schubsen


von Dirk S. (fusebit)


Lesenswert?

Moin Leute,

irgendwie hakt es bei mir. Ich möchte nur ein einziges Byte als 
Statusinfo im internen EEPROM verstauen, aber irgendwie funktioniert es 
nicht. Eigentlich sollte es doch so funktionieren:

Mega 8
GCC

Hiermit schreibe ich meinen Wert (einen unsigned char) in die 
Speicherstelle 13:
1
while(EECR & (1<<EEWE));
2
EEAR = 13;
3
EEDR = speichern;
4
EECR |= (1<<EEMWE);
5
EECR |= (1<<EEWE);

und hiermit hole ich ihn zurück:
1
while(EECR &(1<<EEWE));
2
EEAR = 13;
3
EECR |= (1<<EERE);
4
speichern = EEDR;

Mehr sollte doch nicht nötig sein, oder?

Bis dann

Dirk

von Rolf Magnus (Gast)


Lesenswert?

Sollte so gehen. Woran erkennst du denn, daß es nicht geht? Und warum 
nimmst du eigentlich nicht die Funktionen der avr-libc?

von Dirk S. (fusebit)


Lesenswert?

Mit der avr-libc habe ich es auch probiert und dann halt nochmal so. Das 
spart mir auch Platz, weil ich wirklich nur dieses eine Byte benötige.

Es handelt sich um einen (fast vollständig funktionierenden) 
Datenlogger. Über eine Taste kann ich vor dem Start das Intervall zum 
abspeichern festlegen. Es wird in der Variablen speichern als 0 bis 3 
abgelegt und vor dem Start auch über LED "ausgeblinkt". Leider startet 
der Logger immer wieder mit speichern=0, egal was ich eingestellt hatte 
-> Wert wird nicht richtig abgelegt oder nicht richtig zurück gelesen.

von Rolf Magnus (Gast)


Lesenswert?

Ob es am Lesen oder am Schreiben liegt, kannst du ja testen. Du liest 
einfach mit deinem Programmer nach dem Schreiben den EEPROM aus und 
schaust, ob der geänderte Wert drin steht. Umgekehrt kannst du ja auch 
mit dem Programmer explizit mal den Wert reinschreiben und schauen, ob 
dein Programm es richtig ausliest.
Ansonsten kann ich mir als Fehlerquellen nur vorstellen, daß das Problem 
irgendwo außerhalb der EEPROM-Routinen liegt oder daß der Prozessor eine 
falsche Taktfrequenz oder zu niedrige Spannung bekommt, oder daß dem 
Compiler der falsche Prozessor angegeben wurde. Die Lese- und 
Schreibroutinen sind ja praktisch exakt wie im Datenblatt angegeben.

von Dirk S. (fusebit)


Lesenswert?

Es funktioniert wie oben geschrieben :-/

Es lag an der Signalisierung, da war ein falscher Bezug der sich erst 
nach der Änderung auf das EEPROM ausgewirkt hat.

Wie schaffen es "echte" Programmierer eigentlich solche Dinge wie 
Betriebssysteme zu schreiben??? Mich bringen schon 700 Zeilen Code an 
den Rand des Wahnsinns...

von Karl H. (kbuchegg)


Lesenswert?

Dirk S. wrote:

> Wie schaffen es "echte" Programmierer eigentlich solche Dinge wie
> Betriebssysteme zu schreiben???

:-) Übung, Übung und nochmals Übung

> Mich bringen schon 700 Zeilen Code an
> den Rand des Wahnsinns...

In ein paar Jahren wirst du über ein 700 Zeilen Programm
lächeln. Die Grenze, die du überblicken kannst, steigt ständig.
Deine Methoden werden sich ändern und du wirst einen Fundus von
erprobten Algorithmen parat haben, die du im Kopf nur abrufen
brauchst.

von Rolf Magnus (Gast)


Lesenswert?

Ich weiß nicht, ob ich nach deiner Definition ein "echter" Programmierer 
bin, aber ich teile meine Programm-Entwicklung in der Regel in sehr 
viele sehr kleine Schritte ein, die ich einzeln testen kann. Wenn man 
alles auf einmal macht, wird es nachher nicht funktionieren, und dann 
ist es sehr schwer herauszufinden, wo der Fehler liegt.

von UBoot-Stocki (Gast)


Lesenswert?

Abo

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.