PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : EEPROM



Kampi
23.01.2010, 15:58
Hallo
Ich hab eine Verständnissfrage. Und zwar will ich diesen EEPROM im I²C ansteuern
->http://www.conrad.de/goto.php?artikel=160997

Im Datenblatt steht ja die Adresse so:

1 0 1 0 A2 A1 A0 R/W

(http://www2.produktinfo.conrad.com/datenblaetter/150000-174999/160997-da-01-en-24C16.pdf)

Wenn ich nun alle Adressleitungen also A2-A0 an GND liegen habe ist die Adresse ja:
1 0 1 0 0 0 0 R/W

Was setze ich den für die Hex berechnung für R/W ein? Weil im moment würde der Code ja &H50 sein-

Danke für die Hilfe

Jaecko
23.01.2010, 16:06
Beim Schreiben ist R/W 0 (0x50), beim Lesen 1 (0x51).

Kampi
23.01.2010, 16:28
Achso. D.h. ich muss einfach nur wenn ich die Zahl 4 auf das EEPROM schreiben will sagen das die Adresse &H50 ist und wenn ich diese Zahl auslesen will muss ich &H51 schreiben?

Jaecko
23.01.2010, 18:45
Genau so.
Ich machs immer so, dass ich die Adresse z.B. so angeb:
I2C_WriteByte(0x50 + I2C_WRITE) bzw. I2C_ReadByte(0x50 + I2C_READ),
wobei I2C_WRITE = 0 und I2C_READ = 1 ist.

Kampi
23.01.2010, 19:12
Wie kommt den das 0x50 zustande?

Jaecko
23.01.2010, 19:55
0x50 = &H50 = 50h... je nach Compiler.
Dezimal jedes mal 80.

Kampi
23.01.2010, 20:14
Ahh ok ..... hab mir sowas in der Richtung schon gedacht.

Kampi
24.01.2010, 18:31
So und ich hab dann direkt noch eine Frage. Wie funktioniert das mit dem Speichern der Daten in dem EEPROM? Ich hab mir da jetzt ein Programm zusammengezimmert wo ich was eingebe und das im EEPROM gespeichert wird und dann per Print ausgegeben wird. Allerdings zeigt er jedesmal 0 oder 255 an..... . Ist das richtig so?

Jaecko
24.01.2010, 18:37
Kommt drauf an...

Wie sieht das Programm aus und was steht schon im EEPROM drin? Wenn er noch unbeschrieben ist, ist die Antwort von jeder Speicherzelle 0xFF = 255.
Welche Befehlssequenz zum schreiben/lesen gebraucht wird, steht im Datenblatt.

Kampi
24.01.2010, 18:42
$regfile = "m32def.dat"
$crystal = 16000000


'SDA und SCL definieren
Config Sda = Portc.1
Config Scl = Portc.0


Dim X As Word
Dim A As Byte
Dim B As Byte
Dim Lesen As Word
CLS

Do '

Input "Eingabe:" , X

I2cstart
I2cwbyte &HA0
I2cwbyte X
I2cstop
Waitms 1000




'--- lesen vom EEprom ----


I2cstart
I2cwbyte &HA0
I2cstart
I2cwbyte &HA1
I2crbyte X
I2cstop


Print Lesen

Loop
End


So sieht das Programm aus. Hab ich da evtl. einen Denkfehler gemacht?

Jaecko
24.01.2010, 18:43
Hier fehlt die Angabe der Speicheradresse im EEPROM. Ich denk doch mal, dass der mehr als nur 1 Byte speichern kann.
Ausserdem bringts nichts, nach X zu lesen und "Lesen" anzuzeigen.

Kampi
24.01.2010, 18:55
Welche Befehlszeile muss das den sein? Und ja der EEPROM kann ein bischen mehr speichern :D. Und das Lesen ist nur ein überbleibsel gewesen eigtl net wichtig :D.

Jaecko
24.01.2010, 19:10
Wie das geht, also wie die Adressen (z.B. auch 1 oder 2 Byte) aussehen müssen und wo die im Schreibbefehl hingehören, steht im Datenblatt.

Zum Auslesen: Die Variable, die du anzeigen willst, muss auch die sein, in der das EEPROM-Byte gespeichert wird. Also Entweder nach X lesen und X anzeigen, oder "Lesen" lesen und "Lesen" anzeigen.

(Dementsprechend müssen X und/oder Lesen auch Byte, nicht Word, sein)

Kampi
24.01.2010, 19:23
Alles klar. Dann werd ich mich mal durchwühlen. Danke sehr.

So ich hab folgendes Datenblatt
http://www.datasheetcatalog.org/datasheets/228/160402_DS.pdf

Sind die Daten die ich suche, die unter Figure 2. Byte Write und Figure 3. Page Write auf Seite 8 und wenn ja wie muss ich die für das benötigte "zerpflücken"?