Ein simples Byte in das interne EEPROM schubsen

OP #690590
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
OP #690606
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
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.
OP #690617
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
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
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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.