Tja... ich versuche den MPC23017 per I2C an einem ATmega328 zu betreiben.
Leider komm ich nun seit 2 Tagen nichtmehr vorwärts.
Schaltungstechnisch scheint soweit alles ok.
Verwenden möchte ich das Hardware-TWI/I2C an C4/C5.
Die 3 Adresspinns vom MCP liegen an Masse und SCL/SDA sind jeweils mit 1k-Pullup auf VCC gelegt.
Den Resetpin hab ich vorbeugend mit einem kleinen 104 kondensator belegt, damit er bei jedem Start für einmaligen Reset sorgt.
5V und GND kommen auch am MCP an.
Das SCL-Signal scheint korrekt am Pin 12 des MCP anzukommen.
Allerdings rührt sich auf SDA garnichts... der scheint dauerhaft auf Low zu bleiben
Kann also nurnoch an einem Falschen Testprogramm liegen ??
Könnte da bitte mal jemand drüber schauen ob das soweit funktionieren sollte ?
Falls nicht muss ich mich wohl um einen Neuen Portexpander bemühen.
EDIT: einige kleine Änderungen... zumindest sind die Datenpakete auf SDA nun vorhanden...Code:$regfile = "M328pdef.dat" $crystal = 16000000 $baud = 38400 Const Mcp_write = &B01000000 Const Mcp_read = &B01000001 $lib "i2c_twi.lbx" 'Hardware I2C/TWI auf Pins C4/C5 Config Scl = Portc.5 Config Sda = Portc.4 Config Twi = 400000 I2cinit ''''''''''''''''' 'Initialisierung ''''''''''''''''' I2cstart I2cwbyte Mcp_write ' IODIRA I2cwbyte &H00 'Als Ausgänge definieren I2cwbyte &B00000000 I2cstop Waitus 25 I2cstart I2cwbyte Mcp_write ' IODIRB I2cwbyte &H10 'Als Ausgänge definieren I2cwbyte &B00000000 I2cstop Waitus 25 ''''''''''''''''''' 'Ausgänge schalten ''''''''''''''''''' Do I2cstart I2cwbyte Mcp_write I2cwbyte &H1A ' alle B-Ausgänge auf 0 I2cwbyte &B00000000 I2cstop Waitus 25 I2cstart I2cwbyte Mcp_write I2cwbyte &H1A I2cwbyte &B11111111 'Alle B-Ausgänge auf 1 I2cstop Waitus 25 Loop End
der MCP scheint allerdings nicht reagieren zu wollen.
Evtl. ist die Adresse oder das Ansprechen der Register falsch ??
Das Datenblatt verwirrt mich eh unheimlich.
Falls jemand Tips hätte wäre ich sehr dankbar!
Lesezeichen