Forum: Mikrocontroller und Digitale Elektronik Schnittstelle zwischen zwei uC


von Marco S. (hochfrequenz)


Lesenswert?

Hallo,

ich habe ein Modul auf dem ist ein uC untergebracht. Dieser soll dann 
über eine offene Schnittstelle kurze Daten mit max. 10KBit/s  mit einem 
ansteckbaren weiteren Modul austauschen. Dieses Modul widerrum hat auch 
einen uC. Welchen aber, soll völlig offen sein und demjenigen überlassen 
sein, der sich an mein Modul andockt.

Ich möchte also für die steckbare Schnittstelle nun eine 
Übertragungsart/Taktrate/Protokoll usw.  vorgeben.

Z.B.: UART, oder SPI, oder I2C

Auf beiden uC´s muß dies einfach zu implementieren sein. Beide UC´s 
müssen Kommunikationswunsch signalisieren können (also kein 
Master/Slave).

Was empfiehlt ihr als Schnittstelle vorzugeben. Das wichtigste ist => 
einfache Implementierung für denjenigen, der sich mit seinem selbst 
entwickelten Modul an mein Modul andockt.

Eine Synchronisation des uC-Taktes soll auf gar keinen Fall über die 
Schnittstelle erfolgen.


Ich hoffe, es ist so einigermaßen klargeworden, was ich meine.


Mit besten Grüßen
Marco

von srb (Gast)


Lesenswert?

Na, wenns kein Master/Slave sein soll und auch noch sehr einfach, dann 
einfach UART. Jeder hat ein TxD und ein RxD. Somit kann jeder senden, 
wann immer er will.

von Michael U. (Gast)


Lesenswert?

Hallo,

I2C würde auch sinnvoll sein, es ist prinzipiell ein Multi-Master-Bus 
möglich. Macht dann aber etwas mehr Software-Aufwand 
(Kollisions-Erkennung).

Gruß aus Berlin
Michael

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

UART ist das Einfachste und Zuverlässigste, ist in 10 Minuten 
programmiert.
Sinnvoll wäre es, die Ein/Ausgänge mit Serienwiderständen (und 
zusätzlichen Dioden) zu versehen, zum Schutz gegen ESD beim Stecken und 
Ziehen des externen Moduls.

von Marco S. (hochfrequenz)


Lesenswert?

Danke für den Hinweis auf die Schutzdioden /Schutzwiderstände

Frage: Wenn einer der typischen Klein-uC´s einen Hardware UART hat, 
produziert dann dieser automatisch einen Interrupt, sobald ein gültiges 
Byte empfangen wurde? Oder muß man eine seperate Interruptsignalleitung 
zwischen den beiden verlegen (sprich über die Schnittstelle ziehen).

Marco

von Ronny (Gast)


Lesenswert?

Nein,es werden effektiv nur TX,RX und GND für eine UART-Kommunikation 
benötigt.Mit minimal Mehraufwand (Pegelwandler-IC,zb. MAX232) kann man 
dann ohne Software-Änderungen auch Daten mit einem PC per RS232 
Schnittstelle austauschen.

Die meisten Mikrocontroller bieten wenigstens für "Neues Byte 
empfangen","bereit nächstes Byte zu übertragen" und "Fehler" einen 
Interrupt an.Bei einigen gibt es auch nur einen allgemeinen 
UART-Interrupt wenn etwas passiert ist und man muss das genaue Ereignis 
dann aus einem Statusregister auslesen.

Generell kann man die Hardwarelast mit einer interrupt-gesteuerten 
Hardware-UART extrem klein halten.Mit einem Ringpuffer+2 Indexvariablen 
lässt sich sogar eine gepufferte Kommunikation realisieren.

Einzige Ausnahme ist die Verwendung von externen UART-Bausteinen wie z.b 
dem 16C654,da wird pro UART eine Interrupt-Leitung benötigt.Wenn man 
sich aber an die im Mikrocontroller integrierte(n) UART(s) hält,entfällt 
das natürlich.

von Ralph (Gast)


Lesenswert?

Ich würde hier eher die SPI empfehlen.

Die SPI kann als 3, 4 oder 5 Draht Interface betrieben werden.
die  3 notwendigen Pins sind Master_out; Slave_out; Clock. Der Master 
bezieht sich hier NUR auf den Kommunikationspartner der den Clock 
ausgibt.
Die beiden zusätzlich möglichen Signale sind Slaveselect und Busy.
Mit diesen beiden Signalen kann die Kommunikation synchronisiert werden, 
teilweise Hardware unterstützt. Bei einigen µC können diese beiden 
Signale jedoch nur per IO Pin und Software unterstützt werden.

Mit der SPI hast du vom Protokollaufwand und der Flexibilität 
wahrscheinlich die beste Ausgangslage für eine solche Kopplung zweier 
Module.

Die Übertragungsrate kann je nach verwendeten µC ohne Probleme bis zu 10 
MBit/s betragen.

Das Anfordern einer Kommunikation lässt sich unabhängig von den 
Signalwegen über eine IO Leitung erledigen. Dies sollte also keine 
Einschränkung für die Schnittstellenauswahl bedeuten.

Ralph

von guro (Gast)


Lesenswert?

hi,
SPI hat den vorteil, dass es mit einfachen GPIOs simuliert werden kann, 
und dass es relativ schnell (weil sehr primitiv) ist.
nachteil ist allerdings, dass man zusätzliche steuerleitungen braucht. 
wer ist momentan der busmaster? wer gibt den takt an? 
kollisionserkennung?
auch wenn man die volle bandbreite nutzen will (also SPI full duplex 
betreiben möchte), braucht man z.b. techniken wie 'byte stuffing', da 
ein separater empfang oder separates senden nicht möglich sind (im 
gegensatz zu UARTs).
viele MCUs unterstützen SPI hardwareseitig, allerdings mit 
einschränkungen. meistens sind die schieberegister nur 8 bit breit etc. 
der erfinder des SPI ist meines wissens motorola (heute freescale). ich 
würde mich mal auf deren webseite nach specs umsehen (timing usw.)...

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.