MCP23017 - I2C ansprechen ohne Erfolg
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.
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
EDIT: einige kleine Änderungen... zumindest sind die Datenpakete auf SDA nun vorhanden...
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!