komisches Problem mit for-Schleife

Gast #411070
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?
Gast #411072
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?
Gast #411075
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
Gast #411077
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.
Gast #411078
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?

Antwort schreiben

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.

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.