PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 24c16 mit avr16 daten reinschreiben



pebisoft
02.11.2004, 21:04
ich möchte einen 24c16 beschreiben mit daten. bis jetzt hat es nicht geklappt. es wurde geschrieben: "der bus mus auf 5 volt gezogen werden". ist das der anschluss "scl und sda mit 10 kiloohmf auf 5 volt setzen"?
mfg pebisoft

x-ryder
02.11.2004, 21:17
jepp in was proggst du?

pebisoft
03.11.2004, 17:45
mit dem bascom-compiler-vollversion. in einem tread wurde mir geschrieben, der bus muss auf 5 volt gezogen . nach einer anfrage habe ich darauf keine antwort mehr bekommen was das heisst, "den bus auf 5 volt ziehen". ich hier die frage schon einmal gestellt, aber für den 24c65 i2c-eeprom. schau mal einpaar zeilen zurück.
für eine antwort wäre ich dankbar.
mfg pebisoft

x-ryder
03.11.2004, 17:54
den bus auf 5v ziehen bedeutet das, das du nen widerstand nimmst ca. 4,7 kOhm und dann haste:

5V-----Widerstand---+----SDA (eeprom)
5V-----Widerstand---|--+-SCL (eeprom)
| |
| |
SDA SCL
(jeweils zum Controller)

Verstanden oder willste nen Schaltplan?

EDIT: Scheint so als würde es nicht gehen ich mach nen Plan!

x-ryder
03.11.2004, 18:11
So:

Dino Dieter
03.11.2004, 18:24
Hallo

Ja, so ist es gut.

MFG
Dieter

x-ryder
03.11.2004, 18:27
beitragsschinder

pebisoft
03.11.2004, 19:07
danke für die antwort. werde es morgen ausprobieren, weil ich keine widerstände mehr habe.
mfg pebisoft

pebisoft
04.11.2004, 20:55
der 24c16 funktioniert mit bascom und er obigen schaltung. danke.
jetzt suche ich eine lösung um über die adresshürde von 255 zu kommen.
mfg pebisoft

x-ryder
04.11.2004, 21:03
kannst doch einfach mal word ausprobieren

Dino Dieter
04.11.2004, 21:45
Hallo

Versuch mal das so zu probieren.


'
Eeprom schreiben mit Word Adresse

Dim Adresse As Word

Dim Adresse_high As Byte


Adresse = 1234 'zum testen



Adresse_high = High(adresse) 'die oberen 8 Bit von Adresse speichern
I2cstart 'start condition
I2cwbyte &B1010_0000 'slave address, nur ein Beispiel
I2cwbyte Adresse_high 'high address
I2cwbyte Adresse 'low address, es werden automatisch die unteren 8 Bits genommen
I2cwbyte 44 'value to write
I2cstop 'stop condition
Waitms 10

Do

Loop


MFG
Dieter

pebisoft
04.11.2004, 23:18
hallo, vielen dank. jetzt kann ich endlich das 24c16 eeprom beschreiben und lesen.
mfg pebisoft

pebisoft
04.11.2004, 23:22
ich brauche die adresse nicht aufteilen. wenn ich "i2cwbyte wordadresse" eingebe, funktioniert es.

pebisoft
09.11.2004, 17:12
hallo, wie heisst der i2c-eeprom für 32 oder 64kbyte den ich auf die gleiche weise programmieren kann wie den 24c16.
mfg pebisoft

x-ryder
09.11.2004, 18:28
24c32 und 24c64

Martin

Dino Dieter
09.11.2004, 19:00
Hallo

Dann wohl eher 24C256 Oder 24C512, da 32 KByte bzw 64 KByte gefragt waren.

O:)

MFG
Dieter

pebisoft
10.11.2004, 10:27
den 24c64 kann ich auch programmieren, aber er liest nur kauderwelsch aus. hat das etwas mit der word-daten zu tun, der verschwendet nämlich für ein byte was ich rein schreibe 2 byte.
mfg pebisoft

Dino Dieter
10.11.2004, 12:17
Hallo


ich brauche die adresse nicht aufteilen. wenn ich "i2cwbyte wordadresse" eingebe, funktioniert es.

Anscheinend hast du meinen rat doch nicht befolgt.



'Einstellen des I"C Buses ++++++++++++++++++++++++++++++++++++++++++++++++++ +++
Config Scl = Portd.6 'PIN für I2C Bus
Config Sda = Portd.7


'Definition der Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++ ++
Declare Sub Read_byte(byval Ee_adresse As Byte)
Declare Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte)
Declare Sub Erase_eeprom(byval Ee_adresse As Word )



