Zitat Zitat von modtronic Beitrag anzeigen
Mahlzeit

ich habe mittels eines AT Mega 128 und dem MCP 23017 eine Art SPS gebaut.
ich betreibe den MCP am I2C Bus und nutze ihn nur für die Ausgänge.
Hierfür habe ich eine Platine gebaut, die je einen MCP aufnimmt, dieser treibt ULN 2804 Treiber und so habe ich pro Platine 16 Ausgänge, und kann somit 8 Platinen davon stecken.

Die Adressen werden Hardwaretechnisch mittels Lötbrücken gesetzt.

nun zu meiner Frage.
Laut Unterlagen und Internet soll der MCP über die Adressen 0x20 -0x27 angesprochen werden können, was aber nicht klappt.
ich habe nach mehreren versuchen ihn zum Leben bringen können, nutze die register 0x14 und 0x15 für Ausgänge.
bei mir geht das aber nur über die Adressen 0x40, 0x42, 0x44...bis 0x54...im Klartext 0x20 entspricht 0x40, 0x21 entspricht 0x42 und so weiter.
Hier wäre meine Frage warum?

Ein weiteres Problem ist, ich kann ihn bis zur 5 Adresse, also ox40 bis 0x48 Problemlos ansprechen, 0x50, 0x52 und 0x54 verweigert er seinen Dienst, hat hier jemand eine Erklärung. Habe auch 0x26 mal versucht geht leider auch nicht.

Somit kann ich derzeit nur 5 Karten verwenden.
das Problem ist auch erst heute aufgetreten weil ich eine 6.te Karte nicht mehr ansprechen kann.
Die Softwareroutine ist immer das gleiche, im programmkopf setze ich die Register auf Ausgang was ja auch bei den anderen Problemlos geht und im Programm werden diese angesprochen, ebend bis zur jenen Adresse die nicht mehr geht.

Gibt es hier einen Trick oder muss ich das was beachten, oder verschieben sich hier evlt Adressen ?

Danke und Gruss
Patrick
vermutlich sind 0x20 -0x27 die 7-bit-Adressen, während die doppelt so hohen Werte in 2er-Schritten die 8-bit-Adressschreibweisen sind.
Arduino gpp und gcc/gpp auf Raspi nutzen die 7-bit-Schreibweise, bei dir sind es vermutlich die anderen.
Ein i2c-Scanner kann dir die aktuellen mcp-Adressen für deine Software auslesen.