Hallo zusammen, für ein Schülerprojekt haben wir mehrere Module, die alle über die UART-Schnittstelle funktionieren. Unser Controller ist ein ATMega128L @8Mhz. Wir lesen 4x einen DS18B20 1-wire Temperatursensor aus. (Empfangen; jede sec 1 mal auslesen) 1x GPS-Modul (Empfangen; jede sec 1 mal auslesen; 9600bps) 1x GSM-Modul (Senden; nur bei Bedarf senden; 4800bps) 1x 433 Mhz-Funkmodul (Senden/Empfangen; alle 3-5 sec 1 mal senden; immer empfangen; 4800bps) Da der ATMega128 nur über 2 UART Schnittstellen verfügt, stellt sich uns die Frage, wie wir am besten die Kommunikation herstellen. In der Suche haben wir schon einiges gefunden, jedoch wissen wir jetzt nicht was das beste für unseren Fall wäre. Sollen wir einen Multiplexer nehmen? Wenn ja, welcher Baustein wäre hierfür der Geeignetste? Gibt es eine Anleitung für diesen Fall? Muss überhaupt ein weiteres Bauteil verwendet werden, weil wir auch oft gelesen haben, das bei TX am jeweiligen Modul eine Diode zwischen geschaltet wird. Wie weiß den dann das jeweilige Modul wann es senden darf und wann nicht? Noch eine Frage: Reicht ein normales Flachbandkabel aus, um die Module mit Strom zu versorgen und die RX/TX Leitung zu verwenden, oder sollte man für die Steuerleitungen lieber ein Koax-ähnliches Kabel verwenden? Die Länge beträgt maximal 60cm. Könnte ihr einen Stecker und eine Buchse empfehlen, die möglichst flach sind? Buchse auf der Platine und Stecker am Flachband oder an einem anderen Kabel. Wir würden uns über jede Hilfe freuen.
1. Es gibt auch Soft-UART Implementationen. Schaut bei Atmel die Application Notes durch, da werdet Ihr fündig. 2. Für die Onewire-Kommunikation könnt Ihr auch einen DS2482S-100+ benutzen, eine I2C-1ware Bridge. Damit habt Ihr nur noch 3 serielle Geräte zu versorgen. 3. Von Maxim gibts SPI-UARTs, auch gleich mit eingebautem Pegelwandler auf RS232: MAX3100 (mit CMOS Ausgängen), MAX3110/3111 (mit RS232-Ausgängen). Die Dinger sind aber nicht so furchtbar billig. 4. Die UART-Pins des AVRs haben ganz normalen CMOS-Logikpegel, d.h. Ihr könnt Euch bei der 74HC... Serie bedienen, die ganz sicher das passende bereithält. Ich würde jetzt fast sagen: Nehmt den DS2482-100 für das Onewire-Geraffel, dazu ein Software-UART z.B. fürs GPS, wo Ihr nichts senden, sondern nur empfangen müsst, und dann sollte das ganze laufen. Für die Verbindungen langt Flachbandkabel. Immer zwischen zwei Signale ein Ground legen, und auf den Spannungsabfall auf den Versorgungsspannungen achten (ggf mehrere Adern dafür nehmen), wenn Ihr etwas betreibt, was mehr Strom ziehen sollte. fchk
Hallo, da der Mega128 ein externes 8bit-Speicher-Interface bietet, kann man auch damit einen Baustein über den Daten- und Adressbus ankoppeln (wenn die dafür nötigen Pins noch frei sind/frei gemacht werden können). Aus dem PC-Bereich gibt es diverse Bausteine (mit bis zu 8 UARTS je Chip) mit 8bit-Interface. Stichwort: 16550 und Konsorten; gibts von verschiedenen Herstellern. Bei Bedarf müsste dann noch ein Pegelwandler ala MAX232 o.ä. zugefügt werden. (Meist haben die Bausteine auch noch FIFOS im Sende- und Empfangspuffer.) Ein "Umschalten" der vorhandenen RX-Schnittstellen des Mega128 halte ich für kaum möglich, insbesondere dann, wenn die UART-Einstellungen nicht gleich sind sind und Module "von sich aus" (also ohne Aufforderung von aussen) Daten senden. Dabei ginge dann einiges verloren, wenn nicht jeder seine eigene RX-Leitung zum UART hat ... MfG
>Danke schonmal. Gibt es denn für den DS2482 eine C-Lib die ich nutzen kann? Ich habe bisher keine Lib dafür gefunden. Das wäre etwas einfacher für uns..
Terfagter schrieb: > Wir lesen 4x einen DS18B20 1-wire Temperatursensor aus. (Empfangen; jede > sec 1 mal auslesen) Ohne UART direkt in Software > 1x GPS-Modul (Empfangen; jede sec 1 mal auslesen; 9600bps) 1. UART > 1x GSM-Modul (Senden; nur bei Bedarf senden; 4800bps) Software-UART-Sender > 1x 433 Mhz-Funkmodul (Senden/Empfangen; alle 3-5 sec 1 mal senden; immer > empfangen; 4800bps) 2. UART Also kein Problem. Peter
@Peter:
> Ohne UART direkt in Software
Wie meinst du das? Wie werden denn dann die Sensoren ausgelesen?
Die anderen Punkte von dir sind klar. Das werde ich mal so probieren.
Wenn die anzusprechenden Devices alle nur auf Anforderung antworten und nicht gleichzeitig kommunizieren sollen, kann man die TX Leitungen der Devices einfach ueber ein >wired or< auf die RXD Leitung des uC legen. Dieser weiss ja wann er welches Device anspricht und welche Art Antwort er erwartet.
Terfagter schrieb: >>Danke schonmal. > Gibt es denn für den DS2482 eine C-Lib die ich nutzen kann? Ich habe > bisher keine Lib dafür gefunden. Das wäre etwas einfacher für uns.. Das habe ich mal vor Jahren gemacht. Rein experimentell, schnell dahingehackt und ohne Gewähr, weil der Baustein nachher nie eingesetzt wurde. Für I2C gibts Code von Atmel. Ansonsten halt ins Datenblatt schauen. Das musst Du ohnehin machen. fchk
Um nochmal kurz auf die "wired or" Variante zurück zukommen. Heißt das ich verbinde VSS jeweils mit einem IO-Pin des µC und alle Uart-Pins der Sensoren mit einem Uart-Pin des µC. Und dann frage ich jeweils den Sensor ab, bei dem ich den IO-Pin auf high gesetzt habe. Funktioniert das so? Dann bräuchte ich ja keinen I2C Baustein mehr... Funktioniert das auf die Entfernung µC-DS18B20 max. 50 cm?
Terfagter schrieb: > Wie meinst du das? Wie werden denn dann die Sensoren ausgelesen? Das 1-Wire ist doch kein UART-Protokoll, die UART wird quasi mißbraucht. Daher kann man einfacher das 1-Wire direkt machen. Dann reicht auch ein Pin aus und man braucht keine Trickschaltungen. Z.B.: Beitrag "DS1820, DS18B20 in C" Peter
Gibt es einen Controller von Atmel, der mindestens 4 UART Schnittstellen hat, der aber auch über ISP programmiert werden kann? Die ATXMega Reihe hat doch so was glaub ich, die können aber nur über Jtag programmiert werden und einen Jtag Adapter haben wir nicht. Oder denke wir da falsch?
Ich habe ober ganz vergessen zu schreiben, dass wir noch eine weitere UART verwenden, die über einen FT232 auf eine USB-Schnittstelle geht. Es wir aber nur nach aussen gesendet. Ginge das dann auch über eine SOft-UART?
Terfagter schrieb: > Gibt es einen Controller von Atmel, der mindestens 4 UART Schnittstellen > hat, der aber auch über ISP programmiert werden kann? Die ATXMega Reihe > hat doch so was glaub ich, die können aber nur über Jtag programmiert > werden und einen Jtag Adapter haben wir nicht. Oder denke wir da falsch? Es gibt die Mega640/1280/2560 im 100-Pin Gehäuse. Die haben vier vollwertige und identische HW-UARTs und unterscheiden sich nur in der Speicherausstattung. DAS hättest Du aber auch selber auf der Atmel-Webseite nachschauen können, anstelle andere denken zu lassen. fchk
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.