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?
Mist, jetzt ist mir gerade die Kristallkugel zersprungen, als ich mir den Code für dein eeprom_write_register() angucken wollte...
> 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?
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
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
ich hab grad sone Vermutung dass es mit der 32-Byte-Page des EEPROM zusammenhängen könnte....
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.