mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mehrere UARTs auf eine Schnittstelle


Autor: Terfagter (Gast)
Datum:

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

Autor: Frank K. (fchk)
Datum:

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

Autor: AVRuser (Gast)
Datum:

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

Autor: Terfagter (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Terfagter (Gast)
Datum:

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

Autor: ArthurDent (Gast)
Datum:

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

Autor: Terfagter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja stimmt.
Das werde ich mal so probieren...
Danke

Autor: Frank K. (fchk)
Datum:
Angehängte Dateien:

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

Autor: Terfagter (Gast)
Datum:

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

Autor: Terfagter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit VSS meinte ich VSS von den Temperatursensoren...

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Terfagter (Gast)
Datum:

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

Autor: Terfagter (Gast)
Datum:

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

Autor: Frank K. (fchk)
Datum:

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

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.