Forum: Mikrocontroller und Digitale Elektronik Mehrere I/O Expansions an einer MCU


von Nino K. (lnino)


Lesenswert?

Hi an alle.

Ich kann ja einen MCU z.B.: atmega168 eine I/O Expansion anschließen um 
weitere 16 Ports zur Verfügung zu haben.

Kann ich auch mehrere I/O Expansions an einen MCU hängen, oder an eine 
I/O Expansion noch eine I/O Expansion.

Mir gehen bei meinem Projekt nämlich langsam die Ports aus und das trotz 
I/O Expansion. :-)

Vielen Dank.

von Programist (Gast)


Lesenswert?

Ja, das müsste gehen, weiss aber nicht wie genau.

von Mani (Gast)


Lesenswert?

Bei I2C kannst Du normalerweise mindestens 7 und bei SPI "beliebig" 
viele I/O-Expander dranhängen. Die gibts auch für LEDs u.ä. wo teilweise 
Tastverhältnisse usw. eingestellt werden kann.
Schau mal bei Reichelt, RS oder ähnlichem...

Grüße
Mani

von Frage (Gast)


Lesenswert?

Mußst du die Datenrichtung umschalten können oder brauchst du feste 
Eingänge bzw. fest Ausgänge? Wie schnell sollen die steuerbar sein, 
wieviele brauchst du insgesamt etwa?

von Justus S. (jussa)


Lesenswert?

irgendwann wird es einfacher, gleich ganze Slave-µCs anzuhängen ;c)

von Peter D. (peda)


Lesenswert?

El Nino schrieb:
> Kann ich auch mehrere I/O Expansions an einen MCU hängen, oder an eine
> I/O Expansion noch eine I/O Expansion.

Die sind einfach kaskadierbar.
Hier mal ein Layout mit 21 Stück 74HC595:

Beitrag "Re: Programmer mkII gibt auf"

Ne schöne GND-Plane und jedem IC seine 100nf-Pille.


Peter

von Tip (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Die sind einfach kaskadierbar.
> Hier mal ein Layout mit 21 Stück 74HC595:

Da muß sich El Niño mal äußern, ob es im nun an Eingängen oder an 
Ausgängen mangelt und wie schnell er drauf zugreifen muß.

von Nino K. (lnino)


Lesenswert?

Danke für die Antworten.

Ich brauche zu 90% Ausgänge. Eingänge nur ein paar. 3 LEDs und 1 Servo.

Ich habe über Reichelt mir folgenden I/O Expander bestellt.
Mit dem sollte es gehen, oder?

http://www.reichelt.de/ICs-M-MN-/MCP-23016-I-SP/index.html?;ACTION=3;LA=5000;GROUP=A217;GROUPID=2914;ARTICLE=89338;START=0;SORT=artnr;OFFSET=16;SID=10TaM8qH8AAAIAABsUkGE60198dd367ec9d35847442490d2bdd51

Und wo schließe ich den an dem MCU an?

Und wenn ich mehrere Expander anschließen möchte?
Wo schließe ich dann einen 2ten und 3ten Expander an? Am MCU oder 
Expander hinter Expander?

Schnelle Reaktionszeiten sind für mein Vorhaben keine notwendig.

Mit den Slaves kenne ich mich leider noch weniger aus. :-)

von Tip (Gast)


Lesenswert?

Alle MCP23016 an SCL und SDA (TWI/I2C). 74HC595 würde man z.B. alle 
hintereinander kaskadiert an SCK und MOSI (SPI) anschließen.

von Nino K. (lnino)


Lesenswert?

Tip schrieb:
> Alle MCP23016 an SCL und SDA (TWI/I2C). 74HC595 würde man z.B. alle
>
> hintereinander kaskadiert an SCK und MOSI (SPI) anschließen.

Bedeutet das, dass ich einen MCP23016 mit einem Pin auf SCL und dem 
anderen auf SDA hänge?

Wenn ich dann mehrere MCP23016 habe, dann muss ich diese ebenso auf SCL 
und SDA hängen?

Oder meintest du, dass man nur 2 MCP23016 anschließen kann und damit 
jeweils einen an SCL und einen an SDA?

Und wo muss ich am MCP23016 anschließen? Auch an SCL und SDA?

von Peter D. (peda)


Lesenswert?

El Nino schrieb:
> Ich habe über Reichelt mir folgenden I/O Expander bestellt.
> Mit dem sollte es gehen, oder?
>
> http://www.reichelt.de/ICs-M-MN-/MCP-23016-I-SP/in...
>
> Und wo schließe ich den an dem MCU an?

