Ein simples Byte in das interne EEPROM schubsen

#690590
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
#690606
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.
Gast #690616
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.
#690617
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...
#690643
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.
Gast #691481
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren