Forum: Mikrocontroller und Digitale Elektronik SPI treiber IC


von Stefan S. (buffalochill)


Lesenswert?

Hallo,

Ich suche ein Treiber / Verstärker IC für die avr SPI Schnittstelle.
Der Bus ist eine offene kette mit Twisted pair netzwerkleitungslängen 
von mehreren Metern zwischen den Slaves.  5V Stehen am Master Und slaves 
zur Versorgung.

Gruß
Stefan

von Christian (Gast)


Lesenswert?

Du könntest RS422 Treiber verwenden. Dass du dann SPI darüber machst ist 
denen ja ziemlich egal.

von R. R. (elec-lisper)


Lesenswert?

Hilft dir die App-Note von TI: 
http://www.ti.com/lit/an/slyt441/slyt441.pdf ?

von Stefan S. (buffalochill)


Lesenswert?

Danke für die antworten.
Vom Prinzip her habe ich auf jeder slave Platine 2 Buchsen zum 
durchscheinen der SPI Signale.  Es wäre also schön eine Art Verstärker 
ic zu haben durch den die Signale ebenfalls durchgeschliffen werden. 
Ansonsten wäre ich ja trotzdem auf eine gewisse Gesamtlänge der gesamten 
buskette beschränkt.

von Christian (Gast)


Lesenswert?

Dann mach es doch genau wie in der AN von TI - da sind sogar schon die 
ICs genannt, die du brauchst. Und zusätzlich haben die schon an den 
Transientenschutz gedacht. Was brauchst du mehr?

von Stefan S. (buffalochill)


Lesenswert?

Theoretisch ja. Dann bräuchte ich allerdings 2 ics auf jedem slave. eins 
zum empfangen und eins zum weiterseden um die Kette quasi von slave zu 
slave neu anzutreiben.  Mir wäre es halt lieber nur ein ic zu haben 
durch das der Spi Bus durchgeht wegen dem platz und weil man dann 
Bauteile spart.

: Bearbeitet durch User
von Michael .. (gismi)


Lesenswert?

evtl solltest du dir nochmals überlegen, ob SPI die richtige Wahl ist 
mit deinen Anforderungen.

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


Lesenswert?

Stefan S. schrieb:
> Der Bus ist eine offene kette
Du hast also nur einen Sender (MOSI) und willst von den Slaves nichts 
empfangen (MISO)?
Hast du eine Daisy-chain, oder hängen die Slaves parallel am Bus?
Falls das zweitere: wie wird die Busarbitrierung (SlaveSelect) gemacht?

Michael .. schrieb:
> evtl solltest du dir nochmals überlegen, ob SPI die richtige Wahl ist
> mit deinen Anforderungen.
Insbesondere das Empfangen eines Bits stelle ich mir vom Timing her 
sehr spannend vor, wenn da zig Treiber das Taktsignal immer weiter 
verzögern und das MISO-Signal auf dem Rückweg nochmal verzögert wird...

von Stefan S. (buffalochill)


Lesenswert?

Gut dass wir mal drüber gesprochen haben danke für die antworten das hat 
mich schon echt weitergebracht.  Tatsächlich müssten die slaves nur 
Daten empfangen je nachdem wie ich es nun auslegen.

Aber Ursprünglich wollte ich auch Daten einmalig am start der siftware 
von den slaves an den Master zurücksenden.
Also wenn man einen neuen slave anstöpselt fragt der Master nach dem 
einschalten über den Bus an ob ein neuer slave da ist und der neue slave 
antwortet dann. Daraufhin bekommt er eine Adresse vom master zugewiesen.
Das war der ursprüngliche Gedanke.

Der Controller kann aber auch i2c. Atmega32

: Bearbeitet durch User
von Stefan S. (buffalochill)


Lesenswert?

Ne keine daisy chain. SS brauch ich nicht weil ich mit Adressen arbeiten 
möchte

: Bearbeitet durch User
von Michael .. (gismi)


Lesenswert?

Stefan S. schrieb:
> Ne keine daisy chain. SS brauch ich nicht weil ich mit Adressen arbeiten
> möchte

Erkundige dich bitte einmal wie SPI funktioniert.

und dann kommen wir zum Punkt zurück

