Klar das I2C EEPROM verhält sich wie ein normales EEPROM. Nur wenn du diesen String auslesen willst musst du die Zellen auch richtig rum lesen und zusammensetzen.
Druckbare Version
Klar das I2C EEPROM verhält sich wie ein normales EEPROM. Nur wenn du diesen String auslesen willst musst du die Zellen auch richtig rum lesen und zusammensetzen.
Ich speichere immer Variablen ab, da kann ich die Variable dann auch wieder ganz leicht einlesen (ohne zusammensetzen):
writeeeprom Variable , 10
readeeprom Variable , 10
Bei einem 24C16 Eeprom habe ich dann 16000 Speicherzellen? Sehe ich das richtig?
Zum schreiben also einfach bei "A" Die Speicheradresse (1-16000) einsetzen?
I2cstart 'Start I2C
I2cwbyte &HA0 'Sende Slave Adresse
I2cwbyte A 'Sende Speicheradresse
I2cwbyte X 'Sende Wert
I2cstop 'Stop I2C
Waitms 10 'warte 10ms
24C16 = 16 kBit Speicher, d.h. 2048 Bytes (16 kBit * 1024 / 8)
In dem Fall musst du etwas mehr senden:
I2cstart
I2cwbyte &HA0 'Slave-Adresse, ausgewählt mit A0/A1/A2
I2cwbyte AH 'Speicherzelle High
I2cwbyte AL 'Speicherzelle Low
I2cwbyte X 'Zu speicherndes Byte
I2cstop
Die Aufteilung mit High und Low ist nötig, da der EEPROM grösser als 255 Byte ist. Bei dem externen bleibt dir aber nichts übrig; da musst du vor dem Speichern zerlegen bzw. nach dem Lesen wieder zusammenbauen.
Aber da kann man sich ja auch Funktionen schreiben, die das übernehmen und die dann einfach aufrufen.
Eigentlich könnte Bascom ja mal ne fertige Funktion dafür Aufnehmen; die I2C-EEPROMS sind ja doch gebräuchlicher als einige Displays, die Bascom schon kennt.
Fürchte da muss ich auf die fertige Bascom Funktion warten :-) Das scheint mir dann doch komplizierter zu werden als befürchtet. Ich glaube ich komm da wieder auf die SD Karte zurück. Da funktioniert das ja einfach über "Print" was ich so gesehen habe. Gibts sonst noch Möglichkeiten genau so einfach wie im internen EEprom der Atmels zu speichern?
In dem Fall kannst du doch die BefehleZitat:
Zitat von Accenter
DriveReadSector und DriveWriteSector
benutzen.
Mit DriveWriteSector schreibst du einen bis zu 512-Byte großen Block voll mit Daten und gibst ihn an eine bestimmten Sector der Karte aus. Den Sector kannst du direkt adressieren. Entsprechend kannst du einen Sektor von der Karte einlesen.
Du kannst auch deinen 20 Zeichen längen String in einen Block speichern und den Rest verkommen lassen. hängt halt davon ab, wie groß dein datenaufkommen ist. Ich benutze 2GB große Karten mit knapp 4.000.000 Sektoren. Dann könntest du 4.000.000 Datensätze speichern.
Du solltest dazu aber ein 512-Byte großes Array im SRAM frei haben.
Schau mal in der Hilfe zu den beiden Befehlen.Zitat:
Zitat von Accenter
Zum Anschließen schau mal hier: www.ulrichradig.de
danke, werde ich mir ansehen.
Hab mich jetzt für die Speicherung auf USB-Stick entschlossen.
Verwendung findet der Logger von ELV, bisher hatte ich ihn per RS232 mit
einer C-Control betrieben. Funktionierte ganz gut, leider muss mit einer
Taste die Datenübertragung manuell gestartet und gestoppt werden. Da ich
diesen jetzt mit einem AVR betreiben werde, wir das Start/Stop-Prozedere automatisiert und der MAX232 umgangen. Mal sehen, obs klappt. VG Micha
hi Ihr's,
nun mal nen kleinen Link von mir:
http://mikrocontroller.heldt.eu/inde...sd-card-logger
Warum neu erfinden wenn es schon die "perfekte" Lösung gibt? Schickt dem Thomas nen Dankeschön! und beachtet seine "Lizensierung" :)
MAT