Forum: Mikrocontroller und Digitale Elektronik 1-Draht-Bus in BASIC


von Peter G. (Gast)


Lesenswert?

Hallo Forum,
im Zuge einer Hausautomatisierung möchte ich mehrere kleine Controller 
(Z.B. C-Control-Micro) mit einem Master-Controller (C-Control) 
verbinden.
Die "Micro's" befinden sich in Unterputzdosen und sind sternförmig zur 
Masterunit im Keller mit NYM-3x1.5-Kabeln verdrahtet.
Mit jeder "Micro" sollen Taster Eingaben ausgewertet und durch 
LED-Statusanzeigen signalisiert werden.
Nach Aufforderung durch die Masterunit soll das Ergebnis der 
Tasteneingabe eines angesprochenen Slaves zum Master übertragen und dort 
verarbeitet werden.
Die C-Control (Master) ist bereits vorhanden. Ebenso die einzelnen 
Softwarebausteine zur Tastenauswertung im Slave und zur Verarbeitung 
dieser Daten im Master.
Was jedoch noch fehlt ist die komplette Bus-Verbindung. Leider stehen 
incl. Stromversorgung ja leider nur 3 Adern für die Anbindung der Slaves 
zur Verfügung.
Die Programmiersprache ist wegen der vorhandenen Masterunit zwingend 
"BASIC". Mit anderen Sprachen habe ich außerdem keine Erfahrung.
Beide Controller verfügen zwar über RS-232 Schnittstellen, aber das 
würde ja (genau wie I²C) eine 4-Adrige Verbindung erfordern. (RX  TX  
+5V / GND)
Ich dachte daher an einen 1-Wire-Bus der unter Verwendung eines normalen 
I/O-Pins implementiert werden könnte. Leider habe ich davon aber keine 
Ahnung. Besonders was das Timing bzw. die Synchronisation der beiden 
Controller betrifft.
Für jede Hilfe schon mal herzlichen Dank im Voraus.
Gruß, Peter

von Otto (Gast)


Lesenswert?


von Peter G. (Gast)


Lesenswert?

Hallo Otto,
danke für die superschnelle Antwort, aber so wie ich das sehe brauche 
ich da auch vier Leitungen, oder habe ich das was falsch gelesen ?
Gruß, Peter

von Otto (Gast)


Lesenswert?

Nein - insgesammt sogar nur zwei - der ebus wurde entwickelt, um "alte" 
Regler gegen neue mit mehr Funktionalität auszutauschen.

Otto

von Gast (Gast)


Lesenswert?

Tx über die Versorgungsleitung schicken?  In jedem Slave Diode + 
Kondensator.  Vor der Diode kannst Du das Tx-Signal abgreifen, hinter 
dem Kondensator hast Du Gleichspannung zur Versorgung der Schaltung.  Du 
darfst dann nur nicht ununterbrochen Bytes senden, sondern musst nach 
jedem eine  angemessene Pause lassen, damit sich der Kondensator wieder 
aufladen kann.

von Peter G. (Gast)


Lesenswert?

Hallo Gast,
ich kann Deinen Ausführungen nicht ganz folgen. Da würde sich doch ein 
Kurzschluss einstellen sobald sobald TX von High auf Low schaltet.
Oder meinst Du das der TX des Masters als Stromversorgung für die Slaves 
herangezogen werden soll. Also solange TX High ist werden die 
Kondensatoren der Slaves geladen und speisen diese. In der Low-Phase 
hält der C die Spannung aufrecht. Eine Rückentladung wird in dieser Zeit 
durch die Diode(n) geblockt. So wäre es mir verständlich.
Allerdings sehe ich ein zeitliches Problem. Die Slaves sollen vom Master 
der Reihe nach abgefragt werden.
Antwortet der Slave mit "Keine Tasteneingabe" wird der nächste 
abgefragt.
Meldet ein Slave eine "Tasteneingabe" wird diese vom Master verarbeitet. 
Danach soll der Master dem Slave mitteilen das die Tasteneingabe 
verarbeitet wurde. Der Slave muss nun das Tastenbyte zurücksetzen und 
gegebenenfalls noch die Status-LED's schalten.
Nach Abschluss der Kommunikation mit diesem Slave wird nun der nächste 
Slave abgefragt, usw.
Der Master wird also die meiste Zeit nur die Slaves abfragen und als 
Antwort "Keine Tasteneingabe" erhalten. Da bleibt vermutlich zu wenig 
Zeit um die Kondensatoren auf Spannung zu halten, denn jede Anfrage an 
einen Slave unterbricht ja den Ladevorgang für alle Kondensatoren.
Veranschlage ich mal den Strombedarf für jeden Slave und die 
Status-LED's mit 10mA, so wären das bei 8 Slaves immerhin 80mA.
Gruß, Peter

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