Michael .. schrieb:
> evtl solltest du dir nochmals überlegen, ob SPI die richtige Wahl ist
> mit deinen Anforderungen.

von Joachim B. (jar)


Lesenswert?

Stefan S. schrieb:
> Tatsächlich müssten die slaves nur
> Daten empfangen je nachdem wie ich es nun auslegen.

Stefan S. schrieb:
> ob ein neuer slave da ist und der neue slave
> antwortet dann.

??? das verstehe ich nicht

Der Slave soll nur empfangen aber auch antworten?

https://de.wikipedia.org/wiki/Serial_Peripheral_Interface
Wird sie gegen Masse gezogen, ist der jeweilige Slave aktiv und 
„lauscht“ an MOSI, so legt er seine Daten im Takt von SCK an MISO.

Irgendwie braucht es dann auch MISO

von Stefan S. (buffalochill)


Lesenswert?

Ja der ss wird selbstverständlich genutzt aber alle hängen parallel 
dran.

Es gibt mehrere mölglichkeiten wie ich jetzt weitermache. Entweder die 
adressen sind statisch und werden von mir beim programmieren festgelegt, 
dann müssen die slaves wirklich nur daten empfangen. Oder eben mein 
ursprünglicher plan war, die adressen werden vom master vergeben dann 
muss aber ein neu hinzugekommener slave auch dem master mitteilen dass 
er neu ist und noch eine adresse braucht.

Wie ihr erkannt habt könnte das dann timing probleme geben mit der 
rückantwort vom slave zum master

: Bearbeitet durch User
von Dampf T. (ouuneii)


Lesenswert?

Ich empfehle auch ein Studium der Unterlagen zum SPI. Es funktioniert 
nicht so wie du dir das vorstellst.
Ein SPI Slave hat keine Adresse. Ein SPI Slave ist nur ein 
Schieberegister von 1, 2, 3,4 byte Laenge. Und vielleicht gehorchen sie 
einem gemeinsamen Timing, vielleicht auch nicht. Man muss die einzelnen 
Timings genau anschauen, undd darf nichts voraussetzen.

Mit etwas Glueck kann man sie, falls identisch sogar in Serie haengen. 
Wenn sie denn einen durchgeschleiften Ausgang haben.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Stefan S. schrieb:
> Es gibt mehrere mölglichkeiten wie ich jetzt weitermache. Entweder die
> adressen sind statisch und werden von mir beim programmieren festgelegt,
> dann müssen die slaves wirklich nur daten empfangen. Oder eben mein

 Das geht.

> ursprünglicher plan war, die adressen werden vom master vergeben dann
> muss aber ein neu hinzugekommener slave auch dem master mitteilen dass
> er neu ist und noch eine adresse braucht.

 Aber das geht mit Sicherheit nicht, zumindest nicht mit SPI und ohne
 das jeder Slave seine eigene CS-Leitung hat.

von Stefan S. (buffalochill)


Lesenswert?

Dampf T. schrieb:
> Ich empfehle auch ein Studium der Unterlagen zum SPI. Es funktioniert
> nicht so wie du dir das vorstellst.

Doch das geht sicherlich, man muss nur wissen wie

> Ein SPI Slave hat keine Adresse. Ein SPI Slave ist nur ein

Da meine slaves genau wie der master ein atmega sind, kann ich ihnen 
sehr wohl sagen, dass sie nur daten verwerten sollen, wenn die 
adressbyte auch ihrer adresse entspricht.
Da ich das datenprotokoll selbst festlege passt das schon :-)

> Mit etwas Glueck kann man sie, falls identisch sogar in Serie haengen.

Ich bin Gustav Gans der elektrotechnik!

von Pandur S. (jetztnicht)


Lesenswert?

Ok, dann wuerd ich alle in Serie haengen. Das MDI auf das MDO und das 
MDO auf des MDI des jeweils benachbaren, und das Ende wieder zurueck. 
Macht bei differentiellen Treibern insgesammt pro Station ein Paar. zB 
einen RS422 Treiber, zB einen AD489

Uups, den Clock brauchts ja auch noch. also noch  ein einzelner Treiber, 
der geht dann durch.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Stefan S. schrieb:
> Der Bus ist eine offene kette mit Twisted pair netzwerkleitungslängen
> von mehreren Metern zwischen den Slaves.

