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.