>Also solange TX High ist werden die
>Kondensatoren der Slaves geladen und speisen diese. In der Low-Phase
>hält der C die Spannung aufrecht. Eine Rückentladung wird in dieser Zeit
>durch die Diode(n) geblockt.

Ja, genau. Hab Dir mal nen Mini-Schaltplan gekritzelt (Anhang).

>Allerdings sehe ich ein zeitliches Problem. Die Slaves sollen vom Master
>der Reihe nach abgefragt werden.

Tut das not? Ich denke, Du hast eine Sterntopologie, d. h. von jedem 
Slave führt eine eigene dreiadrige Leitung in den Schaltschrank zum 
Master.  Dort kommen also 3 N Leitungen an, mit N = Anzahl der Slaves. 
Dann kannst Du doch alle Slaves gleichzeitig abfragen, genügend 
leistungsstarker Master vorausgesetzt. Oder hast Du eine Bustopologie, 
d. h. alle Slaves hängen an einer gemeinsamen dreiadrigen Leitung? 
Dann wärst Du auf Nacheinanderabfragen angewiesen. Im letzteren Fall 
wäre Dein Projekt übrigens noch deutlich anspruchsvoller als es ohnehin 
schon ist.

>Der Master wird also die meiste Zeit nur die Slaves abfragen und als
>Antwort "Keine Tasteneingabe" erhalten. Da bleibt vermutlich zu wenig
>Zeit um die Kondensatoren auf Spannung zu halten,

Damit man sowas vorher abschätzen kann, gibts ja die Mathematik. "Bei 
soundsoviel Slaves und soundsoviel Daten und soundsoviel 
Kondensatorladezeit darf die Baudrate nicht unter... usw. --> 
akzeptabel/nicht akzeptabel". Rechnen!

>denn jede Anfrage an
>einen Slave unterbricht ja den Ladevorgang für alle Kondensatoren.

Notwendigerweise nur bei Bus. Bei Stern hättest Du die Alternative, ihn 
nicht durch Zusammenschalten aller Leitungen zu einem Bus zu machen, 
sondern jeden Slave separat anzusteuern, d. h. jeder Slave hat seine 
eigenen zwei Pins am Master. Allerdings muss dann im Master auch für 
jeden Slave eine eigene Treiberstufe vorhanden sein. Bei Bus wärs nur 
eine für alle Slaves.

>Veranschlage ich mal den Strombedarf für jeden Slave und die
>Status-LED's mit 10mA, so wären das bei 8 Slaves immerhin 80mA.

Wäre das eine Lösung: Bustopologie (alle Leitungen im Master 
zusammengeschaltet); Tx wie beschrieben über die Versorgung, aber die 
Spannung wird nicht zwischen 5 V und 0 V geschaltet, sondern z. B. 
zwischen 12 V und 9 V. Dann können die Diode und der Kondensator 
entfallen (einen kleinen C wird man trotzdem vorsehen wollen). Jeder 
Slave wird dafür mit einem 100 mA-Spannungsregler (TO-92 Gehäuse) 
ausgestattet, der die konstanten 5 V für den Controller bereitstellt. 
Der 9V-12V-Spannungspegel könnte einfach mit dem Analogkomparator der 
Controller erfasst werden, mit Threshold auf 10.5 V.

von Peter G. (Gast)


Lesenswert?

