www.mikrocontroller.net

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


Autor: Dirk S. (fusebit)
Datum:

Bewertung
0 lesenswert
nicht 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:
while(EECR & (1<<EEWE));
EEAR = 13;
EEDR = speichern;
EECR |= (1<<EEMWE);
EECR |= (1<<EEWE);

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

Mehr sollte doch nicht nötig sein, oder?

Bis dann

Dirk

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Dirk S. (fusebit)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk S. (fusebit)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: UBoot-Stocki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.