Man kauft nicht einfach irgendwelche ICs, wenn man keinen blassen Dunst 
hat, wie sie zu verwenden sind.
Man schaut zumindest erstmal ins Datenblatt.


Peter

von Programist (Gast)


Lesenswert?

Das würde zu lange dauern dir das alles zu erklären.Wieso muss das 
unbedingt diese IC sein?

von Programist (Gast)


Lesenswert?

Aber es gibt schon andere beiträge dazu
http://www.mikrocontroller.net/part/MCP23016

von Nino K. (lnino)


Lesenswert?

Programist schrieb:
> Wieso muss das unbedingt diese IC sein?

Es war die einzige IC die ich bei Reichelt gefunden habe, deswegen habe 
ich mir diese mal bestellt. Sind andere besser und leichter handzuhaben?

von Arne S. (Gast)


Lesenswert?

Hallo, nimm doch einen PCF8574.

Der hängt am i2c interface und ich glaube du kannst bis zu 7 Stück 
anschließen, dabei kannst du jeden Pin als I oder als O setzen.

Er hat nur einen Nachteil: er ist relativ teuer, ca. 1€

ABER: Die Ansteuerung ist extrem simpel

von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

schau dir das mal an, einfach mehrere parallel anschließen und einen 
einzelnen aktivieren.

von Sebastian B. (sebastian_b86)


Lesenswert?

der mcp23s017 hat 3 ID Pins die du auf high oder low setzt und damit 
eine HW ID festlegst. dann kannst du sogar spi ohne slave slect fahren 
sondern musst einfach nur das richtige device addressieren, das ist ganz 
praktisch! Damit kannst du halt max 2^3 = 8 mcp anhängen

von Programist (Gast)


Lesenswert?

El Nino schrieb:
> Es war die einzige IC die ich bei Reichelt gefunden habe, deswegen habe
> ich mir diese mal bestellt. Sind andere besser und leichter handzuhaben?


Die ist gut, aber braucht spezielle software.Da muss man sich schon 
damit auskennen.

von Sebastian B. (sebastian_b86)


Lesenswert?

Programist schrieb:
> Die ist gut, aber braucht spezielle software.

die lib die ich hier aus dem forum geklaut hab ist urrr simpel und das 
teil extrem einfach anzusteuern. Wenn man sich die funktionen noch ein 
wenig umschreibt gehts auch mit der addressierung vermutlich ur simpel. 
musst dann halt 3 bit für den chip und 4 bit (16 IO Ports pro device) 
für den port verwenden, dH du kannst 128 IO Ports über einen 8bit int 
ansteuern :)
theoretisch könntest du mit dem slave select dann auch noch eine 
kaskadierung von noch mehr mcp's vornehmen und die nochmal gleich 
addressieren und somit mit dem 8. bit die nächsten 128 ports ansteuern, 
wenns denn sein muss...

von Tip (Gast)


Lesenswert?

El Nino schrieb:
> Es war die einzige IC die ich bei Reichelt gefunden habe, deswegen habe
> ich mir diese mal bestellt.

Keine Ausrede, bei Reichelt gibt es für 0,30 € den 74HC 595 für acht 
zusätzliche Ausgänge.
-> Beitrag "Re: Mehrere I/O Expansions an einer MCU"

von Programist (Gast)


Lesenswert?


von Nino K. (lnino)


Lesenswert?

Arne Sachtler schrieb:
> Hallo, nimm doch einen PCF8574.
> Der hängt am i2c interface und ich glaube du kannst bis zu 7 Stück
> anschließen, dabei kannst du jeden Pin als I oder als O setzen.
> Er hat nur einen Nachteil: er ist relativ teuer, ca. 1€
> ABER: Die Ansteuerung ist extrem simpel

Vielen Dank für deine Antwort.
Kannst du mir sagen wie ich den dann genau ansteuer? Wenn ich z.B.: 
einen Taster an den Expander anschließen möchte.
Eventuell ein Beispiel, damit ich dem ganzen besser folgen kann.

Brauche ich dann auch für den PCF8574 eine Software so wie es mir für 
meinen zuvor ausgewählten MCP 23016-I/SP prophezeit wurde?

