Forum: Mikrocontroller und Digitale Elektronik Ansteuerung EEPROM über I2C von M16C62P


von Henry (Gast)


Lesenswert?

Hallo Leute,

Ich versuche die I2C-Schnittstelle meinem M16C62P-uController zu 
verwenden,
um mit einem ATMEL EEPROM zu kommunizieren. Mit dem Oszilloskop sehe 
ich, dass ich die Start Kondition+ Device Adresse setze, aber ich kriege 
keine ACK vom EEPROM!!!
ich vermute, dass es mit dem 7 Adressing Mode bzw. 8 Adressing Mode was 
zu tun hat oder dass ich die I2C Schnittstelle falsch bediene
kennt sich jemanden damit aus?
ps. die von mir verwendete Adresse für die EEPROM ist 0xA6

mfg

H.

von Martin (Gast)


Lesenswert?

Ich meine bei Renesas mal einen Beispielcode gesehen zu haben.

von Martin (Gast)


Lesenswert?

Hallo,

0xA6 lässt sich nicht in 7 bit darstellen.
Oder ist das R/W-bit da schon enthalten ?

Gruß,
Martin

von Henry (Gast)


Lesenswert?

Hallo Martin,

Spezielle für den M16C62P habe ich kein Beispiel-code gefunden .
Stimmt in der Adresse ist auch der R/W Bit mitenthalten.
hast du vielleicht ein Beispiel für den 62P?

mfg
Henry

von Martin (Gast)


Lesenswert?

Hallo Henry,

nein, ich habe kein Beispiel für Deinen Prozessor.
Ich habe I2C auf dem LPC2148 benutzt.

Gruß,
Martin

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe for ca. 3 Jahren ein 24C32 erfolgreich mit dem M16C62 
angesteuert. Leider ist die Initialisierung des I2C recht knifflig und 
von Renesas auch nur unzureichend dokumentiert. Anbei einige Code 
Fragmente, die aus einem grösseren Projekt stammen. Kompilieren dürfte 
sie nicht für sich allein, da fehlen einige Hilfsroutinen, aber mal 
reinschauen dürfte nicht schaden. Bitte nicht an der Formatierung 
stören, die kommt von unserem CASE-Tool.

Gruss
Mike

von Henry (Gast)


Lesenswert?

Danke Mike, Ich werde es versuchen.

mfg
Henry

von crazy horse (Gast)


Lesenswert?

ich bin damals auch gescheitert, und aus Zeitgründen auf Software-I2C 
umgestiegen.
Das hat prima und schnell funktioniert, bei Bedarf kann ich dir ein paar 
Zeilen hinschmeissen...

von Mike (Gast)


Lesenswert?

@Henry

Einige kleine Erlüterungen noch zum Code:

Mit i2c_init wird der Bus nach dem Reset des Controllers initialisiert.
i2c_reset erzeugt ein Bus-reset; nützlich bei Busfehlern

i2c_send und i2c_receive senden und empfangen Daten (jeweils vom Master 
zum Slave gesehen). i2c_receive erlaubt das Senden einiger Bytes, z.B 
Adressinformation, anschliessend weren die Daten vom addressierten 
baustein gelesen. Beide Funktionen stossen lediglich die Kommunikation 
an und kehren schnellstmöglich wieder zurück; der Rest der Busaktivit¨t 
wird in Interrupts erledigt. So kann sich der Prozessor während einer 
Busübertragung noch um andere Dinge kümmern.

Mit i2c_wait kann mann warten bis der Bus wieder frei ist (dann geht die 
globale Variable i2c_status auf I2C_IDLE).

Die Schreibfunktionen existieren in einer blockierenden und einer 
nicht-blockierenden Form. Erstere wrtet, bis das EEPROM beschrieben ist 
und kehrt dann erst zurück, die zweite sendet nur den Schreibbefehl, der 
Anwender muss dann selbst prüfen, wann das EEPROM wieder ansprechbar 
ist. Die Bezeichnung ...Async ist etwas verwirrend, war aber in der 
Projektplanung so vorgegeben :-;

Einige globle Variablen und Routinen, wie die Timerroutinen sind in 
einem anderen Softwaremodul definiert, es sollte aber klar sein, wozu 
sie dienen.

Ich erinnere mich noch dunkel, dass die Application Notes für den M16C 
für eine veraltete Architektur geschrieben waren, schau mal bei den 
Notes für den M32C nach, der hat das gleiche I2C-Interface wie der 
M16C62P. Die Dokumentation ist meiner Meinung nach die grösste Schwäche 
der Renesas-Teile, auch wenn Glyn versucht hat, daran zu arbeiten.

Ich hoffe, Dir ein wenig geholfen zu haben.


Mike

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.