mikrocontroller.net

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


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hartmut Semken (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Katherine J. (katherine)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Florian (Gast)

>Vielleicht ist das mit einem Mux doch machbar?

Nein.

Autor: Katherine J. (katherine)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.