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