PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : i2c eeprom 24c65 am atmega betreiben mit bascom



pebisoft
20.10.2004, 08:20
hallo, es ist ein graus. was ich mit der c-control in handumdrehen machen kann, ein 24c65 auf einem steckbrett mit den anschüssen scl und sda betreiben (daten speichern) ist mit dem atmega ein graus. ich benutze das demo von einem 2404 i2c eeprom von bascom (adresse natürlich angepasst nach den anschlüssen des 24c65) es geht aber nicht.
was mache ich falsch? wer kann sich hiermit ausführlich beschäftigen
mfg pebisoft

pebisoft
20.10.2004, 21:52
hallo, ich suche eine lösung wie ich in einem eeprom (i2c) 24c65 daten speichern kann mit bascom. das inetressante ist ,das eeprom fast 32kbyte.bei einer c-control ist das kein thema. ich möchte es aber mit meinem atmega16 durchführen. da der atmega einen sehr geringen eeprom-speicher hat (512 - 2000 byte) ist dieser eeprom 24c65 mit 32kbyte doch eine hervorrangende sache.
mfg pebisoft

Michael
21.10.2004, 06:48
Hallo pebisoft,
im Samples-Verzeichnis von Bascom findest du die Datei I2c.bas.
Gruß, Michael

pebisoft
21.10.2004, 18:29
das beispiel geht nicht, habe die adresse vom eeprom 24c04 eingegeben usw. kriege immer den wert 255.
mfg pebisoft

Michael
21.10.2004, 20:57
Hallo pebisoft,


das beispiel geht nicht

Etwas voreilig.
Hast du denn auch die Adresse an die Pins angelegt?

kriege immer den wert 255
Weil der EEprom noch nicht beschrieben ist? Eine EEprom-Zelle ist unbeschrieben immer 1 (siehe Fuses beim Atmel ;))
Gruß, Michael

pebisoft
21.10.2004, 23:04
habe an den eeprom 24c04 1x vcc (a0) und 2x gnd (a1 und a2), ergibt die adresse zum schreiben 162 und zum lesen 163
mfg pebisoft

Michael
22.10.2004, 06:50
Hallo pebisoft,
die Adresse scheint in Ordnung, kannst du nicht mal deinen Code posten?
Gruß, Michael

pebisoft
22.10.2004, 09:12
hallo muss das vielleicht über den pcf 8574 laufen oder braucht man den hier nicht, weil das ein i2c eeprom ist.
mfg pebisoft

pebisoft
22.10.2004, 12:17
halo, im anhna gist das eeprom 24c04 programm

pebisoft
22.10.2004, 12:25
hallo, ein absatz vorher ist das programm.
mfg pebisoft

Michael
22.10.2004, 22:48
Hallo pebisoft,
ich häng dir mal dein Programm, das du eigentlich nur aus dem Samples-Ordner kopiert hast, unten an. Ich habe allerdings ein paar Änderungen vorgenommen, um es auf meine Hardware anzupassen (Chip/Quarz/LCD/Ports). Im Prinzip bleibt es aber. Ich habe das Programm mit einem 24c16 getestet, weil ich grade keinen anderen da habe, und es funktioniert.
Prüfe bitte deine Hardware nach. Pullups werden z.B. gerne vergessen.
Und lies dir den letzten Absatz im Programm durch. Du willst ja mehr als 256 Byte schreiben.
Gruß, Michael



$regfile = "m8def.dat"
$crystal = 16000000

Config Portd = Output
Config Sda = Portc.4
Config Scl = Portc.5
'Lcd -pins Sind unter Options-Compiler-LCD eingetragen
Initlcd
Cls
Lcd "EE - Test"
Waitms 500

Declare Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)

Const Addressw = 162 'slave write address
Const Addressr = 163 'slave read address
Dim I As Byte
Dim B1 As Byte , Adres As Byte , Value As Byte 'dim byte



'Hier werden 3 Adressen beschrieben. Zum Test, obs geklappt hat,
'die 3 Zeilen einfach ausklammern und das Programm nochmal brennen
Call Write_eeprom(1 , 15)
Call Write_eeprom(2 , 75)
Call Write_eeprom(3 , 222)


Cls
Locate 1 , 1
For I = 1 To 3

Call Read_eeprom(i , Value)

Lcd I ; "=" ; Value ; " ";

Next
End


'sample of writing a byte to EEPROM AT2404
Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte Adres 'asdress of EEPROM
I2cwbyte Value 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds
End Sub


