Forum: Compiler & IDEs komisches Problem mit for-Schleife


von hORST (Gast)


Lesenswert?

Moin Leute

ich hab hier n Problem was ganz dumm ist oder so einfach dass man es
übersieht.
Ich will ein EEPROM zum testen mit 0 bis 50 vollschreiben. Das ganze
soll auch auf die ersten 50 Speicheradressen gepackt werden.
Hier mein Code:

  for (i=0;i<51;i++)
  {
    eeprom_write_register(i, i); //Adresse, Data
    delay(5);
  }

Wenn ich den dann irgendwann mal abrufe..

  for (i=0;i<51;i++)
  {
    usart_out = eeprom_read_register(i);
    delay(5);
  }

... ist die erste Adresse nicht etwa 0 sondern 20 ! Alles weitere
jeweisl eins höher. Also 21, 22 ,23....., 32
Ich verstehe diesen Offset von 20 nicht.

Wenn ich es mit lauter Nullen beschreibe....

  for (i=0;i<51;i++)
  {
    eeprom_write_register(i, 0); //Adresse, Data
    delay(5);
  }

...und anschließend wie oben abrufe, ist das Ergebnis korrekt (nur
Nullen). Keine 20 als Offset.

Auch wenn ich es per hand schreibe...
eeprom_write_register(0, 0)
eeprom_write_register(1, 1)
eeprom_write_register(2, 2)

...ist das Abrufen auch korrekt.

Nur mit der ersten for-Schleife klappts nicht.
Kann mir das jemand erklären?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mist, jetzt ist mir gerade die Kristallkugel zersprungen, als
ich mir den Code für dein eeprom_write_register() angucken
wollte...

von Rolf Magnus (Gast)


Lesenswert?

> Ich will ein EEPROM zum testen mit 0 bis 50 vollschreiben. Das
> ganze soll auch auf die ersten 50 Speicheradressen gepackt werden.

Das paßt nicht in 50 Speicherstellen. Du wirst 51 brauchen.

> Hier mein Code:
>
>   for (i=0;i<51;i++)

Du schreibst ja auch tatsächlich 51 Stück.

Wie ist eeprom_write_register und eeprom_read_register denn definiert?

von hORST (Gast)


Angehängte Dateien:

Lesenswert?

ja..ich vergaß.. :-/

von hORST (Gast)


Lesenswert?

Berichtigung: Es ist keine 20 sondern eine 32 die draufaddiert wird

Das erste gelesene Byte ist also nicht 00000000 sondern 00100000
Die weiteren 00100001, 00100010 ....


bin planlos

von hORST (Gast)


Lesenswert?

hab grad nochwas rausgekriegt:

(1) wenn ich die for schleife so schreibe:
  for (i=0;i<32;i++)
  {
    eeprom_write_register(i, i); //Adresse, Data
  }

Kann man danach folgendes vom EEPROM lesen:
00, 01, 02, 03,...  (also korrekt!!)

(2) wenn ich die for schleife so schreibe:
  for (i=0;i<33;i++)
  {
    eeprom_write_register(i, i); //Adresse, Data
  }

Kann man danach folgendes vom EEPROM lesen:
32, 01, 02, 03,...


(3) wenn ich die for schleife so schreibe:
  for (i=0;i<34;i++)
  {
    eeprom_write_register(i, i); //Adresse, Data
  }

Kann man danach folgendes vom EEPROM lesen:
32, 33, 02, 03,...



da haut doch was net hin?! Es liegt irgendwie an einer "32"-Grenze

von hORST (Gast)


Lesenswert?

ich hab grad sone Vermutung dass es mit der 32-Byte-Page des EEPROM
zusammenhängen könnte....

von Entnervter (Gast)


Lesenswert?

Vielleicht hat's damit was zu tun?
1
//Adress 2 Byte
2
spi_send(adress16 & 0xFF);  //Most Significant Part
3
4
spi_send(adress16 >> 8);  //Last Significant Part

Die Kommentare geben genau das Gegenteil von dem an, was du tatsächlich
machst.

von hORST (Gast)


Lesenswert?

genau das dacht ich auch grad. Das ist nen COde den ich mal irgendwo
geklaut habe. D.h. ich verstehe ihn nicht.  :-)

Es soll eine 16-Bit Adresse in High-8 und Low-8 Bit zerschnippelt
werden. Macht das dieser Code?

von hORST (Gast)


Lesenswert?

zeilen getauscht - funzt.

danke!

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.