Forum: Mikrocontroller und Digitale Elektronik Bus-Hardware gesucht


von Rangi J. (rangi)


Lesenswert?

Hallo Forum,

ich würde gerne eure Ratschläge zur Lösung folgenden Problems wissen:
Gesucht ist eine Busarchitektur für Netzwerk aus Mikrocontrollern, AVR 8 
Bit. Die sieht so aus dass es einen Master gibt (ATmega64) welcher mit 
einer seriellen Verbindung gesteuert wird und bei dem an der zweiten 
Verbindung das  Netzwerk angeschlossen ist. Dieses besteht aus vielen 
(ich sag mal ne Zahl: max. 254) Knoten angeschlossen sind. Diese 
bestehen aus unterschiedlichen Controllern, Tiny ... . Die Entfernung zu 
den Knoten ist nicht weiter als ca. 1 m um den Master herum. Wie ihr 
euch vorstellen könnt, wird das ganz schön voll, deshalb soll der Aufbau 
möglichst klein und einfach sein (und nix kosten, wie immer).
- Ich haben noch einen Vorrat an 6-pol Micro-Match Steckern  und Buchsen 
rumliegen, die würde ich gerne Verwenden. Auf der Master-Platine sollen 
eine Reihe (vllt so ca. 15) Steckverbinder vorhanden sein, die in alle 
Richtungen weggehen. Auf diesen Flachbandkabel können sich dann 
beliebige Knoten aufstecken. 2 Pole Gnd, 2 Pole +5V, Busleitung Rx/Tx, 
LED.
- Einzelne Teile der Busses müssen einfach abtrennbar sein 
(herausnehmbar).
- Die Architektur soll gemischt sein, also weder Stern noch linear. Das 
geht wegen des Platzbedarfs nicht.
- Der Stromverbrauch der einzelnen Knoten hält sich Grenzen, max. 10 mA 
geschätzt.
- Es werden auch nur geringe Mengen an Daten übertragen und auch nicht 
zeitkritisch.
- Datenflussrichtung ist in der Anwendung nur vom Master zu den Knoten, 
währende der Konfiguration auch umgekehrt.
-  Das ganze ist ein Bastelprojekt, wird nicht verkauft und auch nicht 
in großen Stückzahlen hergestellt.
- Die Knoten kann ich einzeln bei der Produktion mit unterschiedlichen 
Adressen versehen.

Ich dachte so an RS458 ohne Treiber, RxTx-Umschaltung über das Protokoll 
geregt (die AVR können ja einigermaßen Last treiben) mit fester 
Adressierung über 8-Bit-Adressen 38400Bd 8N1.
Kann das funktionieren? Oder muss ich Bustreiber verwenden? Wie gesagt 
ich möchte es möglicht einfach halten.

von mknoelke (Gast)


Lesenswert?

Rangi Jones schrieb:
> Ich dachte so an RS458 ohne Treiber, RxTx-Umschaltung über das Protokoll
> geregt (die AVR können ja einigermaßen Last treiben) mit fester
> Adressierung über 8-Bit-Adressen 38400Bd 8N1.
> Kann das funktionieren? Oder muss ich Bustreiber verwenden? Wie gesagt
> ich möchte es möglicht einfach halten.

Mal davon abgesehen das ein differenzieller Bus wie RS485 nicht mit 
Logigausgängen zu machen ist ... 254 Slaves an einem Sender ohne Treiber 
?

Brrr, stop, alles auf Anfang !

Es fehlt Dir sehr viel Grundlagenwissen über Bussysteme im allgemeinen 
und RS485 im speziellen. Da lauern 254 Fallstricke, mindestens.

