mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mehrere MISOs zusammenschalten


Autor: antiwackel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Chris L. (kingkernel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: antiwackel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: antiwackel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: grumbel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.
  Master    
   MOSI--------------------------------------------------------.     
                                                               |
              Slave1         Slave2           Slave3           |
   MISO --- MISO  MOSI ---- MISO   MOSI ---- MISO   MOSI ------'
            CLK   SS         CLK    SS        CLK   SS
             |    |            |    |          |    |
   SCLK  ----o----)------------o----)----------'    |
    SS   ---------o-----------------o---------------'
   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.

Autor: antiwackel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kevin K. (nemon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: antiwackel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.