Preislich wäre mir zwar 74HC 595 lieber, aber der kann nur Output soweit 
ich das mitbekommen habe. Oder? Hatte mich bei meinem vorherigen Post 
vertan. Ich brauche mehr Inputs als Outpus, da ich sehr viele Taster 
anschließen möchte. Somit ist mir deine Wahl des PCF8574 lieber.

Und kann ich dann Expansion hinter Expansion hängen, oder hängen dann am 
MCU mehrere Expansions direkt dran?

Danke für die Hilfe.

von Peter D. (peda)


Lesenswert?

El Nino schrieb:
> Preislich wäre mir zwar 74HC 595 lieber, aber der kann nur Output soweit
> ich das mitbekommen habe.

http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI

Peter

von Sebastian B. (sebastian_b86)


Lesenswert?

du brauchst für alles was du an spi, i2c oder one wire hängst eine 
software... wie komplex die ist, ist immer die frage und die für den mcp 
ist eigentlich wirklich einfach! es ist ja net so das der avr das gerät 
erkennt und sagt "yay more ports!"

von Sam .. (sam1994)


Lesenswert?

El Nino schrieb:
> Preislich wäre mir zwar 74HC 595 lieber, aber der kann nur Output soweit
> ich das mitbekommen habe. Oder?

Ja und da du nur wenige Input brauchst nimmst du dafür deinen µC. Alle 
restlichen Ausgänge die nicht mehr dran passen kommen dann zu den 
Schieberegistern:

Atmega168: 22 nutzbare Pins - 3 fürs Schieberegister. Dann hast du noch 
19 Pins für Eingänge, Quarz und was du sonst noch dranhängen willst.

von Nino K. (lnino)


Lesenswert?

Sebastian B. schrieb:
> du brauchst für alles was du an spi, i2c oder one wire hängst eine
> software... wie komplex die ist, ist immer die frage und die für den mcp
> ist eigentlich wirklich einfach! es ist ja net so das der avr das gerät
> erkennt und sagt "yay more ports!"

Und wo finde ich diese Software, mit welcher ich das ansteuern kann?

von ... (Gast)


Lesenswert?

El Nino schrieb:
> Und wo finde ich diese Software, mit welcher ich das ansteuern kann?

Selber schreiben?
Woher kommt denn die Software, die sich jetzt schon in Deinem µC 
befindet?

Ansonsten, Beispiele hier im Forum und anderswo im Inet suchen und 
adapdieren. Oder halt jemanden für den Job bezahlen.

von Sebastian B. (sebastian_b86)


Lesenswert?

El Nino schrieb:
> Und wo finde ich diese Software, mit welcher ich das ansteuern kann?
meistens sind basis implementierungen der wichtigsten sachen im 
datenblatt des jeweiligen µC angegeben.
wenn du nur mcp an deinen atmega hängen willst reichen die 3 SPI Ports 
aus um bis zu 8 anzusteuern, weil die ja ihre adresse hw-mäßig bekommen. 
dH wie schon oben erwähnt kannst du dir dann insgesamt 128+19 IO Ports 
basteln

von Tip (Gast)


Lesenswert?

Sebastian B. schrieb:
> wenn du nur mcp an deinen atmega hängen willst reichen die 3 SPI Ports
> aus um bis zu 8 anzusteuern, weil die ja ihre adresse hw-mäßig bekommen.
> dH wie schon oben erwähnt kannst du dir dann insgesamt 128+19 IO Ports
> basteln

Hallo Sebastian,

was rechnest du da? Wie kommst du ausgerechnet auf 128 Ports bei SPI? 
Meinst du I2C/TWI?

Wenn man Bausteine einzeln über SPI dranhängst, braucht man pro Baustein 
eine Slave Select Leitung (direkte uC Pins oder aus einem 
Adressdekoder). Bei SPI lassen sich die Bausteine (z.B. 74xx595) aber 
kaskadieren, so dass man für "beliebig" viele nur insgesamt eine 
Ansteuerung braucht.

von Sebastian B. (sebastian_b86)


Lesenswert?

wie gesagt der mcp hat 3 pins auf denen ich eine adresse definieren 
kann. nacher kann ich per SPI sagen das ich genau diese adresse 
ansprechen will ohne einen slave select zu brauchen... bsp zum lesen:
1
SPDR = SPI_SLAVE_ID | ((SPI_SLAVE_ADDR << 1) & 0x0E)| SPI_SLAVE_READ;
mmn (ich kann mich aber auch irren) kann man dann jeweils 8 mcp's auf 
einen SS Pin hängen und so weiter. Die mcp's werden dann von 0x0 bis 0x8 
addressiert und los geht der spaß!
<Anz IO Register>*<Anz IO Pins>*<Anz MCP>=2*8*8 = 128 und das ohne SS!

