Hallo Gemeinde,
wie schon im Titel ersichtlich möchte ich gern mit einem PIC 18f2550 in
einen EEPROM schreiben und auch wieder aus ihm lesen und das über den
I2C Bus
Zu den Daten:
µC PIC: 18f2550
EEPROM: 24AA 1025 I/P
Compiler: C18
Verwendeter Code:
Schreiben:
1 |
|
2 | OpenI2C(MASTER, SLEW_ON);
|
3 | SSPADD = 9;
|
4 | IdleI2C();
|
5 | StartI2C(); //I2C starten
|
6 | WriteI2C(0xA6); //Controllbyte
|
7 | EEAckPolling(0xA6);
|
8 | WriteI2C(0x00) //Highteil der Speicher-Addresse
|
9 | EEAckPolling(0xA6);
|
10 | WriteI2C(0x00) //Lowteil der Speicher-Addresse
|
11 | EEAckPolling(0xA6);
|
12 | WriteI2C(0x05)) //Daten
|
13 | EEAckPolling(0xA6);
|
14 | StopI2C(); //I2C Stop
|
Lesen:
1 | OpenI2C(MASTER, SLEW_ON); // Initialize I2C module
|
2 | SSPADD = 9;
|
3 | IdleI2C();
|
4 | StartI2C(); //I2C starten
|
5 | WriteI2C(0xA6); //Controllbyte
|
6 | EEAckPolling(0xA6);
|
7 | WriteI2C(0x00; //Highteil der Speicher-Addresse
|
8 | EEAckPolling(0xA6);
|
9 | WriteI2C(0x00); //Lowteil der Speicher-Addresse
|
10 | EEAckPolling(0xA6);
|
11 | IdleI2C();
|
12 | StartI2C(); //I2C starten
|
13 | ToSendDataBuffer[1] = ReadI2C(); //Daten auslesen
|
14 | EEAckPolling(0xA6);
|
15 | StopI2C(); //I2C Stop
|
Das Problem ist, dass ich immer 0xff im ToSendDataBuffer[1] stehen habe.
Ich verstehe auch das diagramm für das lesen nicht ganz da nach dem
zweiten StartI2C noch ein Controllbyte eingezeichnet ist dass ich aber
werder senden noch empfangen kann ohne dass sich der µc aufhängt.
Ich kenne auch die I2C EEPROM Funktionen aus der C18 lib nur sind die
nicht für EEPROMs mit mehr als einem Adressbyte.
Das WriteProtectionPin ist richtig angeschlossen und die beiden
Adresspins sind auf + angeschlossen.
Ich bin um jede Hilfe dankbar.