'Routine zum schreiben von Daten in das EEPROM ++++++++++++++++++++++++++++++++
Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte)
Disable Interrupts
Print Ee_adresse
Temp = High(ee_adresse) 'MSB von ee_adresse speichern
I2cstart 'generate start
I2cwbyte &B10100000 'write addres of24C65
I2cwbyte Temp 'write high adress
I2cwbyte Ee_adresse 'write low adress
I2cwbyte Ee_daten 'write daten
I2cstop 'Stop senden zum schreiben
Enable Interrupts
End Sub

'Routine zum lesen von Daten aus dem EEPROM ++++++++++++++++++++++++++++++++++++
Function Read_byte(byval Ee_adresse As Byte)
Disable Interrupts
Temp = High(ee_adresse) 'MSB von ee_adresse speichern
I2cstart 'generate start
I2cwbyte &B10100000 'write addres of 24C65
I2cwbyte Temp 'write high adress
I2cwbyte Ee_adresse 'write low adress
I2cstart 'generate repeated start
I2cwbyte &B10100001 'write read commando

For C = 0 To 1000
I2crbyte Daten , Ack 'LSB von Spannung einlesen
I2crbyte Temp , Ack 'MSB von Spannung einlesen
Spannung = Temp * 256 'MSB an die richtige Stelle von Spannung setzen
Spannung = Spannung + Daten 'LSB von Spannung dazu und fertig
Print C ; "," ; Spannung 'Ausgeben Speicherstelle, Spannung
Next C
I2cstop
Enable Interrupts
End Function

'Routine zum löschen von Daten in dem EEPROM Dauer ca 5,5 Sek ++++++++++++++++++
Sub Erase_eeprom(byval Ee_adresse As Word )
Disable Interrupts
For B = 0 To 8192 Step 64 '128 Page a 64 Byte löschen
Temp = High(b) 'MSB von B speichern
I2cstart 'generate start
I2cwbyte &B10100000 'write addres of24C65
I2cwbyte Temp 'write high adress
I2cwbyte B 'write low adress

For C = 1 To 64 'Page weise beschreiben mit 255
I2cwbyte 255
Next C

I2cstop 'Stop senden zum schreiben
Waitms 40 '8 * 5 ms warten zum schreiben der Pages
Next B
Enable Interrupts
End Sub



I2cwbyte Ee_adresse 'write low adress

EE-adresse ist zwar als WORD definiert, beim schreiben werden aber nur die unteren 8 Bits gesendet, da der Befehl I2Cwbyte heißt. Daher der Umweg mit Temp = High(ee_adresse) .

In der Funktion Read_byte werden jetzt 1000 * 2 bytes ausgelsen, zusammen gesetzt in eine Word Variable und dann ausgegeben.

Erase_eeprom schreibt das ganze EEPROM mit 255 voll und zwar wird immer erst eine ganze Page geschrieben. Das geht dann schneller.

Hoffe der Code hilt dir etwas.

MFG
Dieter

pebisoft
10.11.2004, 19:06
hallo, bei read hast du die adresse als bytevarivale, ist das richtig?
mfg pebisoft

10.11.2004, 19:14
Hallo

Ja, das ist ein klarer Fehler , sollte schon word sein.

MFG
Dieter

pebisoft
11.11.2004, 15:57
hallo, vielen dank. es funktioniert.
mfg pebisoft

edgar
27.11.2004, 12:33
warum kommst du auf die Größe von 64 Bytes pro Page und wieso genau auf Waitms 40 '8 * 5 ms warten

ich möchte auch gleich mehrere bytes auf einmal schreiben aber irgendwie steht dann beim auslesen nur müll drin vielleicht kann ja jemand einen fehler finden.
gruß werner...

---------
Epromoffset = &b00000001
Epromadresse = 0
I2cstart
I2cwbyte &HA0
I2cwbyte Epromoffset
I2cwbyte Epromadresse
For J = 1 To 24
Epromchar = Mid(epromstring24 , J , 1)
Eprombyte = Asc(epromchar)
I2cwbyte Eprombyte
Waitms 20
Next I
I2cstop
Waitms 5
-------------
eigentlich sollte doch dann an der adresse 11110001 00000000 der anfang der daten sein

Dino Dieter
27.11.2004, 15:31
Hallo


warum kommst du auf die Größe von 64 Bytes pro Page und wieso genau auf Waitms 40 '8 * 5 ms warten

Ich habe ein 24C65 im Einsatz. Dieses unterstützt das sogenannte Page Write. Eine Page hat die Größe von 8 Bytes. Intern hat das EEPROM einen Zwischenspeicher von 8 Pages, bevor gespeichert werden muß. Für eine Page brauchst es 5 ms zum speichern.

Die Anzahl der Pages ist von Chip zu Chip unterschiedlich

Daher 8 Pages * 5ms = 40 ms für 64 Bytes.

MFG
Dieter