'sample of reading a byte from EEPROM AT2404
Sub Read_eeprom(byval Adres As Byte , Value As Byte)
I2cstart 'generate start
I2cwbyte Addressw 'slave adsress
I2cwbyte Adres 'address of EEPROM
I2cstart 'repeated start
I2cwbyte Addressr 'slave address (read)
I2crbyte Value , Nack 'read byte
I2cstop 'generate stop
End Sub


' when you want to control a chip with a larger memory like the 24c64 it requires an additional byte
' to be sent (consult the datasheet):
' Wires from the I2C address that are not connected will default to 0 in most cases!

' I2cstart 'start condition
' I2cwbyte &B1010_0000 'slave address
' I2cwbyte H 'high address
' I2cwbyte L 'low address
' I2cwbyte Value 'value to write
' I2cstop 'stop condition
' Waitms 10

'End

pebisoft
23.10.2004, 00:10
hallo, michael es geht nicht. ich werd noch verrückt !
ich habe den atmega16 mit 8 mhz (eingestellt) und es funktioniert nicht.
ich kriege nach ca 1 minute im display "1=255,2=255,3=255".
ich habe "m16def" und crysel=8000000. pinout(scl und sda) auf b0 und b1 gelegt. könntest du den test einmal mit den 24c04 oder 24c256 durchführen, ich werde dir gerne die kosten für die gekauften chips ersetzen. ich glaube , du kannst mir weiterhelfen. versuch es einmal.
von der c-control I kann ich den chip auf dem steckbrett laden und abfragen über i2c mit der adresse 162 und 163.
mfg pebisoft

Michael
23.10.2004, 00:42
Hallo pebisoft,
also ich hab es jetzt extra nochmal auf scl=Portb.0 und sda=Portb.1 umgesteckt und das Programm angepaßt und es funktioniert.
Was mich allerding stutzig macht:


ich kriege nach ca 1 minute im display "1=255,2=255,3=255".

nach 1 Minute erst???
Das ist aber seltsam.
Allerdings bekomme ich bei falscher Adresseinstellung oder bei fehlendem EEprom auch 3 mal 255 angezeigt. Schau also nochmal nach der Hardware.
Gruß, Michael

pebisoft
23.10.2004, 11:28
hallo, es läuft nicht. werde mir jetzt den 24c16 kaufen und dann noch einmal probieren. wenn ich die beiden steuerleitungen an den c-control schliesse, kann ich unter der adresse 162/163 schreiben und lesen.
meine pinbelegung des 24c65 : a0,vcc an +5volt, a1,a2,gnd an masse
scl, sda an die angegebenen pins. ein pin ist frei ,der wp.
im anhang mein programm.
mfg pebisoft

Michael
23.10.2004, 16:30
Hallo pebisoft,
ich kann mir nur noch einen Hardware-Fehler als Ursache denken.
scl und sca an den richtigen Pins? (Beim Mega16 DIP sind das Pin5 und 6)
Da Port B5 (Pin Nr6) gleichzeitig vom Programmierinterface benutzt wird, solltest du das vielleicht mal abklemmen. Bei einem Quick&Dirty-Interface gibt es da manchmal tolle Effekte.
Pullups (~10k) angeschlossen?
WP vom 24c65 könntest du auf Masse legen...poste doch einfach mal deine Schaltung.
Gruß, Michael

PS: Wenn der 24c65 an der C-Control funzt, geht er _garantiert_ auch mit dem AVR.

pebisoft
23.10.2004, 23:57
hallo, du saget pullups, wo soll ich die 10 kybte beim mege16 anschliessen, oder beim 24c65.
mfg pebisoft

Michael
24.10.2004, 00:03
Hallo pebisoft,


wo soll ich die 10 kybte beim mege16 anschliessen, oder beim 24c65

egal wo, Hauptsache, der Bus wird auf +5V gezogen.
Hast du das ISP-Interface zum Testen entfernt?
Und: Kannst du nicht mal deine Schaltung posten?
Gruß, Michael

schnuppel
24.10.2004, 01:00
Hallo,


hallo, es läuft nicht. werde mir jetzt den 24c16 kaufen und dann noch einmal probieren. wenn ich die beiden steuerleitungen an den c-control schliesse, kann ich unter der adresse 162/163 schreiben und lesen.
meine pinbelegung des 24c65 : a0,vcc an +5volt, a1,a2,gnd an masse
scl, sda an die angegebenen pins. ein pin ist frei ,der wp.
im anhang mein programm.
mfg pebisoft

