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.
Ich meine bei Renesas mal einen Beispielcode gesehen zu haben.
Hallo, 0xA6 lässt sich nicht in 7 bit darstellen. Oder ist das R/W-bit da schon enthalten ? Gruß, Martin
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
Hallo Henry, nein, ich habe kein Beispiel für Deinen Prozessor. Ich habe I2C auf dem LPC2148 benutzt. Gruß, Martin
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
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...
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.