Forum: Mikrocontroller und Digitale Elektronik Datenkollision an serielle Schnittstelle


von VINTAGE-Woman (Gast)


Lesenswert?

Hallo Zusammen,

bin kein Expertin von Schaltungstechnik, so habe ich ein Problem bei der 
Schaltungsentwurf.

Ich möchte zwei oder drei verschiedene Module wie z.B. RFID-Reader oder 
Sensor-Empfänger an einem Mikrocontroller anschliessen und die von 
Module eingelesenen Datenrahmen verarbeiten. Als Mikrocontroller wähle 
ich ATMega128, der 2 serielle Schnittstelle besitzt. Aber eine davon 
möchte ich für die Kommunikation mit anderem Mikrocontroller benutzen. 
D.h. die Signalen (gleicher Pegel von 5 Volt) von zwei Module 
(RFID-Leser und Sensor-Empfänger) müssen durch eine serielle 
Schnittstelle eingelesen werden.

Hier stellt sich die Frage, wie ich die Schaltung entwerfen sollte, 
damit die Kollision der Signale nicht auftritt, wenn die beiden Signale 
von beiden Module gleichzeitig nach Mikrocontroller gesendet sind.

Ich habe nun überhaupt keine Ahnung. Kann jemand hier als Erfahrene mir 
weiter helfen? Vielen Dank im Voraus!


Liebe Grüße

Vintagewomen

von holger (Gast)


Lesenswert?

>Hier stellt sich die Frage, wie ich die Schaltung entwerfen sollte,
>damit die Kollision der Signale nicht auftritt, wenn die beiden Signale
>von beiden Module gleichzeitig nach Mikrocontroller gesendet sind.

Dann hast du leider Pech gehabt ;) Das geht nicht.

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

Multiplexer

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du musst durch ein geeignetes Softwareprotokoll dafür sorgen, daß es 
nicht zu Kollisionen kommt. Die angeschlossenen Busteilnehmer dürfen 
erst nach Aufforderung durch den Busmaster (Deinen Controller) Daten 
übertragen.

von VINTAGE-Woman (Gast)


Lesenswert?

Hallo Zusammen,

danke für die Antworten. Hier eine weitere Frage für Rufus t. Firefly, 
meinst Du es, dass ich zwei Schalter, die durch Mikrocontroller 
gesteuert sind, in den zwei Busteilnehmer einbauen? Welche Schalter kann 
ich benutzen?


Liebe Grüße

Vintagewomen

von peter-neu-ulm (Gast)


Lesenswert?

Das Protokoll der RS232- Schnittstelle kennt die Leitungen RTS... usw, 
die die Sende-Empfangsbereitschaft der andren Geräte melden. Diese 
leitungen sind gerade für den Zweck vorgesehen, den Datenaustausch 
freizugeben, zu sperren und zu steuern.

Auch sind atmega nicht so teuer, dass man nicht für jede 232 einen 
eigenen mega8 nehmen könnte, der als Datenhandler/Puffer arbeitet.

von Karl (Gast)


Lesenswert?

In deinem Fall wäre I2C als Schnittstelle passender.

Die Serialschnittstelle (RS232 mit TTL-Pegel) ist eigentlich nur für 
Point-to-Point Verbindungen geeignet/gedacht.

I2C hingegen ist für bis zu 127 Geräte ausgelegt. Dann hast du einen 
Master (dein Mega 128) und die anderen Geräte sind Slaves. Gibt übrigens 
auch gleich fertige ICs als Sensoren mit I2C-Schnittstelle (zB LM75 als 
Temperatursensor)

Mit deim RFID Leser musst du halt schaun ob der I2C hat bzw ein µC 
hinbasteln welcher die Schnittstelle dann umsetzt.

Gruß

von Ulrich P. (uprinz)


Lesenswert?

Bevor man 'mach alles anders' oder 'geht nicht' schreibt, sollte man 
nachfragen, welche Möglichkeiten überhaupt vorhanden sind.

