So etwas... http://www.dosonchip.com/ ..?Zitat:
Zitat von Kampi
Gruß Richard
Druckbare Version
So etwas... http://www.dosonchip.com/ ..?Zitat:
Zitat von Kampi
Gruß Richard
@jaecko
Danke für die Infos. Ich werde mir einen ST24C EEprom besorgen. Ich habe bisher nur Erfahrungen mit dem internen Eeprom vom Mega128. Ganz leihenhaft habe ich hier einfach immer so gespeichert:
writeeeprom , variable1 , 10
writeeeprom , variable2 , 20
Über die Grösse meiner zu speichernden Daten musste ich mir bisher nie sorgen machen drum habe ich die Speicheradresse immer in 10er Schritten erhöht. Wäre aber mal höchste Zeit zu wissen, welche Variablen mir wieviel Speicher belegen.
Wäre toll wenn mir da jemand mal weiter helfen könnte.
Es hängt von der Variable ab wie groß die sind. Eine Zelle im EEPROM kann eine Zahl bis zu 255, oder FF, Bit aufnehmen.
Eine Variable als Bit ist nur 0 und 1 also 1 Bit dementsprechend. Ein Byte hingegen geht bis 255.
Das heißt in 1 Zelle passt 1 Byte.
Wenn du nun ein Integer hast, welcher aus 65536 Bit besteht, brauchst du 2 Byte (256 x 256). Darauf musst du beim auslesen achten. Wenn du einen Integer von 400 abspeicherst, speichert der Controller in die eine Zelle FF und den Rest von 145 dann in eine zweite Zelle. Dementsprechend musst du auch diese beiden Zellen auslesen und die Zahl zusammenflicken.
Hoffe das ist verständlich und schlüssig 8-[
Danke für die tolle Erklärung. Wie sieht das bei Strings aus? In meinem Fall werde ich wohl Strings die eine Länge von 20 Zeichen haben speichern. Wie sieht es da mit der Speicheraufteilung aus?
Naja die Grösse der Variablen weisst du ja durch deren Deklaration.
Byte = 1 Byte
Word = 2 Byte
String = Anzahl Zeichen + 1
etc.
Zum Abspeichern auf das ext. EEPROM musst du die Variablen sowieso in einzelne Bytes zerlegen und die dann senden.
z.B.
byteLow = word AND &HFF
byteHigh = word / 256
Beim Laden entsprechend wieder zusammenbauen.
word = byteHigh * 256
word = word + byteLow
In C könnte man einfach ne Struct mit allen nötigen Variablen anlegen und dann nen Byte-Zeiger drüberschieben. Ob das in Bascom geht, wüsst ich jetzt nicht genau. So extrem hab ich Bascom nie betrieben.
Hab ich das richtig verstanden, dass man nur bei den grösseren Eeproms das ganze zerlegen muss? Habe das hier gelesen:
http://www.rn-wissen.de/index.php/Bascom_und_I2C_EEprom
Beim 24C16 ist das also nicht nötig, oder? Wie adressiere ich dieses Eeprom richtig? Habe gesehen da gibts A0,A1,A2
Durch mein Platinenlayout habe ich die Adressierung schon vorgegeben. A0 ist bei mir auf +5V, A1 und A2 auf GND. Welche Adresse habe ich dann? Kann mir die Adressierung mit einem DS1307 in die Quere kommen? Fragen über Fragen...
Die EEPROMs haben eine feste Grundadresse. Diese steht im Datenblatt. Dazu kommt dann noch die Adresse durch die Pins und 1 Bit wenn du lesen willst oder eine 0 wenn du schreiben willst.
Normal dürfte das EEPROM nicht mit der RTC in Kontakt kommen von der Adresse her. Und wenn doch änderst du einfach einen Adresspin.
Und die Zahl musst du bei jedem EEPROM zerlegen, weil in ein EEPROM nur eine Zahl reinpasst und wenn die Zahl dann größer als 255 ist passt die nicht in eine Zelle.
Wie speichere ich dann einen String mir 20 Zeichen ab? Wäre sehr dankbar für einige Zeilen Code damit ich das verstehe. hab gehofft das geht so einfach wie mit dem internen Eeprom der Atmels.
Das geht auch so einfach wie das interne EEPROM beschreiben, außer das vor dem eigentlichen Schreibvorgang die I2C Routine kommt.
Ich habe aber mit dem internen Eeprom ohne irgendwas zerlegen zu müssen immer lange Strings abgespeichert. Ich hab dann einfach (nachdem ich noch nicht wusste wieviel Speicher das belegt Platz gelassen bei der Speicheradresse)
Beispiel:
writeeeprom "abcdefghijklmnopq" , 20
writeeeprom "123456789101112" , 50
Das sollte dann auch beim i2C Eeprom so klappen oder? Wieviel Speicher ein String verbraucht weiss ich ja jetzt schon dank der Erklärung oben :-)