Forum: Mikrocontroller und Digitale Elektronik TWI bus für die Modellbahn.


von K. A. (flashbanger)


Lesenswert?

Hallo

Ich will weichen schalten und Rückmelder auslesen. Ich fahre H0 mit 
Märklin Digital(altes Märklin mit 6021+6050). Das 6050 benutze ich zur 
Loksteuerung. Für die Weichensteuerung und die Rückmeldung möchte ich 
einen Eigenen Bus verwenden. Sprich ein PC-Interface(6050) für die Loks 
und ein PC-Interface(Eigenbau) für die Weichen/Rückmelder.

So nun dachte ich an I2C-Bus. Ich würde gern die günstigen AVR-uCs 
benutzen. Die haben ja TWI. Auf RN-Wissen.de fand ich eine Anleitung zur 
benutzung von TWI.

So doch jetzt hab ich noch ein paar Fragen bezüglich des busses.

Der I2C-Bus ist ja eigendlich für interne Komunikatioon gedacht gewesen. 
Auf meiner Anlage wird 0/5-Volt Pegel warscheinlich nicht ausreichen. 
Daher möchte ich gerne -12/12 Volt Pegel benutzen. welcher Baustein kann 
eine solche Wandlung vornehmen?

Um die Preise für einen Weichendekoder gering zu halen würd ich gern 
einen billigen ATMEGA8 mit internem Tackgeber nutzen. Ist der genau 
genug?(für das Interface natürlich einen mit externem Tack, da sonst 
RS232 nicht laufen wird).


So dann wäre da noch das Adressproblem. 127 sind zu wenig. Und laut 
RN-Wissen unterstütz der AVR auch keine 10bit-Adressen als sklave.

Also möchte ich ein USB ähnliches protokoll verwenden. Wenn ein Sklave 
angeschlossen wird, dann soll er automatisch den Master informieren. Er 
soll für diesen Welcome z.b die Adresse 127 benutzen. Dann teilt der 
Sklave dem Host eine art MAC-Adresse mit. Also eine Art 
Fertigungsnummer. Der Host verteilt dem Sklaven dann eine Adresse.

Um den Adressraum zu erweitern soll neben dem normalen Adressbyte noch 
ein 2. Adressbyte übertragen werden. Erst wenn dieses mit der vom Master 
am anfang übertragenen Adresse übereinstimmt soll der Rest des Packetes 
empfangen werden.

Dann hätte ich einen 7Bit+8Bit = 15Bit Adressraum.

Der Computer soll die Dekoder immer mit ihrer Fertigungsnummer 
ansprechen. Der Host soll also eine einfache liste haben, in dem die 
temporären Adressen und die Festen Adressen stehen.

So dass wars dann eigendlich auch schon.

Außer dass ich gern einen Multimaster Bus nutzen würde. Geht das mit 
AVR's?

Gruß Flashbanger

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Nimm statt TWI das UART, hänge 2 Transistoren (pnp-npn Paar, offener 
Kollektor Ausgang) als Treiber dran. TX des Masters kommt an diesen 
Treiber und das ist dann die Leitung, an die (über Schutzwiderstände) 
sämtliche RX-Leitungen der Slaves angebunden werden. Die Slaves erhalten 
dieselbe Ausstattung und sämtliche Treiber werden an eine zweite Leitung 
angeschlossen, die an die RX-Leitung des Masters angeschlossen wird. Die 
Leitungen werden mit 1kOhm am jeweiligen Ende (Master TX am Ende der 
Modellbahn-Platte / Master RX im Maste-Modul) nach 5V hochgezogen. Das 
Protokoll wird so gestaltet, das jedes Modul angefragt wird und 
anschließend seine Informationen ausspuckt. Multimaster ist nicht 
erforderlich. Durch die Benutzung des UART hast Du eine leicht zu 
programmierende Schnittstelle, die noch dazu den 
Multi-Processor-Communication-Mode unterstützt, bei dem das 9te Bit zur 
Deklarierung einer Adresse und eines Framebeginns benutzt werden kann. 
Das UART ist zudem sehr störsicher. 57600 Baud sind damit locker 
realisierbar, was bei entsprechendem Protokoll bis zu 1000 
Adressierungen pro Sekunde erlaubt. Bei der Anlage, die mein Freund und 
ich projektiert haben (mit derzeit 58 Modulen, Anzahl steigend) 
funktioniert diese Interface-Variante sehr schön. Der Hauptcontroller 
(Master) kann dann noch -zig Knöpfe und Displays bedienen oder aber eine 
Anbindung an einen PC realisieren, auf dem die Steuersoftware läuft. So 
kann man bei entsprechendem Aufwand die Züge über das Internet steuern 
;-).

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier das Ganze zum Angucken.

von K. A. (flashbanger)


Lesenswert?

Ich denke mal, dass dann jedes Bus-Mitglied einen genauen tacktgeber 
benötigt oder?

Außerdem möchte ich ja die UART auch zwischen PC und Interface nutzen. 
Ich bräuchte also einen AVR mit 2 UARts.


Außerdem ist das doch dann nicht Synconisiert, oder?

Gruß Flashbanger

von K. A. (flashbanger)


Angehängte Dateien:

Lesenswert?

wie wär es mit einer solchen schaltung?

Ichw eis nur leider net ob ich die transistoren richtig rum 
angeschlossen habe.

Die schaltung soll die 0/5 Volt pegel links entnehmen und wenn die 
leitung umschalt high führt, dann soll das sognal auf 0/12 Volt 
verstärkt werden.

In der ruhephase ist umschalt = 0. Das gerät befindet sich im 
lauschmodus. Wenn etwas gesendet werden soll, wird umschalt auf high 
geschaltet.

Nur das mit dem Quittungs-Byte wird nicht klappen. es sei den man kann 
vor dem senden des Quittungsbytes die Leitung umschalt auf High schalten 
und nacher wieder auf low.

Gruß Flashbanger

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Ich denke mal, dass dann jedes Bus-Mitglied einen genauen tacktgeber
>benötigt oder?

Ein Keramik-Resonator 4 oder 8 MHz, kostet 30 Cent.

>Außerdem möchte ich ja die UART auch zwischen PC und Interface nutzen.
>Ich bräuchte also einen AVR mit 2 UARts.

Mega128 als Hauptcontroller (Master) nehmen. Da sind dann noch jede 
Menge Pins für andere Funktionen dran und vieeel Flash und SRAM.

>Außerdem ist das doch dann nicht Synconisiert, oder?

Dafür sorgt die Software. Wenn es an einer Seite einen Flashenhals geben 
sollte, programmiert man einen Ringpuffer für ein- und abgehende Daten. 
Ist i.d.R. kein Problem.

>Die schaltung soll die 0/5 Volt pegel links entnehmen und wenn die
>leitung umschalt high führt, dann soll das sognal auf 0/12 Volt
>verstärkt werden.

Das ist unnötig, Du kommst mit 0/5V-Pegeln aus.

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.