Hat von Euch einer einen funktionierenden STM8S DISCOVERY Codeschipsel für ein I2C 24C16 EEprom oder irgendwas anderes? Ich bekomme seit 2 Tagen die I2C Schnittstelle mit der ST-Library nicht zum laufen...Hardware ist richtig angeschlossen. Bei jedem Lesevorgang wird mir die Adresse vom Chip zurückgegeben. Einfach einen funktionierenden Code posten, dann wäre mir schon sehr geholfen.
Ass Brown Ochsenknecht schrieb: > Einfach einen funktionierenden Code posten, dann wäre mir schon sehr > geholfen. Poste mal deinen Code, dann kann dir vlt. geholfen werden.
Hier ist mal das einfachste, das geht. Den Wert vom 24c16 an der aktuellen Adresse lesen, wie es im Datenblatt steht.
1 | #define I2C_DIRECTION_RX 1 |
2 | |
3 | uint8_t temp; |
4 | |
5 | // Hardware I2C konfig. |
6 | I2C_DeInit(); |
7 | I2C_Init(100000, 0xFF, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16); |
8 | I2C_Cmd (ENABLE); |
9 | |
10 | //Lesevorgang Byte von aktueller Adresse |
11 | I2C_GenerateSTART(ENABLE); |
12 | |
13 | I2C_Send7bitAddress(0xa0, I2C_DIRECTION_RX); |
14 | |
15 | I2C_GenerateSTOP(ENABLE); |
16 | |
17 | temp = I2C_ReceiveData(); |
In 'temp' steht anschließend die Adresse (0xa0 + 0x01 =) 0xa1 und nicht der Wert vom Eeprom. Verzögerungen zwischen den einzelnen Befehlen oder ein 'temp = I2C_ReceiveData();' vor dem STOP ändern auch nichts.
Was soll es bringen ein stop zu generieren, bevor du etwas empfängst? Versuchs mal so rum:
1 | temp = I2C_ReceiveData(); |
2 | I2C_GenerateSTOP(ENABLE); |
Danke, das habe ich schon gemacht, hört sich ja auch logisch an. "I2C_ReceiveData()" ließt den Buffer aus, sollte also egal sein. Dein Tipp hat auch keine Auswirkungen, es kommt wieder die Adresse zurück. :-(
bei ST kann man doch problemlos die Lib herunterladen. Da sind zu jeder Peripherie 3-4 Beispiele dabei. Hilft oft weiter...
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.