wir haben ur viele von den mcp's da, in i2c und spi aber das jetzt 
aufzubauen is ein bissi zach :D

von Nino K. (lnino)


Lesenswert?

Da der MCP23016 ja schon bestellt und mittlerweile angekommen ist, habe 
ich versucht mich etwas einzulesen um das Ganze zum laufen zu bringen.

Aber leider versteh ich da nur Bahnhof.

Hat schon jemand einen MCP23016 oder ähnliches angeschlossen und kann 
mir sagen welche Schritte notwendig sind? Oder eventuell ein 
Beispielcode?

Hier ein paar Links, welche ich schon gefunden habe:

http://www.bristolwatch.com/arduino/arduino_mcp23016.htm
http://arduino-related.livejournal.com/1591.html
http://www.instructables.com/id/Make-an-Amazing-MIDI-Controller/step6/I2C-IO-Expander/
http://www.gammon.com.au/forum/?id=10945

Vielen Dank.

von Sam .. (sam1994)


Lesenswert?

Warum machst du es dir so kompliziert?

Das reicht doch völlig aus:
Samuel K. schrieb:
> Atmega168: 22 nutzbare Pins - 3 fürs Schieberegister. Dann hast du noch
> 19 Pins für Eingänge, Quarz und was du sonst noch dranhängen willst.

von Nino K. (lnino)


Lesenswert?

Leider nein. Mir stehen nur 18 Ports zur Verfügung, da ich die seriellen 
Ports brauche und abzüglich des Crystal, Reset, etc...

Habe ein Display (6 Ports), 12 Buttons (12 Ports), 3 LEDs (3 Ports), 1 
Servo (1 Port) und neu dazugekommen sind 4 Kodierschalter (16 Ports).
Vorher waren es 22 Ports und nun brauche ich 38 Ports.

von Sebastian B. (sebastian_b86)


Lesenswert?

El Nino schrieb:
> Hat schon jemand einen MCP23016 oder ähnliches angeschlossen und kann
> mir sagen welche Schritte notwendig sind? Oder eventuell ein
> Beispielcode?

http://git.42.lefant.net/gitweb/reox/rf12.git/commit/84bdaacd9d1fb10aef7f9ab85d0c381c1f2ce4d6

schau dir mal den commit an, ansonsten auch das ganze projekt!

von Sam .. (sam1994)


Lesenswert?

El Nino schrieb:
> Habe ein Display (6 Ports), 12 Buttons (12 Ports), 3 LEDs (3 Ports), 1
> Servo (1 Port) und neu dazugekommen sind 4 Kodierschalter (16 Ports).
> Vorher waren es 22 Ports und nun brauche ich 38 Ports.

Sag bloß du nimmst für jeden Button einen Pin.
Nimm wenigsten eine Matrix! Dann brauchst du nur 7 Pins.

- 74HC595                              -3
- Tastenmatrix mit 4x3 (12 Buttons)    +5
- Kodierschalter über Matrix 4x4       -4

Zum Matrix bilden nimmst du das Schieberegister. 4Pins davon nutzt du 
für die Tastenmatrix und die Matrix der Kodierschalter. Am Avr brauchst 
du dann 3 (für die Buttons) und 4 (für die Kodierschalter) Pins + 3 für 
das Schieberegister = 10 Pins. Die Leds dann noch an das 595 und es 
passt.

Was mit noch geschickterem Layout möglich ist zeig ich dir hier mal:

Mikrocontroller Pin:
Ausgänge:
1  KODIER_A, TASTER_1, LCD_1, LED_1
2  KODIER_B, TASTER_2, LCD_2, LED_2
3  KODIER_C, TASTER_3, LCD_3, LED_3
4  KODIER_D, TASTER_4, LCD_4
5  LCD_RS
6  LCD_EN
7  LED_GND
8  SERVO

Eingänge:
9  KODIER_A, TASTER_1
10 KODIER_B, TASTER_2
11 KODIER_C, TASTER_3
12 KODIER_D

12Pins.
Wenn du jetzt noch Tristate von µC nutzt, kannst du z.b. LCD_RS und 
LED_GND auf einen Pin legen. Damit könntest du für dein Projekt einen 
Tiny24/44/84 nutzen.

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.