Vintagewomen möchte verschiedene RFID Leser und Sensoren an einen Mus 
klemmen, was aber nicht sagt, ob sie einen Einfluss auf diese 
Komponenten hat und ob diese busfähig sind. Auch die Idee mit den 
Busumschaltern ist nur dann mögllich, wenn man den Komponenten mitteilen 
kann, ob man gerade bei ihnen ist. Sonst sendet der RFID Leser seine 
empfangenen Kennung fröhlich ins Nirvana oder der Controller schaltet 
mitten im Datagramm auf den Bus und versteht nur Bahnhof.

Sollten die Komponenten also busfähig sein, so schreib mal, welche 
Optionen da bestehen. Sollten sie es nicht sein, so hilft nur ein 
kleiner Controller pro Teilnehmer, der diesen dann an einen gemeinsamen 
Bus koppelt.

Welche Bus man da nimmt, hängt von der Länge ab. Schließt man die 
Komponenten über lange Kabel an eine Platine an, auf der die kleinen 
Controller die Daten an den Großen Senden, so kann man gerne I2C nehmen.
Verbaut man die kleinen Controller vor Ort an den Komponenten und führt 
dann lange Kabel zu dem einen großen Controller, dann nimmt man RS485 
und nicht I2C.

Aber nu schreibt mal mehr zu Deinen Readern und Sensoren, Vintagewomen, 
dann kann man Dir auch helfen.

Gruß, Ulrich

von aha (Gast)


Lesenswert?

Oder einen Mega64 verwenden, der 4 Schnittstellen hat.

von Ulrich P. (uprinz)


Lesenswert?

Der Mega64 hat gleich zwei Probleme, erstens hat er nur 2 USARTs und 
zweitens ist er abgekündigt. Der XMega64A1 hat dafür 8 USARTs ist aber 
noch preliminary.

Das Stichwort ATXMEGA oder XMEGA gibt weder bei Reichelt noch bei 
digikey einen Treffer. ATMEL wollte sich zuerst auf dei 128er und 256er 
der XMega Serie konzentrieren, bevor sie die kleineren davon in Angriff 
nehmen.

Gruß, Ulrich

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ne weitere lösung wäre natpürlich eine Software UART...

von Ulrich P. (uprinz)


Lesenswert?

Ja, aber weil man zu wenig weiß, kann man nur raten. Die Kaba Leser 
sprechen auch ein nettes Ein-Draht Protokoll. Das kann man sogar mit nur 
einem halben Software-UART lesen. Aber was nützt das Raten, wenn nicht 
mehr Infos kommen. Vielleicht unterstützt der RFID ja auch Adressierung 
oder neben RS232 auch RS485... Man weiß ja nicht :)

von Falk B. (falk)


Lesenswert?

@  Läubi .. (laeubi) Benutzerseite

>Ne weitere lösung wäre natpürlich eine Software UART...

Die brauchbarste Lösung wäre Brain 2.0. Bei schlechter Verfügbarkeit 
tuts auch Nachdenken 1.5.
Wer für die paar popeligen Sensoren drei oder mehr UARTs braucht, ist 
schlimmer als jeder BASCOM-Programmierer ;-)

MFG
Falk

von VINTAGE-Woman (Gast)


Lesenswert?

Hallo,

danke für alle Antworten. Die Sensor-Empfänger ist nicht ausschaltbar, 
aber der RFID-Leser ist durch Befehl ausschaltbar. Software USART ist 
eine Variante. Aber für 3 oder 4 Moduls ist nicht mehr geeignet. Ich 
habe auch schon viel im Internet nachgeschaut und möchte fragen, ob es 
ein Multiplexer in der Markt gibt, der die "Reihefolge" der ankommenden 
Siganlen aussortieren kann und damit kann der Controller in dieser 
Reihefolge die Signale ein nach dem anderen einlesen.


Liebe Grüße

Vintagewomen

von Ulrich P. (uprinz)


Lesenswert?

Hi!

@Falk: Nana, bitte, dann rück mal raus, was B2.0 oder ND1.5 bei Dir 
ausgegeben haben :)

