www.mikrocontroller.net

Forum: Compiler & IDEs komisches Problem mit for-Schleife


Autor: hORST (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: hORST (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ja..ich vergaß.. :-/

Autor: hORST (Gast)
Datum:

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

Autor: hORST (Gast)
Datum:

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

Autor: hORST (Gast)
Datum:

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

Autor: Entnervter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hat's damit was zu tun?
//Adress 2 Byte
spi_send(adress16 & 0xFF);  //Most Significant Part

spi_send(adress16 >> 8);  //Last Significant Part

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

Autor: hORST (Gast)
Datum:

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

Autor: hORST (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zeilen getauscht - funzt.

danke!

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.