www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI mit 2 Leitungen


Autor: Hans W. (hans_w30)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hy,
ich möchte zwei XMegas per SPI verbinden aus platzgründen auf meinem Bus 
will ich hierzu aber nur 2 Leitungen benutzen. Also Miso und Mosi auf 
einer Leitung. Die Zweite Leitung soll mein Clk sein.

Wie mache ich das am geschicktesten?
Soll ich Miso und Mosi mit nem Multiplexer vor dem Bus realisieren ? 
Oder kann ich einfach Miso und Mosi verbinden und das ganze Software 
technisch lösen? Oder gibts einfachere Wege?

Schon mal danke für die Hilfe im Vorraus

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans W. schrieb:
> ich möchte zwei XMegas per SPI verbinden aus platzgründen auf meinem Bus
> will ich hierzu aber nur 2 Leitungen benutzen. Also Miso und Mosi auf
> einer Leitung. Die Zweite Leitung soll mein Clk sein.

Verdrahtest du dann auch das Schieberegister im uC um?

Warum nimmste nicht einfach eine zusätzliche Leitung oder gleich i2c?

Autor: Pascal H. (pase-h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum benutzt du, wenn du nur 2 Pins frei hast, nicht I²c?

Mfg

Autor: Hans W. (hans_w30)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist das I2C beim XMega nur maximal 400kHz kann.Ich brauche 
aber da über den Bus z.b USB Daten sollen einen größeren Datendurchsatz.
Zusatzliche Leitung wäre das einfachste, ich habe aber Leider auf meinem 
Bus keinen Platz mehr.

Autor: BusZuKlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann gibt den beiden Leitungen die Namen TX und RX nenn das ganze RS232.
Der UART ist es egal ;-)

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans W. schrieb:
> Ich brauche
> aber da über den Bus z.b USB Daten sollen einen größeren Datendurchsatz.

Nimm doch gleich D+ und D-.
Am besten, du erklärst mal genauer, was du für ein Problem hast.
Sonst wird das hier nur ein Rumgerate.

Autor: Kevin K. (nemon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es bislang noch nie ausprobiert und hatte bislang nur mit 
ATMegas zu tun, aber du kannst doch bei einem genügend hohen Grundtakt 
die Register so setzen, dass sich ein I²C-Takt über 400kHz ergibt.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans, schielst Du nach den ARMs, die eine 2-Draht-SPI-Leitung 
unterstützen? Schau Dir mal STM32F107VCT6 o.ä. an - SPI u.a. ist im 
RM0008 erklärt. Die Steuerung von Eingang/Ausgang ist aber tückisch, 
weil sie synchron auf allen angeschlossenen Geräten stattfinden muß!

Gruß - WPö

Autor: Hans W. (hans_w30)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Grundvorrausetzungen sind schwer zu erklären ich versuchs aber mal:
-> Ich werde ein 19" Gehäuse benutzen in die ich alle Einschübe die ich 
baue reinkommen.
-> Es soll so sein das ich z.B später einfach Module miteinander 
verbinde und dann einen Wandler habe z.b USB to xyz. Wenn ich jetzt ein 
Modul brauche das USB to I2C können soll, ist USB schon als SPI 
vorhanden und muss nurnoch in I2C gewandelt werden.
-> Es gibt einen I2C-Bus der als Service Bus funktioniert.
-> XMegas sind schon einige beschafft deshalb probier ich es mit denen.

Ich habe auch schon probiert I2C hochzutakten, ging auch bis 600kHz 
problemfrei, aber ab 600kHz wurde es problematisch und die Daten wurden 
nicht mehr einwandfrei interpretiert.

Autor: Hans W. (hans_w30)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, also hab das ganze dann jetzt auch hinbekommen. Und zwar indem ich 
MISO und MOSI einfach verbunden habe und Software mäßig immer nur bei 
einem (Mast oder Slave) einen Ausgang habe. Ist zwar einiges an 
Umschalten und ein ziehmliches gefriemel, aber es funktioniert.

Danke für eure Hilfe

Autor: Martin R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hans,

könntest du vielleicht deinen Code für die SPI Verbindung mal hier 
reinstellen, bin nämlich auch verzweifelt am basteln. Will über diese 
Halbduplex Verbindung einen Maussensor auslesen.

Danke.
Gruß Martin

Autor: Hans W. (hans_w30)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab hier mal meine Ausführung. Bin mir aber nicht mehr sicher ob diese 
hundert Prozentig geht. Hab noch weiter dran herumgebastelt mit DMA 
Controller und so späsen.
Wenn ich mich noch recht entsinne schicke ich als erstes Byte die Anzahl 
der folgenden Bytes, dies müsstest du dann herausnehmen. Mein Code 
basiert auf den Atmel Treibern (twi_driver.h).

Gruß Hans

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.