RS485 ist nicht schlecht wenn Du mit einfachen UARTs auskommen willst.
Treiber müssen sein und max 32 Busteilnehmer. Bis zu 128 je nach 
Treiberbaustein.
Eine klare Busstruktur mit Terminierung an den Enden, oder Probleme ohne 
Ende.
Zur Not eine komplexe Terminierung (RC) und sehr niedrige Datenraten 
(2400 / 9600 Bps) wenn es denn eine chaotische Verkabelung sein soll.
Fehlererkennung, Behandlung, Buszugriffssteuerung etc. pp ist nicht 
trivial. Der Kram soll doch auch irgendwann mal länger als 5min am Stück 
laufen.

Du kannst Dir viel ersparen wenn Du auf CAN gehst, was die Sache aber 
relativ teuer macht.

Les erstmal die Applikationsschriften der Hersteller (z.B. TI) und fange 
klein an.


Für ernsthafte Ratschläge solltes Du dem Forum mitteilen was Du vorhast, 
wie lang Deine Verkabelung werden kann etc. pp.

von Patrick C. (pcrom)


Lesenswert?

Ueberleg dir ob RS-232 da die beste Loesung ist. Ich wuerde es mit I2C 
machen. Dann kannst du mittels I2C Multiplexer die bus einfach auf viele 
Slaves erweitern. Die I2C Multiplexer teilt deine bus damit du mehrere 
chips mit gleichem I2C adresse benutzen kannst. Auch gibt es dann die 
moeglichkeit zu 'scannen' welche Slaves anwesend sind.

Zufaelligerweise verkauft man bei www.i2cchip.com I2C Multiplexer die 
schon mit deine 6-Polige Micromatch Konnektoren funktionieren.

Wenn du dann auch noch die slaves 2 Micromatch connectors gibt kannst du 
die naechte Modul einfach dran anschliessen.

Und einen tip : mach dir die Adressierung mittels schlater/jumpers, das 
macht die debugging viel einfacher. Wenn man mit die Multiplexer 
arbeitet bracht man nicht soviele moegliche adressen pro slave

Patrick

von Rangi J. (rangi)


Lesenswert?

Okay, das Schlagwort RS485 war wohl zu viel. Das nehme ich zurück. Eine 
Leitung auf der entweder der Master redet oder einer der Slaves. Und 
dann werden ja stromtechnisch auch nicht alle getrieben, sondern nur ein 
abgang vom Master. Da sollen ja so ca. 15 Stecker drauf sein. Logisch 
ein Bus, aber physisch schon einzelnen Treiber die aber alle das gleiche 
senden. Auf den Knoten, da sieht es anders aus, hier soll der Ausgang 
die Busleitung auf GND ziehen, also alle an diesem "Subbus". Wenn du so 
willst 30 Stk. und den Master.

> Für ernsthafte Ratschläge solltes Du dem Forum mitteilen was Du vorhast,
wie lang Deine Verkabelung werden kann etc. pp.
Steht doch da! Maximal 1m.

Mit CAN hab das schon umgesetzt. Seriell über CAN-Transceiver. 
Funktioniert super, aber zu viel Hardware und zu viel Strom für diese 
anwendung.

@ Patrick C
kein Platz für Jumper oder Mäuseklavier auf den Knoten, keine freien 
Portpins.

von Rangi J. (rangi)


Lesenswert?

@ Patrick C
ATtinys habe keine I2C Hardware an board. Dann muss ich die I2C in 
Software machen. Das macht keinen Spass bei 100kHz. Ausserdem brauche 
eine Leitung mehr.
Bei der UART ist es schon was anders, die Tinys haben zwar auch diesen 
nicht an Board, aber ein Timer genügt, da kein Duplex verwendet wird.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Wenn du keine hohen Datenraten hast: mach dich nicht verrückt.
- Du brauchst (gerade bei den genannten Leitungslängen) keine 
Terminierung (wenn es nicht gerade MBit/s sein sollen)
- Du sendest nur in eine Richtung, deswegen brauchst du keine 
Arbitrierung