@Vintagewomen:
Du kannst einen Multiplexer nehmen, und legst zusätzlich die 
Datenleitung auf einen Interrupt-Eingang. Wenn Du schnell genug 
umschaltest könnte das funktionieren, dass Du genug vom Start-Bit des 
Telegramms mit bekommst um es noch durch den USART zu schicken.
Andere Lösung wäre, dass die RFID-Leser nicht geschrieben werden müssen 
und entweder sie eine eigene Adresse mitsenden, oder die Information, an 
welchem Leser die Karte erkannt wurde egal ist. Dann klemmt man alle 
Leser auf eine Empfangsleitung (Wired-Or mit Pullup bei 5V Pegeln).
Ein serieller Multiplexer ist nur dann eine Lösung, wenn man verlorene 
oder verstümmelte Telegramme einkalkuliert.

Wir wissen immer noch zu wenig:
Welche Leser, welche Sensoren, welche Leitungslänge, welche Wichtigkeit?

Fragen über Fragen...

Gruß, Ulrich

von Peter (Gast)


Lesenswert?

@Ulrich P.

wie soll das denn gehen, wenn 2 geräte gleichzeitig daten senden? Der 
Multiplexer müsste so intelligent sein das er 1byte entgehen nimmt und 
dann an den µC weiter leitet - am besten mit einer ID des einganges vo 
wo er das byte empfangen hat.

von Stephan H. (stephan-)


Lesenswert?

Auch ein CMOS Schalter ist ja ein Multiplexer. Oder ?
Also einfach einen 4051 oder 4053 nehmen RX und TX 2x rein und 1x raus.
Adressierung über A/B und gut ist.

von Falk B. (falk)


Lesenswert?

@Ulrich P. (uprinz)

>@Falk: Nana, bitte, dann rück mal raus, was B2.0 oder ND1.5 bei Dir
>ausgegeben haben :)

Hier wird schon genug orakelt. Ne gescheite Antwort kann man erst geben, 
wenn man gescheite Informationen hat. Haben wir noch nicht (wirklich).

>Du kannst einen Multiplexer nehmen, und legst zusätzlich die
>Datenleitung auf einen Interrupt-Eingang. Wenn Du schnell genug
>umschaltest könnte das funktionieren, dass Du genug vom Start-Bit des
>Telegramms mit bekommst um es noch durch den USART zu schicken.

AUA! Solche Stunts würe ich nicht mal einem Profi empfehlen!

>Wir wissen immer noch zu wenig:

Aha . . .

MFG
Falk

von adsf (Gast)


Lesenswert?

CD4066

von Ulrich P. (uprinz)


Lesenswert?

So, bevor ich mich ins Wochenede verabschiede:

@Peter: Ich hatte ja gesagt, dass man verlorene Telegramme 
einkalkulieren muss.

@Falk: Ist ein Stunt, klar, aber ich habe hier Leser, die mit 1200Baud 
herumjuckeln und das sollte gehen, wenn der uC nix anderes zu tun hat.

@Vintagewomen: Wir wissen immer noch nicht genug und meine Glaskugel ist 
zum Putzen beim Optiker...

Egal, was man da bastelt. Mit MUX und bla ist alles murks. Wenn man 
wirklich keine Chance hat, die Protokolle der einzelnen Busteilnehmer 
auf einen gemeinsamen Nenner zu bringen, dann sollte man sich seinen 
gemeinsamen Nenner selber schaffen. Basta. Und das würde hier bedeuten, 
dass man einfache billige kleine Controller nimmt, die das Protokoll 
konvertieren und sich mit einem Master unterhalten, oder gleich auf ein 
Protokoll konvertieren, dass ein PC versteht.
Gerade da das ganze hier nach einer Übungs- und Lernaufgabe klingt, 
würde ich den Einsatz einzelner kleiner Controller empfehlen. So kann 
man das ganze Projekt sowohl in der Hardware als auch in der Software in 
einzelne Lernschritte aufteilen, die sich vom Logischen bis in die 
Hardware durchziehen.

