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
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
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?
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
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
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
@ 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
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
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?
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.
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.