Forum: Mikrocontroller und Digitale Elektronik STM8S DISCOVERY I2C Prob


von Ass Brown Ochsenknecht (Gast)


Lesenswert?

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.

von Heinz (Gast)


Lesenswert?

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.

von Ass Brown Ochsenknecht (Gast)


Lesenswert?

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.

von Oliver J. (skriptkiddy)


Lesenswert?

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);

von Ass Brown Ochsenknecht (Gast)


Lesenswert?

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. :-(

von Bastler (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.