Forum: Mikrocontroller und Digitale Elektronik AVR mehrere SPI und nur eine CS Leitung?


von Fritz (Gast)


Lesenswert?

Hallo,

habe hier einen Atmega2560, der im Grunde vier TMC260-PA ansteuern soll 
und von einem FT231X angesprochen wird.
Nun habe ich allerdings noch ein-zwei Fragen zur Kommunikation.

Die TMC260-PA werden ja über ihre SPI-Schnitstelle parametriert. 
Theoretisch ist das ein einmaliger Vorgang, es schadet mir aber 
sicherlich nicht, wenn ich die Parameter öfters mal ändern kann, also 
alle vier über SPI an den Atmega2560 und dann mit entsprechender 
Software ansprechen und Parameter eingeben/ändern. Ist ja eigentlich mit 
einer normalen Sternschaltung kein Problem, jedoch hat der Atmega2560 
nur eine SS-Leitung soweit ich das mitbekommen habe. Da ich nun aber 
nicht alle vier Treiber gleichzeitig betreiben kann müssen sie ja 
irgendwie anderweitig aktiviert werden. Zudem möchte ich den AVR noch 
über ISP programmieren. Kann ich nun einfach jeden beliebigen Pin am AVR 
als Ausgang schalten um so dem jeweiligen Treiber zu signalisieren, dass 
er "dran" ist oder gibt das dann irgendwie Synchronisationsprobleme oder 
ähnliches?


Dann wegen dem FT231X ist es ja im Prinzip einfach. Signalleitungen 
verbinden, Saft geben und über USB konfigurieren. Jedoch hat dieser auch 
noch einen Hardware Handshake. Da der Atmega Befehle über USB erhalten 
soll und anhand dessen dann die Motoren ansteuern soll wäre es eher 
suboptimal wenn Signale verloren gehen, weil einer der Controller nicht 
bereit war. Nun weiß ich jedoch nicht wie man den Handshake realisieren 
würde. Wie würde das Softwaremäßig aussehen und wie bzw. welche Pins 
müsste ich verbinden? Reicht hier auch ein beliebiger Avr Pin mit 
entsprechender softwareseitiger verarbeitung? Gibt es Literatur oder 
dokumentierte Projekte die etwas ähnliches realisiert haben?

Beste Grüße
Fritz

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Fritz schrieb:
> Ist ja eigentlich mit
> einer normalen Sternschaltung kein Problem, jedoch hat der Atmega2560
> nur eine SS-Leitung soweit ich das mitbekommen habe.

Die SS-Leitung ist nur dann erforderlich, wenn der AVR ein SPI-Slave 
sein soll. Du aber willst mehrere SPI-Slaves mit einem Master 
ansprechen, und der ist Dein AVR.

Also kannst Du als CS-Leitung für jeden der Slaves einen beliebigen als 
Ausgang konfigurierten Portpin verwenden - vor dem Senden per SPI muss 
Dein Programm nur die gewünschten Pins aktivieren und danach wieder 
deaktivieren, fertig ist die Laube.

Was die serielle Kommunikation angeht, kannst Du zwar 
Hardware-Handshake so betreiben, wie Du Dir das gedacht hast 
(irgendeinen Portpin dafür hernehmen), aber das ist im Grunde genommen 
gar nicht erforderlich, denn Du kannst auch Softwarehandshake verwenden, 
bzw. ein Protokoll, bei dem der AVR den korrekten Empfang der Daten 
explizit bestätigt, und Dein PC solange das Senden der Daten wiederholt, 
bis die Bestätigung eintrudelt.

von Fritz (Gast)


Lesenswert?

Danke für deine Antwort Rufus!

Rufus Τ. Firefly schrieb:
> Die SS-Leitung ist nur dann erforderlich, wenn der AVR ein SPI-Slave
> sein soll. Du aber willst mehrere SPI-Slaves mit einem Master
> ansprechen, und der ist Dein AVR.

Dann kann ich die ja komplett unbelegt lassen. Programmieren über ISP 
müsste dann ja ganz normal funktionieren wenn die vier Slaves 
deaktiviert sind oder?

Rufus Τ. Firefly schrieb:
> Was die serielle Kommunikation angeht, kannst Du zwar
> Hardware-Handshake so betreiben, wie Du Dir das gedacht hast
> (irgendeinen Portpin dafür hernehmen), aber das ist im Grunde genommen
> gar nicht erforderlich, denn Du kannst auch Softwarehandshake verwenden,
> bzw. ein Protokoll, bei dem der AVR den korrekten Empfang der Daten
> explizit bestätigt, und Dein PC solange das Senden der Daten wiederholt,
> bis die Bestätigung eintrudelt.

Dann kann ich im Grunde ja auch den FT230X ohne Hardware Handshake 
hernehmen (hab jeweils zwei von beiden). Der Atmega2560 hat sowohl 
genügend Pins und ist schnell genug, sodass man beide Lösungen ohne 
weiteres nutzen könnte.
Welches von beiden wäre einfacher/üblicher/schneller?

Grüße
Fritz

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.