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 (Gast)
>Vielleicht ist das mit einem Mux doch machbar?
Nein.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.