Logisch, ich würde auch einfach zwei SC16IS762 neben den AVR kleben und 
hätte damit 4 USARTs an einem SPI oder einem I2C. Aber das ist schon 
übelste SMD Technik und die Fragestellerin machte nicht den Eindruck, 
als wäre das ihr täglich Brot.

Bis denne, Ulrich

von rs (Gast)


Lesenswert?

Es gibt auch dafür schon was zum basteln:

http://www.vimms.org/multiplex/docu.html

von VINTAGE-Woman (Gast)


Lesenswert?

Hallo,

bin nach einigen Tagen wieder hier und habe ich eine Lösung am 
Wochenende gefunden, deswegen ich einmal hier die Lösung posten. Mein 
problem ist, wie die Datenkollision an seriellen Schnittstellen zu 
vermeiden. Meine Methode ist, dass man ein 74151N (Multiplexer) und ein 
74138N (Demultiplexer) benutzen kann. Durch diesen Mux kann der 
Mikrocontroller durch die Adressenbusse (Addr0 bis Addr2) ein von 8 
Eingänge freiwillig auswählen. Solche Eingänge sind auch mit der 
Interrutpins des Mikrocontrollers angeschlossen, so dass die unerwartet 
ankommende Daten bemerkt werden können.
Ich hoffe, wenn jemand noch Idee hat, der einmal posten kann. Vielen 
Dank!


Liebe Grüße

Vintagewomen

von Peter D. (peda)


Lesenswert?

VINTAGE-Woman schrieb:
> Software USART ist
> eine Variante. Aber für 3 oder 4 Moduls ist nicht mehr geeignet.

Sagt wer?

Wir wissen ja immer noch nicht, welche Baudrate und Datenrate.

SW-UART Senden geht für beliebig viele, man kann ja nacheinander senden.

SW-UART Empfang per Timerinterrupt für einen Port, also 8* sollte bis 
9600Baud kein Problem sein:
4-fach Abtastung = 26µs Interruptrate = 520 Zyklen @20MHz


Peter

von VINTAGE-Woman (Gast)


Lesenswert?

@Peter,

Hallo Peter,
ja, ich weiss nicht so viel über SW-USART und Mikrocontorller und bin 
nur ein Anfänger. Vielen Dank für Deinen Beitrag. Die Baudrate ist 9600.

Ich möchte nun einen Mux benutzen und habe folgendes Problem. Kann man 
Port F (PF0..PF3) von ATmega128 als normale IO (hier für Adressenbus) 
verwenden?


Liebe Grüße

Vintagewomen

von Michael U. (amiga)


Lesenswert?

Hallo,

VINTAGE-Woman schrieb:
> bin nach einigen Tagen wieder hier und habe ich eine Lösung am
> Wochenende gefunden, deswegen ich einmal hier die Lösung posten. Mein
> problem ist, wie die Datenkollision an seriellen Schnittstellen zu
> vermeiden. Meine Methode ist, dass man ein 74151N (Multiplexer) und ein
> 74138N (Demultiplexer) benutzen kann. Durch diesen Mux kann der
> Mikrocontroller durch die Adressenbusse (Addr0 bis Addr2) ein von 8
> Eingänge freiwillig auswählen. Solche Eingänge sind auch mit der
> Interrutpins des Mikrocontrollers angeschlossen, so dass die unerwartet
> ankommende Daten bemerkt werden können.

Ah ja. Und wacht der Mikrocontroller dann vor Schreck, wenn von einem 
Deiner Module gerade Daten empfangen werden und ein anderer zu Senden 
beginnt und damit den Interrupt auslöst? Daten vom ersten wegwerfen, um 
den zweiten zu empfangen oder Daten vom zweiten wegwerfen?

Und täglich grüßt das Murmeltier...
Zitat aus Posting 1:

>Hier stellt sich die Frage, wie ich die Schaltung entwerfen sollte,
>damit die Kollision der Signale nicht auftritt, wenn die beiden Signale
>von beiden Module gleichzeitig nach Mikrocontroller gesendet sind.

Gruß aus Berlin
Michael

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.