Da ist SPI mit Abstand die schlechteste Wahl. Insbesondere das Slave-SPI 
der AVRs ist gelinde gesagt suboptimal. Da muß der Master schon Pausen 
einlegen, damit keine Daten verloren gehen.

Die ultimative Lösung wäre CAN (AT90CAN128, ATmega64M1). Einfach die 
Daten in den Sendepuffer stellen bzw. aus dem Empfangspuffer lesen. Um 
den ganzen Übertragungsschrunz kümmert sich die Hardware.

Die 2.beste Lösung wäre RS-485. Da kann man auch adressieren 
(9Bit-Mode).
Der SW-Aufwand ist natürlich höher, als bei CAN.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Stefan S. schrieb:
> Da meine slaves genau wie der master ein atmega sind, kann ich ihnen
> sehr wohl sagen, dass sie nur daten verwerten sollen, wenn die
> adressbyte auch ihrer adresse entspricht.
> Da ich das datenprotokoll selbst festlege passt das schon :-)

 Verwertung der Daten ist eine Sache, aber sobald deine Mega selektiert
 ist, werden am MISO-Pin synchron zum Clock Daten ausgegeben.
 Wenn die MEGA aber nicht selektiert ist, werden die Daten am MOSI-Pin
 einfach nicht empfangen und somit nicht ausgewertet.
 Also, entweder kann man jede MEGA einzeln selektieren oder die MEGAs
 werden alle selektiert, MISO bleibt offen und MEGAs können nur
 hören aber nicht antworten.


>> Mit etwas Glueck kann man sie, falls identisch sogar in Serie haengen.
>
> Ich bin Gustav Gans der elektrotechnik!

 Schwer.

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


Lesenswert?

Stefan S. schrieb:
> Da ich das datenprotokoll selbst festlege passt das schon :-)
Es wäre aber prinzipiell eine überaus schlechte Idee, ganz ohne einen 
Frame-Sync (z.B. über einen SS) fahren zu wollen. Ein einziger EMV-Spike 
auf der Taktleitung sorgt dafür, dass deine Kette ab diesem Zeitpunkt um 
1 Bit "versetzt" bist (evtl. auch nur "teilweise").

Nur, wenn du durch das Deaktivieren des SS zwischendurch mal wieder alle 
Slaves auf einen neuen definierten Start "ausrichtest" kannst du wieder 
aufsynchronisieren.

Die Holzhammermethode ist, den Takt zwschendurch mal für ein paar ms 
"auszusetzen" und im Slave daraus ein Timeout zur Frame-Synchronisation 
zu gewinnen. Das ist aber letztlich nur die lange Schreibweise für 
"Murks".

Stefan S. schrieb:
> Ich bin Gustav Gans der elektrotechnik!
Für jede Gans kommt mal Martini oder Weihnachten...

: Bearbeitet durch Moderator
von Pandur S. (jetztnicht)


Lesenswert?

Ich wuerd auch einen seriellen asynchronen Differentialbus wie RS422, 
oder RS485 verwenden. Das Timing ist weniger streng, und das Protokoll 
einfacher.

von Stefan S. (buffalochill)


Lesenswert?

Christian schrieb:
> Du könntest RS422 Treiber verwenden. Dass du dann SPI darüber machst ist
> denen ja ziemlich egal.

Die idee finde ich ganz gut.

von Stefan S. (buffalochill)


Lesenswert?

Rs485 fände ich aber nochmal besser wenn das auch geht weil ich da bis 
zu 32 slaves anschließen könnte. Ich hab ja jetzt schon 5 und da kommen 
sicher noch welche hinzu. Rs422 gehen nur 10

von Stefan S. (buffalochill)


Lesenswert?

> Stefan S. schrieb:
>> Ich bin Gustav Gans der elektrotechnik!
> Für jede Gans kommt mal Martini oder Weihnachten...

Yamyam lecker :)

von Pandur S. (jetztnicht)


Lesenswert?

Eine Frage der Treiber, Es gibt Lowpower treiber, von denen gehen mehr.

Nur keine 75176 verwenden, das sind Grossvaters Stromfresser.

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.