Forum: Mikrocontroller und Digitale Elektronik EEprom verdreht Vorzeichen


von Jan (Gast)


Lesenswert?

Hallo zusammen .
Ich glaube ich habe ein kleines Problem in meinen Variablen komme 
allerdings nicht auf den Fehler .

Hier mal meine Prozdur die ich durchlaufe und die dann zum Fehler führt

Variablen
1
uint8_t  EEMEM sound ;  
2
char sound_on_off

Das Beschreiben
1
eeprom_busy_wait();
2
eeprom_write_byte(&sound,sound_on_off);      // Sound_on_off hat hier den Wert 1
Das Auslesen
1
eeprom_busy_wait();
2
eeprom_busy_wait();
3
sound_on_off = eeprom_read_byte(&sound); // Nach dem Auslesen habe ich den Wert -1 ?!

Ich bin mir eigenlich ziemlich sicher das ich hier bei den Variablen 
geschlampt habe ich sehe nur leider nicht wo :S

von Peter II (Gast)


Lesenswert?

Jan schrieb:
> char sound_on_off

damit ist ist nicht festgelegt ob sign oder unsiged warum nicht uint8_t 
wie auch darüber verwenden?

von Jan (Gast)


Lesenswert?

Schon versucht :S .

Dann bekomme ich als ausgelesenen Wert 255 ?!

von Peter II (Gast)


Lesenswert?

Jan schrieb:
> Dann bekomme ich als ausgelesenen Wert 255 ?!

dann sieht es mir sehr nach eine leer eeprom aus - du weißt das ohne 
änderung der Fuse der eeprom beim Flashen gelöscht wird?

von Jan (Gast)


Lesenswert?

Peter II schrieb:
> du weißt das ohne
>
> änderung der Fuse der eeprom beim Flashen gelöscht wird?


Ja allerdings wird der Wert erst zur Programmlaufzeit in das Eeprom 
geschrieben .

Ich verstehe es nicht ?!

Naja zur Not werde ich es einfach so schreiben das er jegliche negative 
Vorzeichen entfernen soll .

Wäre aber sehr unschön

von Peter II (Gast)


Lesenswert?

Jan schrieb:
> Naja zur Not werde ich es einfach so schreiben das er jegliche negative
> Vorzeichen entfernen soll .

das wird dir nicht helfen aus einer 2 wird bestimmt keine -2 sondern 
auch eine 255 bzw -1.

Vermutlich ist es egal was du reinschreibst du bekommst immer eine 255 
(-1)!

von Jan (Gast)


Lesenswert?

Peter II schrieb:
> Vermutlich ist es egal was du reinschreibst du bekommst immer eine 255
>
> (-1)!

Leider genau richtig vermutet ich verstehe aber nicht wieso .

Der Schreibprozess etc also was ich oben mal gepostet habe stimmt doch 
soweit ?!

Und in der Variablen die in das Eeprom geschrieben wird steht auch in 
jedemfall anfangs eine 1

von Peter II (Gast)


Lesenswert?

Jan schrieb:
> Und in der Variablen die in das Eeprom geschrieben wird steht auch in
> jedemfall anfangs eine 1

hofft du oder weisst du?

Was hindert dich eigentlich daran, das ganze im simulator laufen zu 
lassen oder nach den schreiben mal den eeprom auszulesen?

von Jan (Gast)


Lesenswert?

Ich habe mir ja auf meinem LCD den Wert vor dem Schreibprozess ausgeben 
lassen .

Da ist er noch 1 wie es sein soll .

Direkt nach dem Leseprozess lasse ich mir den Wert wieder ausgeben und 
da ist er dann -1 .

Diese -1 verändert sich auch nicht wenn ich den ursprünglichen Wert auf 
0 setze .

von spess53 (Gast)


Lesenswert?

Hi

>Direkt nach dem Leseprozess lasse ich mir den Wert wieder ausgeben und
>da ist er dann -1 .
>Diese -1 verändert sich auch nicht wenn ich den ursprünglichen Wert auf
>0 setze .

Dann funktioniert dein Schreiben nicht. Eine gelöschte EEPROM-Zelle hat 
den Wert $FF, vorzeichenbehaftet gesehen -1.

MfG Spess

von Jan (Gast)


Lesenswert?

Ja richtig auf diese eine Fehlerquelle habe ich das Suchen jetzt auch 
eingegrenzt .

Das Problem ist nur das ich vor dieser Routine noch etwa 5 andere EEprom 
Schreibprozesse habe, die genau so funktionieren und auch klappen ?!

Naja ich suche mal nach der Nadel.... :P

von Tim R. (vref)


Lesenswert?

Nach dem Schreiben das eeprom_busy_wait(); nicht vergessen.
Bei vielen Eeproms muss man auch erstmal eine Page erasen, bevor man sie 
beschreiben kann.
Evtl. ist auch ein Schreibschutz gesetzt (hardwareseitig, oder per 
Register).

eeprom_write_byte() im Sourcecode würde uns helfen.

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.