ich hatte auch große Probleme einen 24C16 anzusprechen.
Es hat alles ewig lange gedauert, das Schreiben und Lesen.
Zwischen 2 Anzeigen beim Lesen vergingen rund 20 Sekunden und der gelesene Wert war immer 255.
Geholfen hat bei mir für SLC und SDA andere Pins zu nehmen.
Ich hatte zuerst portc.5 für SCL und portc.4 für SDA.
(ist im Datenblatt des mega8 in der Pinbelegung so vorgegegeben, Hardware?)
Habe dann mal portb.1 und portb.0 genommen und alle geht.
Warum weiß ich aber nun auch nicht.
Pin WP muß auf GND, zumindest beim 24c16, sonst ist eine Hälfte schreibgeschützt.
Ich versuche mal das Bascom Programm hier zu posten,
hoffentlich geht das hier.



' Test den 24C16 über I2C anzusprechen

$crystal = 8000000
$regfile = "m8def.dat"
$baud = 19200

Config Scl = Portb.1
Config Sda = Portb.0

Const Addressw = 160 'write addresse
Const Addressr = 161 'read addresse
Dim I As Byte
Dim Adres As Byte
Dim Wert As Byte

' zum Test Adressen 1 bis 3 schreiben
Print "3 Werte Schreiben"
For I = 1 To 3
Print I;
Input " Gib Wert ein: " , Wert
Adres = I
' Wert = 100 + I
Gosub Write_eeprom
Next
Print

Print "Lesen "
Print

Do
For I = 1 To 3
Adres = I
Gosub Read_eeprom
Print I ; "=" ; Wert ; " ";
Next
Print
Wait 1
Loop
End

'sample of writing a byte to EEPROM AT2404
Write_eeprom:
I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte Adres 'asdress of EEPROM
I2cwbyte Wert 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds
Return


'sample of reading a byte from EEPROM AT2404
Read_eeprom:
I2cstart 'generate start
I2cwbyte Addressw 'slave adsress
I2cwbyte Adres 'address of EEPROM
I2cstart 'repeated start
I2cwbyte Addressr 'slave address (read)
I2crbyte Wert , Nack 'read byte
I2cstop 'generate stop
Return


Vielleicht hilft es ja.

pebisoft
24.10.2004, 14:23
hallo schnuppel, habe dein programm genommen mit "m16def" und adresse 162 und 163. wenn ich den isp-stecker herausziehe ist er sofort da mit der meldung =255. er speichert nichts.
im anhang ist ein schaltplan.
mfg pebisoft

schnuppel
24.10.2004, 22:05
Hallo,


hallo schnuppel, habe dein programm genommen mit "m16def" und adresse 162 und 163. wenn ich den isp-stecker herausziehe ist er sofort da mit der meldung =255. er speichert nichts.
im anhang ist ein schaltplan.
mfg pebisoft

tut mir leid, daß es nicht klappt.
Laut Datenblatt stimmt die Adresse, in den "Optionen" alles richtig eingetragen?
Bei mir hatte ich öfters, daß nach erfolgten Eintragungen in den Optionen und nachfolgender Kontrolle (nach Programmierung) doch andere Werte drin standen.
Sicherheitsahlber alles was geht im Programm nochmal definieren.
Was sagt er denn wenn du den ISP Stecker drin läßt?
Wenn es lange dauert, so 20 Sekunden und länger, dann findet die I2C Routine keine Antwort, d.h. es ist wohl ein Hardwarefehler.
Schaltung checken, zeige doch mal den Rest der Schaltung!?

Hast du mal für SDA und SCL andere Pins probiert?
Natürlich dann auch in der Hardware ändern!?
Ich habe leider keinen m16 hier zum Testen.

Ich hatte mal das Problem, daß der Mega8 (kann auch 4433 gewesen sein) nicht mitspielte bei RC5 senden über IR LED.
Habe dann in der BASCOm Mailingliste gefragt, daraufhin sendete mir
Marc Albers, der Macher von BASCOM, ein neues Datenfile,
daraufhin lief alles.
Wollte nur sagen, liegt nicht nur bei uns, wenn was nicht klappt.
Aber ich denke, bei dir ist es Hardwarefehler, der 24c65 kann ja auch defekt sein.
Hast du mit 24C65 oder mit 24C16 getestet?
Beim 24C16 sind A0, A1, A2 irrelevant, weiß nicht ob sie irgendwo
angeschlossen sein müssen, meine liegen auf GND.
Gib nicht auf, klappt schon irgendwann. :-)