I2C oder UART auf TTL-Pegel wären meine Wahl.
I2C ist mit 7-bit-Adressen für 128 Knoten ausgelegt, mit 
13-bit-Adressen reicht es dir in jedem Fall. Vorteil: der Slave kann dir 
die Adressverarbeitung in Hardware abnehmen. Nachteil: zwei Leitungen.
UART (seriell) ist eine Leitung weniger, du musst aber mehr vom 
Protokoll selbst implementieren (z.B.: erstes Wort Adresse, zweites Wort 
Befehl). Sollte aber auch ohne Probleme funktionieren, so lange du 
keinen Rückkanal brauchst.

Was die Treiber angeht: entweder rechnen oder experimentieren. Die 
Leitungen und die IC-Eingänge haben eine gewisse Kapazität (siehe 
Datenblatt), die IC-Eingänge ziehen außerdem noch einen kleinen Strom 
(siehe ebenfalls Datenblatt).
Wenn du weißt, was dein Ausgang treiben kann (siehe...), rechne aus, 
nach welcher Zeit der Spannungspegel über bzw. unter der Schaltschwelle 
der Empfänger (siehe...) ist. Da noch ein Sicherheitsfaktor drauf, und 
du kennst deine maximale Datenrate. Wenn die nicht reicht, muss eben 
noch ein Treiber dazu.

CAN ist für die beschriebene Anwendung vermutlich ziemlich übertrieben. 
Im Auto würde wohl (du schreibst leider wenig über die genaue Anwendung 
- blinkender Weihnachtsbaum?) LIN verwendet.

Max

von Rangi J. (rangi)


Lesenswert?

Ist es evtl sinnvoll einen Pull-Up-Widerstand auf dem Master zu setzen 
und dann einen FET, der die Busleitung auf GND zieht? Jeder Slave 
bekommt dann ebenfalls einen FET, aber keinen (oder nur sehr großen 
Pull-Up)?


    Master                              Knoten
5V     ----+-----------~ ~-------------------------
           |
           R
           |
Data in ---+-----------~ ~-------------------+--- Data in
           |                                 |
         |-                                   -|
Dataout -|                                     |- Data out
         |-                                   -|
           |                                 |
GND -------+-----------~ ~-------------------+--

Vorteil: keine Buskurzschluß möglich
Nachteil: zwei PortPins auf den Knoten werden benötigt
          ist der Pull-Up klein genug? Was sollte man da wählen?

von Rangi J. (rangi)


Lesenswert?

Achso ja, vergessen, die Anwendung:
Modellbau Lichtersteuerung für allgemeine Anwendung, z.B. ein 
Häuserblock Ampel oder ein Rummelplatz, bei dem einzelne Elemente von 
jeweils einen Knoten erledigt werden.
z.B. ganz einfach eine Ampelkreuzung: eine Ampel bekommt einen Knoten 
mit 3 LEDs Der Master kennt dann 4 Ampeln pro Kreuzung mit je 3 LEDs die 
z.B. an einem "Subbus" hängen. Der Knoten ist als Ampel programmiert und 
hat einen logischen Eingang: Stop oder Fahrt. Der Master sendet dann nur 
den Befehl "Fahrt" und das Lichterspiel macht der Knoten alleine. So 
eine Kreutzung ist dann prinzipiell abtrennbar und austauschbar über nur 
einen kleinen Stecker.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Rangi Jones schrieb:
> Ist es evtl sinnvoll einen Pull-Up-Widerstand auf dem Master zu setzen
> und dann einen FET, der die Busleitung auf GND zieht? Jeder Slave
> bekommt dann ebenfalls einen FET, aber keinen (oder nur sehr großen
> Pull-Up)?

???
I2C funktioniert so, wie du es beschrieben hast. Zum Thema Pullup hatte 
ich schon was geschrieben (ersetze dabei "Treiber" durch "Pullup").

Wozu brauchst du am Slave einen FET, wenn der nur empfangen soll?

Max

von Martin (Gast)


Lesenswert?

Kannst dir ja mal den NXP LPC812 anschauen. Der hat UARTs, I2C, SPI. Und 
is so klein wie die Tinys.

von Frank K. (fchk)


