Forum: Mikrocontroller und Digitale Elektronik mehrere MISOs zusammenschalten


von antiwackel (Gast)


Lesenswert?

Ich plane einen SPI-Bus mit vielen Slaves (Attinys). Sie sind 
adressiert, d.h. immer nur einer kann antworten. Die Anzahl der Slaves 
ist unbestimmt. Ich möchte an allen die Leitungen gleich Leitungen 
anschließen (MOSI,MISO,Clock,CS).

Damit die MISOs nicht aufeinandertreiben, wollte ich es so machen:

Die MISO-Leitung am Master hat einen 1k pullup-Widerstand. An die MISO 
von den Slaves schalte ich einen Transistor, der diese Leitung auf L 
zieht, wenn MISO = L ist, ansonsten hochohmig. weil immer nur ein 
adressierter Chip antworten kann, gibt es keine Konkurrenz. (Es gibt ein 
Protokoll für die Übertragung)

Was meint Ihr - funktioniert das? Hat das jemand schonmal so gemacht?

von Chris L. (kingkernel)


Lesenswert?

Und wie willst du das mit dem Chip Select machen? Für jeden Slave ne 
eigene CS-Leitung?
Schau dir mal I²C oder RS485 an, das ist her für das geeignet, was du 
machen willst. SPI ist eher für die Verbidung von Chips auf einer 
platine oder einem Gerät gedacht, nicht als weitgehender BUS

von Anja (Gast)


Lesenswert?

Hallo,

der Transistor ist bei hohen Datenraten unter Umständen schon zu 
langsam.
Es sei denn Du nimmst einen schnellen Schalttransistor (2N2222A)
und Vorsicht: ein Transistor invertiert!!!!

Da du ja eh einen Demultiplexer (74HC138) für die Chip-Select Leitungen 
brauchst, würde ich mit dem gleichen Signal die Ausgangsleitungen auf 
einen Tri-State Buffer z.b. 74HC125 geben. (4*Tri-State Buffer)

In einfachen Fällen reicht vielleicht auch ein analoger Multiplexer 
74HC4051 (8 zu 1 Multiplexer / Demultiplexer)

von antiwackel (Gast)


Lesenswert?

nein, alle Chips sollen das gleiche Chip Select Signal bekommen. Also 
alle werden gleichzeitig "aktiviert".

Für RS485 brauchte ich ne UART, die hat der Tiny13 nicht, oder? Außerdem 
nen extra Quarz..

ICh glaube I2C hat er auch nicht.. mal sehen.

von antiwackel (Gast)


Lesenswert?

Ach so ja und: Ein Transistor invertiert - je nach Typ. ICh dreh das 
dann mit einem zweiten Transistor af der Masterseite wieder um.

Hohe Datenrate hab ich nicht, 1-10kHz reicht.

von grumbel (Gast)


Lesenswert?

Nimm I2C, das kann man auch gut in Software machen.
Außerdem kannste da dann auch kaufbare Bauteile mit dranhängen (zb. 
Tempsensoren)

Fertige I2C Bibliothek zb bei 
http://homepage.hispeed.ch/peterfleury/avr-software.html (die hab ich 
mal verwendet)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Schau dir mal I²C ... an, das ist her für das geeignet, was du
> machen willst. SPI ist eher für die Verbidung von Chips auf einer
> platine oder einem Gerät gedacht
I²C aka. IIC heißt im Originaltext Inter-IC Bus, und war/ist dafür 
gedacht, innerhalb eines überschaubaren Geräts (Videorecorder, 
Fernseher, Autoradio...) informatinen zum Gerätestatus auszutauschen. 
Insofern ist gerade I2C nur für lokale Kommunikation gedacht. 
Insbesondere die Terminierung wird bei vielen Teilnehmern und langen 
Leitungen schwierig.

> Ich möchte an allen die Leitungen gleich Leitungen
> anschließen (MOSI,MISO,Clock,CS).
Dann häng doch einfach in jedem Device den MISO an den nächsten MOSI, 
und du bekommst einelange Kette.
1
  Master    
2
   MOSI--------------------------------------------------------.     
3
                                                               |
4
              Slave1         Slave2           Slave3           |
5
   MISO --- MISO  MOSI ---- MISO   MOSI ---- MISO   MOSI ------'
6
            CLK   SS         CLK    SS        CLK   SS
7
             |    |            |    |          |    |
8
   SCLK  ----o----)------------o----)----------'    |
9
    SS   ---------o-----------------o---------------'
10
   CS
Um festzustellen, wieviele Teilnehmer in der Kette sind, schiebst du am 
Anfang einfach mal durch alle ein Bitmuster durch, und schaust, wann das 
wieder beim Master ankommt.

von antiwackel (Gast)


Lesenswert?

Über dieses "daisy chain" habe ich gelesen. Ich möchte aber gerne 
Flachbandkabel und Schneidklemmverbinder benutzen, da macht sich das 
nicht gut. Aber das mit dem durchzählen, wann das Bitmuster zurückkommt, 
ist eine gute Idee.

Lothar, weißt Du auch was über die Terminierung? siehe:

Beitrag "SPI kombinieren und entstören"

Statt Prüfsumme hab ich gerade überegt - ich übertrage einfach mehrfach 
und gucke ob alle Bytes gleich sind. Ist ja unwahrscheinlich daß sich 
eine EMV-Einstreuung immer auf das gleiche bit setzt.

von Kevin K. (nemon) Benutzerseite


Lesenswert?

zur Verdrahtung bei SPI habe ich auch noch eine Frage, ob das so geht, 
wie ich es mir vorstelle:

MOSI, MISO und SCK wird 1:1 vom ATMEGA zu den Slaves verbunden, da ich 
in der Summe 8 Slaves habe, gebe ich die CS-Leitung und je eine 
Selectleitung pro Slave auf ein NOR-Gatter. Da ich die Slaves ja mit 
einer 0 auf CS aktiviere, ist die CS-Leitung zum Slave dann auf 0, wenn 
CS vom Master und die Selectleitung zugleich auf 0 sind. Zwar brauche 
ich 8 Portausgänge + die CS-Leitung am µC und 2 4fach-NOR, aber ich bin 
nicht aufs Sparen an Portleitungen und Platz angewiesen. Jetzt die Frage 
an euch: geht das so?

von antiwackel (Gast)


Lesenswert?

kannst Du alles sparen. Einfach je Chip einen Ausgang als CS benutzen 
und im Programm vor / nach der Übertragung schalten. Die CS kann ein 
Ausgang davon sein. Festgelegt ist die nu im Slave-Betrieb.

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.