Forum: Mikrocontroller und Digitale Elektronik I2C STM32F407IG MCP23016


von Ma B. (drumstick)


Angehängte Dateien:

Lesenswert?

Hallo

Ich versuche ein bestehendes Projekt in Assembler in c umzuschreiben. 
Dies bedeutet alle Funktionen hatten schon mal funktioniert.

Mein uP ist ein STM32F407IG (Master), MCP23016 ist der I2C-Bus Treiber 
(Slave). Mit diesem wird ein 2 Zeilen Textdisplay angesteuert.

Ich verwende das Beispiel DEMO von Keil und bin es am umschreiben / 
adaptieren.

Mein Sende-Befehl:
1
Display_Write(0x1, 0xC0);
2
[c/]
3
0x1 ist das Command Byte Access to GP1 des Treibers
4
0xC0 ist das Data1 Byte, es soll das Display enablen und die Hintergrundbeleuchtung einschalten. D16 u. D17 auf dem Treiber.
5
[c]
6
bool Display_Write (uint8_t reg, uint8_t val)
7
{
8
  uint8_t data[2];
9
  int32_t n;
10
11
  data[0] = reg;
12
  data[1] = val;
13
  n = ptrI2C->SendData(DISPLAY_I2C_ADDR, data, 2, false);
14
  if (n != 2) return false;
15
16
  return true;
17
}

Die Messung der Bussignale findet Ihr im Anhang.

Der Slave sendet kein ACK. Und so wird der Sendevorgang gestoppt, aber 
wieso?

Sind die Signale ungenügend und der Slave kann sie somit nicht 
empfangen?


Vielen Dank und Grüsse!

M.B.

von Ma B. (drumstick)


Lesenswert?

Hab an der HW Änderungen vorgenommen und bekomme jetzt einen schönen 
Rechteck. Es funktioniert aber trotzdem ned.

Danke und Gruss

M.B.

von Max G. (l0wside) Benutzerseite


Lesenswert?

- Wo hast du gemessen? Am Slave?
- Stimmt die Slave-Adresse?

von Ma B. (drumstick)


Lesenswert?

Ja, am Slave!

Ja, gemäss Schema sind A0 bis A2 auf 5V gezogen und somit 1 ergibt 0x07!

Danke und Gruss

von Günter R. (muntablues)


Lesenswert?

Table 1-4 im DB. Da steht wie die Adresse sich zusammen setzt...

von Ma B. (drumstick)


Lesenswert?

Ich komm einfach nicht drauf, wieso der nicht antwortet!?
1
/* Check for error conditions */
2
  if (ptr_i2c->info->error) {
3
    if (ptr_i2c->info->error & I2C_SR1_BERR) {
4
      /* Bus error (misplaced start, stop) */
5
      ret_val = -ARM_I2C_ERROR_BUS_BUSY;
6
    }
7
    else if (ptr_i2c->info->error & I2C_SR1_AF) {
8
      /* Acknowledge failure */
9
      if (!(ptr_i2c->info->flags & FLAG_ADDR_DONE)) {
10
        /* Slave does not respond */            <--- Hier bleibt er beim debuggen haengen
11
        ret_val = -ARM_I2C_ERROR_NO_SLAVE;
12
        /* Generate stop condition */
13
        xfer_pending = false;
14
      }
15
    }
16
    else ret_val = -ARM_I2C_ERROR;
17
  }

von Günter R. (muntablues)


Lesenswert?

Was ist jetzt deine I2C Adresse? Und hast ins Datenblatt geschaut?

von Ma B. (drumstick)


Lesenswert?

Ach mist, die Tabelle hatte ich mir schon angeschaut und dachte zuerst 
wohl Bit 3 bis seien vordefiniert und würden so gesendet zusammen mit 
den 3 usern Bits.

Hätte mir sofort auf dem KO-Bild auffallen sollen!


Vielen Dank für die Hinweise!

Grüsse

M.B.

von Ma B. (drumstick)


Lesenswert?

Bit 3 bis 6

von Günter R. (muntablues)


Lesenswert?

Kann immer mal vorkommen ;-)

von Ma B. (drumstick)


Angehängte Dateien:

Lesenswert?

Jetzt hab ich noch ne Frage, wie man aus dem Ausschnitt des Schemas, 
dass ich oben einmal angehängt hatte, sehen kann, sind beim Display 4 
der 8 Datenbits auf Masse geschlossen. Ich hab also nur noch 4 am 
Treiber. Aus dem Schema des Displays ist zu entnehmen, dass zum Beispiel 
Zeichen 5 der 2. Zeile hat die Adresse 0xC4. Muss ich die jetzt einfach 
zusammen setzten? 1. Mal gebe ich C mit und beim 2. Mal die 4.?

Andere Frage:

E = Enable = 1!
RS = Reset?? = 0 ??
R/W_nicht = muss 0 sein zum Schreiben?

Ist meine Betrachtungsweise korrekt?

Vielen Dank und Grüsse!

M.B.

von Ma B. (drumstick)


Lesenswert?

Kennt sich jemand aus mit der Ansteuerung solcher Displays?

Display: MC1602X-SYL

Grüsse

M.B.

von soldes bottes fourrées (Gast)


Lesenswert?

Great Information sharing .. I am very pleased to read this write-up .. 
thanks for supplying us go by way of information.Fantastic great. I 
recognize this publish.
soldes bottes fourrées http://soldes-bottes-fourrees.3xin0.com

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.