mfG schnuppel

24.10.2004, 22:18
Hallo,

wie heißen die Leute die auf sich selber zitieren? :-)
Desterwegen zitiere ich nochmal dich.


hallo schnuppel, habe dein programm genommen mit "m16def" und adresse 162 und 163. wenn ich den isp-stecker herausziehe ist er sofort da mit der meldung =255. er speichert nichts.
im anhang ist ein schaltplan.
mfg pebisoft

habe grad mal den ganzen Tread (schreibt sich das so?) gelesen.
Also, wenn es auf der C-Control schon gelaufen ist,
dann kann es nur ein Fehler bei dir auf dem anderem Board in der Schaltung sein!
Oder eine Einstellung!

Schecke das noch mal! Wenn Michaels und mein Programm nicht laufen ist wohl bei dir was nicht I.O.

mfG schnuppeline

Michael
24.10.2004, 23:25
Hallo schnuppel,


Beim 24C16 sind A0, A1, A2 irrelevant, weiß nicht ob sie irgendwo
angeschlossen sein müssen, meine liegen auf GND.

lies noch mal das Datenblatt! Hint: Das "A" bei den drei Anschlüssen steht für Adresse!

@pebisoft:


im anhang ist ein schaltplan

Wo? Ich sehe nur die Standardbeschaltung des EEproms.
Du mußt schon etwas mitmachen, wenn man dir helfen soll.
Das Programm, das ich dir gepostet habe (und die Kopie davon, die schnuppel gepostet hat) funktioniert definitiv.
Gruß, Michael

schnuppel
25.10.2004, 00:52
Hallo,


Hallo schnuppel,


Beim 24C16 sind A0, A1, A2 irrelevant, weiß nicht ob sie irgendwo
angeschlossen sein müssen, meine liegen auf GND.

lies noch mal das Datenblatt! Hint: Das "A" bei den drei Anschlüssen steht für Adresse!
@Michael
Entschuldigung, mein Englisch ist, wie schon irgendwo erwähnt, nicht so berühmt, aber was heißt Folgendes?
Ich zitiere mal aus dem Datenblatt des 24C16:


The AT24C16 does not use the device address pins, which limits the number of devices
on a single bus to one. The A0, A1 and A2 pins are no connects.


@pebisoft
Ansonsten hoffe ich, daß es dir irgendwie weiter hilft.
Und wie Michel sagt, eine komplette Schaltung wäre nicht schlecht.
Es hakelt garantiert irgendwo in der Hardware.

mfG Rainer

Michael
25.10.2004, 12:29
Hallo schnuppel,
Asche aufs Haupt, du hast recht.
Ich zitiere aus dem Datenblatt:

For the IS24C16-2 and IS24C16-3, the bits(B2, B1 and B0)
are used for memory page addressing (the IS24C16-2 and
IS24C16-3 are organized as eight blocks of 256 bits).
Der 24C16 wird also als 2kBit-Speicher angesprochen.(256 Adressen * 8Bit) Die 8 Speicherbänke (2kBit*8= 16kBit) werden dann über die Slave- Adresse ausgewählt. Klar, damit spart man sich die 16Bit-Memory-Adresse, kann aber nur 1 Chip (bzw. max 16 KBit) am Bus anbringen.
Hier komme ich aber gleich auf ein Problem, über das pebisoft noch gestolpert sein könnte:
Wenn der 24C16 mit 8 bit Memory plus 3 bit Adresse am Limit der Adressierbarkeit ist, dann muß es für größere Speicher eine 16 bit Adresse geben.
Jetzt kann ich mich auch mal selber zitieren: (22.10.04)

Und lies dir den letzten Absatz im Programm durch. Du willst ja mehr als 256 Byte schreiben.
Gruß, Michael

Im letzten Absatz steht doch tatsächlich:
Zitat:
when you want to control a chip with a larger memory like the 24c64
Zitat Ende.
Dazu der Text aus dem Datenblatt des 24C65:

The next
three bits of the control byte are the device select bits
(A2, A1, A0). They are used by the master device to
select which of the eight devices are to be accessed.
Und siehe da: Die Adressbits werden wieder gebraucht ;)
Und ein Stück weiter steht es:

This indicates to the addressed slave
receiver (24C65) that a byte with a word address will follow
after
Der (an A0-A2 eingestellten) Slave-Adresse folgt also ein Word für die Memory-Adresse. Das gepostete Programm funktioniert also nicht bei Chips größer 24C16. Nach dem Senden der (8bit) Adresse wartet der (24c65)Slave nämlich auf das 2.Byte der Adresse, während der Master seinerseits lesen will. Da der Slave nicht antwortet, liest der Master den High-Pegel des Busses, und der ist 255.
Gruß, Michael

pebisoft
25.10.2004, 19:37
habe den eeprom 24c65 wie im schaltplan angeschlossen. a0 vcc,a1 gnd, a2 gnd, gnd gnd, vcc vcc, wp frei und einmal mit gnd, sda und scl an den controller portb0 und portb1.
2 bilder im anhang. meine 4 boards können nicht defekt sein.
mfg pebisoft

pebisoft
25.10.2004, 20:47
dar eeprom 24c65 hat nur 8kbyte speicher und dar eeprom 24c256 hat 32kbyte.
mfg pebisoft

Michael
25.10.2004, 23:23
Hallo pebisoft,

meine 4 boards können nicht defekt sein.

welchen Teil meines letzten Postrings hast du nicht verstanden? Oder hast du es gar nicht gelesen?

dar eeprom 24c65 hat nur 8kbyte speicher und dar eeprom 24c256 hat 32kbyte.
hmm, du hast es nicht gelesen :(

Gruß, Michael

pebisoft
26.10.2004, 11:34
hallo, habe jetzt den 24c16 angeschlossen mit der adresse 160/161 (e0,e1,e2 an gnd). das gleiche spielchen wie mit 24c65 . geht nicht, zeigt immer 255 an. ich habe den atmega 16 mit internen 8mhz-takt laufen.
vielleicht könnte man mir mal alle fusebits posten. kann sein das das vielleicht daran liegt.
mfg pebisoft

schnuppel
26.10.2004, 11:57
Hallo,

ich kann auf deinem Steckbrett keine Widerstände erkennen.
Hast du denn keine Möglichkeit mal zu prüfen,
ob überhaupt an den Pins was ankommt?

mfG

Michael
26.10.2004, 12:51
Hallo schnuppel,
ja, du könntest recht haben, und bei der C-Control braucht er sie nicht, weil weil schon welche auf dem Board sind. Warum kommt dann aber 255 an?
@ pebisoft:


ich habe den atmega 16 mit internen 8mhz-takt laufen.
vielleicht könnte man mir mal alle fusebits posten. kann sein das das vielleicht daran liegt.

du schweifst ab! Die Fusebits können es wohl nicht sein, weil das LCD was anzeigt. Ergo läuft der Prozessor. Ein kleines Testprogramm, in dem eine Led 1x pro Sekunde leuchtet, hilft bei der Identifizierung des echten Taktes.
Gruß, Michael

pebisoft
26.10.2004, 15:53
also widerstände zwischen scl und sda? vcc 5volt und gnd nehme ich auch ohne widerstände von den vcc und gnd anschluss der c-control und der 24c65 läuft. auch wenn ich die 5volt vom avr nehme und masse zur c-control lege geht es.
mfg pebisoft

Michael
26.10.2004, 23:09
Hallo pebisoft,


5volt und gnd nehme ich auch ohne widerstände


Der I2C/TWI-Bus ist ein open-Collektor-Bus. Ohne Widerstände tut sich da gar nix.
Dazu ein Zitat vom 23.10.:

Pullups (~10k) angeschlossen?
Und noch ein Zitat vom 24.10.:

Hallo pebisoft,
Zitat:

wo soll ich die 10 kybte beim mege16 anschliessen, oder beim 24c65


egal wo, Hauptsache, der Bus wird auf +5V gezogen.

Erklär mir also bitte nicht, daß du nicht weißt, daß der Bus Pullups braucht! Meine Lust, dir zu einem Erfolg zu verhelfen, tendiert gegen Null. Ich stelle wiederholt fest, daß du die Postings, die man dir schreibt, gar nicht liest :(
Gruß, Michael

pebisoft
26.10.2004, 23:28
mach mir einen vorschlag, wo ich in meiner schaltung die 10kbyte widerstände anschliessen soll. danke
mfg pebisoft

pebisoft
26.10.2004, 23:34
ich dachte , das sind die eingebauten pullups im avr16.
mfg pebisoft