Hallo, ich möchte an einem ATMega drei Porterweiterungs-ICs vom Typ MCP23S18 betreiben (ist ähnlich dem ...S17, nur mit Open Drain-Ausgängen). Leider habe ich noch nie was mit SPI gemacht. Wenn ich nur ein IC bräuchte, wäre es mir klar: einfach MOSI, MISO, SCLK und Chip Select verbinden. Aber ich habe aber ja drei ICs. Deshalb stelle ich mir die Frage, wie ich das dann am besten mache. In Wikipedia steht zu SPI, dass es Sternverbindung und Kaskadierung gibt. Ich würde am liebsten die Sternverbindung anwenden. Mit Chip Select (das sind dann drei Leitungen zum µC) wähle ich dann das IC aus, mit dem ich "reden" will. Aber darf ich einfach die MISOs der ICs parallel schalten? Was passiert, wenn ein IC den Pin auf LOW zieht, das andere aber auf HIGH? Das Datenblatt des MCP23S18 schweigt sich dazu leider aus. Oder ist das ein (Quasi-)Standard bei SPI, dass MISO hochohmig geschaltet wird, wenn das IC mit Chip Select nicht "ausgewählt" ist? Danke. Third-Eye
Third Eye schrieb: > Oder ist das ein (Quasi-)Standard bei SPI, dass MISO hochohmig > geschaltet wird, wenn das IC mit Chip Select nicht "ausgewählt" ist? Ja. Kontrollieren ob die CS Leitung vom Slave einen internen Pullup hat. Wenn nicht, dann externer Pullup 10-100K, um beim Reset ein unerwünschtes CS zu vermeiden.
:
Bearbeitet durch User
Vielleicht am Anfang noch ein paar Angstwiderstaende (220R z.B.) einbauen, damit der Kurzschluss nicht so gross wird.
Entweder der: A. K. schrieb: > Kontrollieren ob die CS Leitung vom Slave einen internen Pullup hat. > Wenn nicht, dann externer Pullup 10-100K, um beim Reset ein > unerwünschtes CS zu vermeiden. oder der, der entsteht, wenn die Software versehentlich alle drei CS aktiviert. Also bei mir passieren solche Sachen. EDIT: Jetzt seh ich's erst: Open-Drain. Ja dann kein Problem. SPI mit Open Drain. Nie gesehen bisher.
:
Bearbeitet durch User
Die sauberste Methode wäre einen 2:4 Demultiplexer (74xx139) zu verwenden, dessen Enable vom Chip-Select der SPI-Schnittstelle gesteuert wird. Die zwei Adressbits kann man dann einfach direkt an einen Port des μC legen und vor dem Transfer auf so ansteuern, dass der gewünschte Slave selektiert wird. Dannen können ganz sicher auf der MISO-Leitung keine Ausgänge gegeneinander Kämpfen.
Marc P. schrieb: > EDIT: Jetzt seh ich's erst: Open-Drain. Ja dann kein Problem. > SPI mit Open Drain. Nie gesehen bisher. Nein, das Open Drain bezieht sich m.W. nur auf die 16 GPIOs, nicht auf die Pins für SPI. Die Idee mit den "Angstwiderständen" gefällt mir. Gerade bei der ersten Programmerstellung kommt sowas schon mal vor, dass ungewollt Pins geschaltet werden. Wem Derartiges noch nie passiert ist, der werfe den ersten Stein ;-) Danke auch mit dem Tipp mit dem Pull-Up! Im Datenblatt steht tatsächlich nichts davon, dass das IC einen internen Pull-Up hätte. Ist logisch, im Einschaltmoment, und wenn der µC programmiert wird, sind die Ausgangspins des µC ja hochohmig geschaltet. Ich weiß allerdings nicht, ob ich beim Erstellen der Platine daran gedacht hätte... Danke. Third-Eye
:
Bearbeitet durch User
Third Eye schrieb: > Gerade bei der ersten Programmerstellung kommt sowas schon mal vor, dass > ungewollt Pins geschaltet werden. > Wem Derartiges noch nie passiert ist, der werfe den ersten Stein ;-) Solche Buskonflikte hat man öfter mal. Mir ist aber deswegen noch nie(!) irgendein Baustein kaputt gegangen. Aus diesem Grund wurde ich sagen: einfach alle Ausgangspins parallel, genau so, wie sich die Ingenieure bei Motorola das seinerzeit(tm) ausgedacht haben. > Gerade bei der ersten Programmerstellung kommt sowas schon mal vor, dass > ungewollt Pins geschaltet werden. Wie wäre es, das einfach mal bewusst zu machen und auszuprobieren, ob überhaupt irgendwas kaputt geht? Und auch die Geschichte mit dem Tristate beim Reset wird nur halb so heiß gegessen wie sie hier aufgekocht wird...
:
Bearbeitet durch Moderator
Lothar Miller schrieb: > Wie wäre es, das einfach mal bewusst zu machen und auszuprobieren, ob > überhaupt irgendwas kaputt geht? Gefaellt mir nicht. Denn das Kaputtgehen ist kein binaeres jetzt heil und im naechsten Moment kaputt, sondern ein langsames dahinsiechen der Endstufe. Ein langsam abfallender parasit"arer Widerstand. Das braucht sicher eine kleine Weile, aber wer sagt, dass der Programmierer das gleich merkt, wenn er so ins Programm vertieft ist und genau das passiert, was 'gar nicht moeglich' ist .-)
Marc P. schrieb: > Das braucht sicher eine kleine Weile Es muss länger als zwei Wochen dauern. Denn in dem besagten Fall hatte ich die Schaltung für 2 Wochen so stehen. Und üblicherweise werden Fehler schneller gefunden... > Denn das Kaputtgehen ist kein binaeres jetzt heil und im naechsten > Moment kaputt, sondern ein langsames dahinsiechen der Endstufe. Woruaf stützt sich dieses Wissen? "Die Endstufe" ist im Falle einer Push-Pull-Endstufe ein P-Kanal- und ein N-Kanal-Mosfet mit Bahnwiderständen im Bereich um 50..100 Ohm. Wenn ich jetzt mal den einen Ausgang auf Vcc schalte (dort ist idR. der schlechtere P-Kanal-Fet) und den anderen auf GND, dann habe ich 5V und einen 150 Ohm-Widerstand. Ergibt zusammen einen Strom von 33mA. Diese 33mA ergeben dann beim schlechteren P-Kanal-Fet eine Verlustleistung von 120mW. Diese Leistung kann so ein IC idR. problemlos aufnehmen und/oder abführen. Marc P. schrieb: > Lothar Miller schrieb: >> Wie wäre es, das einfach mal bewusst zu machen und auszuprobieren, ob >> überhaupt irgendwas kaputt geht? > Gefaellt mir nicht Ist aber in anderen Bereichen (z.B. Automobilindustrie) ziemlich üblich. Da werden dann Gegenstände und Bauteile einfach über Gebühr belastet. Und wenn sie dabei nicht kaputt gehen, dann halten sie den Normalbetrieb locker aus. > Das braucht sicher eine kleine Weile, aber wer sagt, dass der > Programmierer das gleich merkt, wenn er so ins Programm vertieft ist und > genau das passiert, was 'gar nicht moeglich' ist .-) Man macht doch in eine Schaltung nicht Widerstände für den Programmierer rein. Wenn ich da in die Prototypen zusätzlich 50 Widerstände reinbaue, nur dass der Prototyp nicht kaputtgeht wenn der Programmierer nicht aufpasst, dann muss eigentlich ich hinterher in der Serie die Widerstände drin lassen. Oder eben gleich ein Redesign auflegen, das garantiert teurer ist, als so einem unaufmerksamen Softie mal wieder einen neuen Baustein aufzulöten... Fazit: weltweit werden zigmilliardenfach SPI-Slaves einfach so zusammen und direkt an uC-Pins geschaltet. Das scheint sich bewährt zu haben. Und in den gängigen APP-Notes von Herstellern findet sich üblicherweise auch kein Multiplexer oder Serienwiderstand.
Lothar Miller schrieb: > Woruaf stützt sich dieses Wissen? Auf den Tod diskret aufgebauter MOSFET Leistungs-Endstufen, sowie eines MIC4452, ebenfalls Endstufe, die ueberlastet wurde. Auf die sehr sehr bedauerliche Verstuemmelung eines LPC2124, was allerdings eine an den Portpin hinfedernde 12V (>>3.3V = Ueberspannung) war und auch nur einen Wimpernschlag Zeit brauchte - also was anderes . Ausserdem die schmerzlichen Erfahrungen eines fr"uheren Arbeitgebers mit dem Zerst"oren von LEDs. Hast Du deinen geschaendeten IC danach vermessen, ob da noch alles innerhalb der Werte des Datenblatts ist? Du hast aber schon recht. Die Bauteile sind hart im Nehmen. SMD-Leistungs-FETs l"oten sich ja angeblich lieber eingenm"achtig aus (Selbstverteidigung) als dass sie kaputt gehen. Aber wenn Du Bauteile (lokal) heiss genug (>380 Grad) bekommst, dann startest Du deine eigene 'Umdotierung' per Diffusion. Und da find ich kleine ICs mit schwacher thermischer Ankopplung halt viel gef"ardeter. Lothar Miller schrieb: > Man macht doch in eine Schaltung nicht Widerstände für den Programmierer > rein. Nein tut man in der Masse nicht. Aber der Bastler, der nicht ein fertiges Produkt zigtausendfach auf den Markt wirft, sondern eigentlich st"andig (gef"ahrliche) neue Sachen aus seinem einzigen board probiert schon. Und h"atte das Drecks-Olimex-Board Angstwiderst"ande gehabt, der LPC2124 w"urde noch funktionieren! Und, Lothar, offensichtlich hast Du andere Kollegen als ich. Sonst w"urdest Du gerne die Angstwiderstaende in Experimentierboards einbauen .-)
Wenn du nen kleinen uC nimmst, ist nen externer MUX + pullups für die CS Leitungen zu empfehlen. Die größeren uCs haben den MUX schon in der SPI Einheit integriert, z.b AVR32. In den Datenleitungen kannst du dir die Angstwiderstände dann sparen. Außer du bist noch vorsichtiger für den Fall, dass ein Chip hops geht und MISO permanent high/low hält und dann die anderen u.U "mit in den Tod reißt".
Mein Güte, das sind ja wieder mal Tipps hier, klemm einfach die drei Chips parallel auf den SPI mit jeweils eigenen Pins für Chip-Select und gut. Aber einen noch, SS am AVR ist ein EINGANG im Bezug auf den SPI.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.