Forum: Mikrocontroller und Digitale Elektronik Mehrere RS232 Geräte an einem Atmega8 (nur lesend)


von Florian (Gast)


Lesenswert?

Hallo zusammen,

ich würde gerne mit einem ATMega8 eine bidirektionale RS232 Verbindung 
benutzen und zusätzlich möglichst viele weitere (bis zu 8) 
unidirektionale RS232 Verbindungen empfangen (nicht senden). Die 
Unidirektionalen senden mit einer Baudrate von 1200 (8N1) quasi 
durchgängig. Wie schnell die bidirektionale Verbindung ist, ist egal.

Ist sowas ohne größere Krämpfe möglich in Software zu bauen? Oder gibt 
es irgendwelche Zusatzhardware, die mir das Leben erleichtert?

Danke schonmal
Viele Grüße, Flo

von Hartmut Semken (Gast)


Lesenswert?

Naja, wie viele sollen es denn sein.
Eine serielle Schnittstelle in Sowtware ist an sich kein Problem, da 
gibt es verschiedene Implementierungen.
Die C-Variante, die ich gern einsetze, kostet aber einiges an CPU, 
mehrere davon wäre nicht möglich.

Wenn Stromverbrauch nicht die Hauptrolle spielt, dann programmier Dir 
einen Rs232-Empfänger, der als SPI oder TWI-Slave ausgelesen werden 
kann.
Davon dann 8 Stück an den Bus, ein neunter als Master holt die Daten ab.
Jeder Slave kann selber ein wenig puffern, Handshake bedienen usw.
Bei 1,35 Euro für einen Atmega8 kann man sich das auch finanziell 
leisten.

hase

von Florian (Gast)


Lesenswert?

Hallo Hartmut, danke für den Tipp. Verstehe ich dich richtig, dass du 
vorschlägst, dass ich für jeden RS232, den ich lesen will, einen 
separaten Atmel hinsetzen soll? Das klingt etwas zuviel Overhead. Würde 
das ganze gerne auf einer 10x10 Platine unterbringen.

Gibt es sowas nicht vielleicht fertig in einem einzigen Chip? Oder gibt 
es Atmels, die direkt mehrere RS232 in Hardware haben?

von Katherine J. (katherine)


Angehängte Dateien:

Lesenswert?

Moin Florian,
hatte mal ein ähnliches Problem. Einen UART am uC mit vier weiteren 
Geräten.

Sprich doch jeden separat an und empfange diesen anschließend, dann die 
folgenden.

Gruß Katherine

von Florian (Gast)


Lesenswert?

Hallo Katherine,

das sieht nach einer netten Idee aus. Schaffe ich es denn mit dem Atmel 
schnell genug zu multiplexen um alle zu lesen ohne (viele) Daten zu 
"übersehen"?

Gruss, Flo

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Florian schrieb:

> das sieht nach einer netten Idee aus. Schaffe ich es denn mit dem Atmel
> schnell genug zu multiplexen um alle zu lesen ohne (viele) Daten zu
> "übersehen"?

Wenn Du nicht unter Kontrolle hast, wann die Dinger Deinem µC was 
schicken, dann bist Du mit einem (De)Multiplexer aufgeschmissen.

Katherine schrieb ja:

| Sprich doch jeden separat an und empfange diesen anschließend, dann die
| folgenden.

Sie setzt also voraus, Dass Du dem jeweiligen externen Gerät selbst den 
"Startschuss" gibst.

Ich selbst benutze zwei MC1489P und einen 74HC148 mit nachgeschaltetem 
74HC375, um 8 Barcode-Scanner einzulesen. Da ist gewährleistet, dass sie 
nicht gleichzeitig senden. Deshalb gibt es da kein Problem.

Gruß,

Frank

von Falk B. (falk)


Lesenswert?

@  Florian (Gast)

>benutzen und zusätzlich möglichst viele weitere (bis zu 8)
>unidirektionale RS232 Verbindungen empfangen (nicht senden). Die
>Unidirektionalen senden mit einer Baudrate von 1200 (8N1) quasi
>durchgängig. Wie schnell die bidirektionale Verbindung ist, ist egal.

Die Unidirektionale macht man mit dem Hardware UART. Die 8x Empänger 
kann man per Software machen. Bei Überabtastung mit 8x1200=9600 Hz muss 
man halt mit den ~100µs einen 8fach Soft-UART hinbekommen. Sportlich, 
aber machbar. Wäre mal was für ein Tutorial ;-)

>es irgendwelche Zusatzhardware, die mir das Leben erleichtert?

Es gibt diverse Mehrfach-UARTs als IC. Hab aber leider keine Namen 
parat.

MFG
Falk

von Florian (Gast)


Lesenswert?

Hallo,

vielleicht sollte ich etwas mehr zur Anwendung sagen, dann wird 
vielleicht klarer, ob es für mich machbar ist oder nicht.

Die Geräte senden alle durchgängig eine bestimmte Dummy Bytefolge, die 
dauernd wiederholt wird. Bin mir nicht sicher wie schnell wiederholt 
wird, aber ich vermute, relativ langsam (Zehntelsekundenbereich). Die 
Geräte senden jetzt eine andere Bytefolge, wenn der Benutzer am anderen 
Ende eine Taste drückt. Ich will feststellen, welcher Benutzer zuerst 
die Taste drückt.

Da das "Taste ist gedrückt"-Signal auch wiederholt wird und es 
unwahrscheinlich ist, dass zwei Benutzer exakt zur gleichen Zeit 
drücken, ist es vermutlich nicht soo wichtig, dass es 100% exakt 
funktioniert.

Vielleicht ist das mit einem Mux doch machbar? Falls ja, welcher IC ist 
dafür zu empfehlen?

Danke, Gruss, Flo

von Florian (Gast)


Lesenswert?

Katherine: Ich versuche gerade deine Schaltung nachzuvollziehen. Sehe 
ich es richtig, dass die OR Gates da sind, weil RS232 im Idle Zustand TX 
auf High hat? Der Demux wählt quasi aus, welches TX auf GND geht (wenn 
gesendet wird), alle andern sind auf High und senden dadurch quasi 
nicht, ja?

von Helmut (Gast)


Lesenswert?

Vorschlag:
Falls ein Master (PC) und viele Geräte vorhanden sind, schlage ich 
folgendes vor:

1. Vom Master Tx Verbindungleitung an alle Rx der Slaves legen. Ein 
Befehl vom Master geht an alle Slaves.

2. Bei allen Slaves an den Tx Ausgang eine Diode (mit der 
Anode)anschließen, wobei alle Kathode verbunden werden und mit einem R 
auf -12V verdrahte werden. Dieser Anschluß ist auf Rx des Masters zu 
legen.

Die Schaltung ist aber nicht getestet. Nur ein Vorschlag.

von Falk B. (falk)


Lesenswert?

@  Florian (Gast)

>Vielleicht ist das mit einem Mux doch machbar?

Nein.

von Katherine J. (katherine)


Lesenswert?

Florian schrieb:
> Katherine: Ich versuche gerade deine Schaltung nachzuvollziehen. Sehe
> ich es richtig, dass die OR Gates da sind, weil RS232 im Idle Zustand TX
> auf High hat? Der Demux wählt quasi aus, welches TX auf GND geht (wenn
> gesendet wird), alle andern sind auf High und senden dadurch quasi
> nicht, ja?
Korrekt, so habe ich mir das gedacht.

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.