Forum: Mikrocontroller und Digitale Elektronik Mehrere UARTs auf eine Schnittstelle


von Terfagter (Gast)


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

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

von AVRuser (Gast)


Lesenswert?

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

von Terfagter (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Terfagter (Gast)


Lesenswert?

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

von ArthurDent (Gast)


Lesenswert?

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.

von Terfagter (Gast)


Lesenswert?

Achja stimmt.
Das werde ich mal so probieren...
Danke

von Frank K. (fchk)


Angehängte Dateien:

Lesenswert?

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

von Terfagter (Gast)


Lesenswert?

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?

von Terfagter (Gast)


Lesenswert?

Mit VSS meinte ich VSS von den Temperatursensoren...

von Peter D. (peda)


Lesenswert?

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

von Terfagter (Gast)


Lesenswert?

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?

von Terfagter (Gast)


Lesenswert?

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?

von Frank K. (fchk)


Lesenswert?

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
Noch kein Account? Hier anmelden.