Lesenswert?

Rangi Jones schrieb:
> @ Patrick C
> ATtinys habe keine I2C Hardware an board. Dann muss ich die I2C in
> Software machen. Das macht keinen Spass bei 100kHz. Ausserdem brauche
> eine Leitung mehr.
> Bei der UART ist es schon was anders, die Tinys haben zwar auch diesen
> nicht an Board, aber ein Timer genügt, da kein Duplex verwendet wird.

Dann nimm doch andere Controller. Ganz nett sind zB PIC24F04KL100. 
Kleine 16 Bitter mit 14 Pins, haben I2C, SPI, UART mit 
LIN-Hardware-Support. LIN wäre genau so ein 1-Draht-seriell Bus, wie er 
Dir vorschwebt. Wird im Automobilbereich gerne verwendet. Du brauchst 
ihn ja nicht mit 12V zu implementieren, sondern nur mit 5V.

Und als Master dann einen PIC24FJ256GA106 beispielsweise.

fchk

von Luther B. (luther-blissett)


Lesenswert?

Rangi Jones schrieb:
> ATtinys habe keine I2C Hardware an board. Dann muss ich die I2C in
> Software machen. Das macht keinen Spass bei 100kHz. Ausserdem brauche
> eine Leitung mehr.

Aber doch nur die ganz,ganz kleinen. Die ATtiny 25,45,85 haben doch 
schon Hardwareunterstützung: http://www.mikrocontroller.net/articles/USI

Ausserdem ist 100khz nur die default-Maximalgeschwindigkeit. Du kannst 
deinen Bus auch mit 10khz fahren wenn du willst.

von jojo1969@gmx.de (Gast)


Lesenswert?

Ich habe gerade im Datenblatt des Atmega16 von einem
Multi-processor Communication Mode des UART gelesen.

Vieleicht könnte Dir das auch was nutzen?


zu Rangi Jones Pull up:
auch der LIN Bus bzw. K-Line (Automotiv) sind so aufgebaut;
(wired AND) ca. 20kBaud

von Rangi J. (rangi)


Lesenswert?

Ja, das mit dem LIN ist so wie ich mir das vorgestellt habe. Was hat der 
LIN für einen Pull-Up-Widerstand? Ich habs auf die schnelle nicht 
gefunden.
Der Multi-Processor Mode würde u.u. schon helfen, jedoch löst dieser das 
Bus-Problem nicht. Das ist dann schon Protokollebene.
Dann werde ich das wohl mal ausprobieren müssen, wieviele Eingänge ein 
Ausgang in welcher Geschwindigkeit treiben kann.

von Frank K. (fchk)


Lesenswert?

Rangi Jones schrieb:
> Ja, das mit dem LIN ist so wie ich mir das vorgestellt habe. Was hat der
> LIN für einen Pull-Up-Widerstand? Ich habs auf die schnelle nicht
> gefunden.

1k laut Standard.

> Der Multi-Processor Mode würde u.u. schon helfen, jedoch löst dieser das
> Bus-Problem nicht. Das ist dann schon Protokollebene.

Außerdem kann der AVR UART nicht alle Details des LIN-Busses. Nicht ohne 
Grund hatte ich Dir PIC24 nahegelegt. Ist im Prinzip ein AVR mit doppelt 
so viel Bits und dreimal soviel Speed und deutlich besseren UARTS mit 
mehr Fähigkeiten.

> Dann werde ich das wohl mal ausprobieren müssen, wieviele Eingänge ein
> Ausgang in welcher Geschwindigkeit treiben kann.

Denke dran, dass Du einen Open Collector Ausgang brauchst. Lade Dir auf 
www.lin-subbus.org den Standard herunter und schau in Abschnitt 6.5 
"LINE DRIVER/RECEIVER" nach.

Oder schau Dir einen kompletten LIN-Transceiver wie den Microchip 
MCP2021A (mit eingebautem VREG) oder MCP2003A (ohne VREG) an.

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.