Hi Gast,
OK, soweit hatte ich also verstanden was Du meintest. Meinen Dank für 
die ausführlichen Erläuterungen.
Ich bin jedoch davon ausgegangen das der Bus unter Ausnutzung der 
jeweils vorhandenen RS-232 Schnittstelle betrieben wird. Nur so kann ich 
mir die Implementierung eines eigenen Protokolls ersparen, was mir 
mangels Ahnung sehr recht wäre.
Daher wollte ich alle RX-Eingänge der Slaves zusammen auf den TX-Ausgang 
des Masters legen. Ebenso alle Slave TX gemeinsan auf RX des Masters. 
Andernfalls würde ich zu viele I/O-Ports am Master belegen, die ich 
nicht zur Verfügung habe ohne mit Porterweiterung zu arbeiten.
Tatsächlich ist es aber so wie Du vermutet hattest. Also sternförmig 
verdrahtet.
Paralleles Abfragen dürfte aber so wie so schwieriger sein, da ich ja 
nicht nur ein Bit, sondern mindestens ein Byte vom Slave zum Master 
senden muss.
Jeder Slave überwacht 2 Tasten auf "Klick", "Doppelklick", "langes 
halten" und "beide Tasten gedrückt". Außerdem sollen bestimmten 
Tasteneingaben mittels Status-LED's angezeigt werden.
Nach einer Tasteneingabe ( bzw. Tasten-Sequenz oder Tastenkombination ) 
kodiert der Slave die Eingabe zu einem Bitmuster und speichert es in 
einer Variablen ab. Sobald der Master dazu auffordert, wird das 
Bitmuster gesendet.
Ist das Bitmuster "Keine Eingabe", fragt der Master den nächsten Slave 
ab, andernfalls werden Schaltaufgaben abgearbeitet und zuletzt das 
Bitmuster für die Status-LED's zum Slave gesendet. Der Slave setzt 
daraufhin die LED-Ports, löscht das Tastenbyte und kehrt zurück in die 
Tastenüberwachung.
Der Bus steht also sozusagen unter Dauerfeuer und läßt wenig Zeit zum 
laden der Kondensatoren.
Aus diesem Grund finde ich Deinen zuletzt genannten Vorschlag sehr gut.
Leider verfügt der kleine Slave-Controller ( DIP08-Gehäuse !! ) über 
keinen Komperator. Den Pegelumsetzer müsste ich also diskret aufbauen. 
Platzmäßig würde das wohl gehen.
Es gibt allerdings noch ein anderes Problem, und zwar unabhängig von der 
Art der Buskofiguration.
Der Master hat eine hardwaremäßig fest verdrahtete RS-232 Schnittstelle 
mit einem MAX232 als Pegelwandler. Somit stehen am Master also +/- 10V 
zur Verfügung. ( RS-232 Standard )
Beim Slave hingegen werden I/O-Pins als RS-232 Schnittstelle 
kofiguriert. Der Pegel ist hier also TTL. Ich habe mir noch keine großen 
Gedanken darüber gemacht wie ich die beiden Schnittstellen koppeln kann.
Noch eine Frage am Rande. Kann man eigentlich sowas wie einen 
Multimaster Betrieb fahren ?
Wenn jeder Tastencontroller ein Master wäre, und der Hauptcontroller der 
Slave ( oder auch Master ?? ), dann könnte der Datenverkehr auf dem Bus 
drastisch reduziert werden. Die Tastenkontroller würden ja dann nur auf 
den Bus schreiben wenn Tatsächlich eine Eingabe erfolgt ist. Man müsste 
allerdings sicherstellen das immer nur einer "redet".
Mit dieser Technik könnte Dein erster Vorschlag auch wieder die Nase 
vorne haben. ( Wenig Rraffic => viel Zeit zum Nachladen )

Von "OTTO" ( sieh Posting oben ) habe ich auch einen sehr interessanten 
Link bekommen. EBus. Der kommt mit nur 2 Drähten incl. Stromversorgung 
aus. Da wird auch was von Multimasterbetrieb geschrieben. Bin gerade 
dabei mich einzulesen, blicke aber noch nicht richtig durch. Vielen Dank 
auch an Otto an dieser Stelle.

Gruß, und ein schönes Restwochenende, Peter

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.