intern:mopi

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
intern:mopi [2012/09/08 16:50] – Stromversorgung ergänzt sveschintern:mopi [2025/06/11 20:35] (current) – external edit 127.0.0.1
Line 3: Line 3:
 Für einen Kunden soll eine Modellbahnzentrale entwickelt werden. Neben der üblichen Zentralenfunktionen soll als Alleinstellungsmerkmal der PC für das (automatisierte) Steuern sowie dem Gleisstellpult integriert werden. Für einen Kunden soll eine Modellbahnzentrale entwickelt werden. Neben der üblichen Zentralenfunktionen soll als Alleinstellungsmerkmal der PC für das (automatisierte) Steuern sowie dem Gleisstellpult integriert werden.
  
-====== Der Rechner ======+====== Hardware ====== 
 + 
 + 
 +===== Der Rechner =====
  
 Raspberry Pi ist ein lowcost Rechner (Preis bei Farnell derzeit 29,03 EUR) mit einen leistungsfähigen ARM-Controller (ARM11 v6 Instruction set 800MHz, 256MB RAM-Speicher, integrierte GPU). Das Betriebssystem wird auf einer SD-Karte installiert. Eine kleine SD-Karte z.B. von Hama dürfte um die 3-4 EUR kosten. Raspberry Pi ist ein lowcost Rechner (Preis bei Farnell derzeit 29,03 EUR) mit einen leistungsfähigen ARM-Controller (ARM11 v6 Instruction set 800MHz, 256MB RAM-Speicher, integrierte GPU). Das Betriebssystem wird auf einer SD-Karte installiert. Eine kleine SD-Karte z.B. von Hama dürfte um die 3-4 EUR kosten.
Line 13: Line 16:
  
  
-===== Das Betriebssystem =====+==== Das Betriebssystem ====
  
 Auf dem Pi sind gängige Linux-Derivate (leider nicht Ubuntu) lauffähig. Wir haben mit Debian (Raspbian) die ersten Gehversuche gemacht. Enthalten ist auch ein X-Server mit dem die Visualisierung (Gleisstellpult und Loksteuerdialoge) gemacht werden kann. Fast alle gängigen Standardprogramme sind verfügbar (aufpassen wegen Lizenzierungen: Bei GPL-Software sollte der Quellcode mit dabei liegen). Auf dem Pi sind gängige Linux-Derivate (leider nicht Ubuntu) lauffähig. Wir haben mit Debian (Raspbian) die ersten Gehversuche gemacht. Enthalten ist auch ein X-Server mit dem die Visualisierung (Gleisstellpult und Loksteuerdialoge) gemacht werden kann. Fast alle gängigen Standardprogramme sind verfügbar (aufpassen wegen Lizenzierungen: Bei GPL-Software sollte der Quellcode mit dabei liegen).
Line 19: Line 22:
  
  
-===== Modelleisenbahn-Software =====+==== Modelleisenbahn-Software ====
  
 Als GPL-lizensiertes OpenSource-Projekt ist Rocrail zu nennen. Es vereint unter dem Projekt ein Kommandozeilen-Tool, den sogenannten Rocrail-Server. Dieser steuert die konkrete Hardware (Zentrale) an. Außerdem nimmt er über eine Socket-Schnittstelle Kommandos in XML-Syntax entgegen. An der Socket-Schnittstelle können beliebig viele Clients andocken, die entweder auch auf dem Pi laufen (z.B. Rocview) oder externe Geräte (z.B. der eWicht-Handregler). Als GPL-lizensiertes OpenSource-Projekt ist Rocrail zu nennen. Es vereint unter dem Projekt ein Kommandozeilen-Tool, den sogenannten Rocrail-Server. Dieser steuert die konkrete Hardware (Zentrale) an. Außerdem nimmt er über eine Socket-Schnittstelle Kommandos in XML-Syntax entgegen. An der Socket-Schnittstelle können beliebig viele Clients andocken, die entweder auch auf dem Pi laufen (z.B. Rocview) oder externe Geräte (z.B. der eWicht-Handregler).
Line 30: Line 33:
  
  
-===== MoPi-Treiber =====+==== MoPi-Treiber ====
  
 Ich habe jetzt einen Treiber in Python geschrieben, der direkt mit dem MoPi-Controller über die serielle Schnittstelle kommuniziert. Wie performant das Ganze ist, wird sich noch zeigen.  Ich habe jetzt einen Treiber in Python geschrieben, der direkt mit dem MoPi-Controller über die serielle Schnittstelle kommuniziert. Wie performant das Ganze ist, wird sich noch zeigen. 
Line 37: Line 40:
  
  
-====== GPIO-Schnittstelle ======+===== GPIO-Schnittstelle =====
  
 Die GPIO-Schnitstelle beinhaltet eine UART-Schnittstelle. Diese kann bis 115200 Baud (mit gepachten Kernel auch mehr). Leider kann sie kein Hardware-Handshake. Weiterhin sind die Versorgungsspannungen 5V und 3,3V auf die GPIO-Leiste geführt. Die GPIO-Schnitstelle beinhaltet eine UART-Schnittstelle. Diese kann bis 115200 Baud (mit gepachten Kernel auch mehr). Leider kann sie kein Hardware-Handshake. Weiterhin sind die Versorgungsspannungen 5V und 3,3V auf die GPIO-Leiste geführt.
  
  
-===== Der MoPi-Controller =====+==== Der MoPi-Controller ====
  
 Der MoPi-Controller erzeut das DCC-Gleissignal und liest S88-Rückmelder ein. Außerdem wird das Active-Signal für einen Booster erzeugt (üblich bei Märklin-Boostern) und das Kurzschluss-Signal der Booster eingelesen. Für das Programmieren der Loks wird noch das ACK-Signal benötigt, welches ebenfalls vom MoPi-Controller eingelesen wird. Der MoPi-Controller erzeut das DCC-Gleissignal und liest S88-Rückmelder ein. Außerdem wird das Active-Signal für einen Booster erzeugt (üblich bei Märklin-Boostern) und das Kurzschluss-Signal der Booster eingelesen. Für das Programmieren der Loks wird noch das ACK-Signal benötigt, welches ebenfalls vom MoPi-Controller eingelesen wird.
Line 51: Line 54:
  
  
-====== Stromversorgung ======+===== Stromversorgung =====
  
 Der Pi wird über ein handelsübliches USB-Steckernetzteil mit 5V versorgt. Diese Netzteile sind extrem günstig im Einkauf. Der Pi selber sollte mit 5 W geplant werden. Darüber hinaus müssen die folgenden Komponenten versorgt werden: Der Pi wird über ein handelsübliches USB-Steckernetzteil mit 5V versorgt. Diese Netzteile sind extrem günstig im Einkauf. Der Pi selber sollte mit 5 W geplant werden. Darüber hinaus müssen die folgenden Komponenten versorgt werden:
Line 60: Line 63:
  
  
-===== Variante 1 =====+==== Variante 1 ====
  
 Separates Netzteil mit der entsprechenden Boosterspannung 14V für kleine Spuren, 18V für große Spuren. Separates Netzteil mit der entsprechenden Boosterspannung 14V für kleine Spuren, 18V für große Spuren.
  
  
-===== Variante 2 =====+==== Variante 2 ====
  
 Step-Up Converter, der aus der Pi-Spannung (5V) die entsprechende Boosterspannung (14-18V) macht. Nach Möglichkeit galvanisch getrennt! Die 5V für S88 und MoPi-Controller müssten extra erzeugt werden (ebenfalls galvanisch getrennt). Step-Up Converter, der aus der Pi-Spannung (5V) die entsprechende Boosterspannung (14-18V) macht. Nach Möglichkeit galvanisch getrennt! Die 5V für S88 und MoPi-Controller müssten extra erzeugt werden (ebenfalls galvanisch getrennt).
 +
 +
 +===== Sonstiges =====
 +
 +Eine Aktiv-LED sowie Taster für Start/Stop.
 +
 +
 +===== Schnittstellen der Zentrale =====
 +
 +Neben den Pi-Schnittstellen kommen noch die folgenden hinzu:
 +  * Bis zu 3 x S88 in Form von RJ45-Buchsen oder 6 poligen Stiftleisten.
 +  * Ein DCC-Booster Ausgang (dreipolig), schraub und steckbar
 +  * Ein Märklin-Booster Ausgang (5-polig), Stiftleiste (semi-genormt)
 +  * Möglicherweise der Eingang für ein Steckernetzteil oder Spielzeug-Trafo
 +
 +
 +====== Software ======
 +
 +===== Controller-Firmware =====
 +
 +Nach einigen Versuchen mit der Ur-Version des MoPi (interne Version 1.0, Controller PIC16F688), muss die Software grundlegend überarbeitet werden. Grundsätzlich funktioniert zwar das Ansteuern einer Lok, der derzeitige Ansatz verlangt dem Pi jedoch bereits über 50% Prozessorauslastung ab und das noch ohne X-Server. 
 +
 +Die serielle Schnittstelle wird derzeit im Streaming-Mode betrieben, der PIC hat nur einen sehr kleinen Ringpuffer. Aus dem Ringpuffer heraus werden die Daten generiert. Das erfordert ein ständiges Nachschieben von Daten auf PC-Seite. Das ist der Grund für die hohe Auslastung des Prozessors. Außerdem besteht immer auch die Gefahr, dass der Puffer z.B. bei erhöhter Prozessorlast leerläuft und die Loks dadurch stottern oder stehenbleiben.
 +
 +Ein neuer Ansatz ist, mehr Zustand im MoPi zu halten, und die Steuersignale aus diesem Zustand zu generieren.
 +
 +
 +===== RaspberryPi =====
 +
 +Alle Versuche mit dem Pi wurden bisher mit Raspbian gemacht (zuletzt mit der Version 2013-02-09).
 +
 +Folgende Dinge wurden noch nachträglich manuell gemacht (als User "Pi"):
 +
 +  * Deutsches Tastaturlayout (von //gb// auf //de// umstellen): <code>sudo nano /etc/default/keyboard</code>
 +  * Bazaar installiert (Für MoPi und Rocrail): <code>sudo apt-get install bzr</code>
 +  * Samba installiert (optional, wird später nicht benötigt): <code>sudo apt-get install samba</code>
 +  * Share angelegt (Zeigt auf work): <code>mkdir work 
 +sudo mount.cifs //192.168.97.100/work work -o user:Sven</code>
 +  * Checke MoPi aus (später von launchpad): <code>bzr checkout ~/work/MoPi ~/MoPi</code>
 +  * Checke rocrail aus: <code>bzr checkout lp:rocrail ~/rocrail</code>
 +  * Befreie serielle Schnittstelle (alles löschen was irgendwie mit /dev/tty/AMA0 zu tun hat): <code>sudo nano /boot/cmdline.txt</code>
 +  * Auskommentieren des getty für serielle Schnittstelle (#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100): <code>sudo nano /etc/inittab</code> 
 +  * Deaktivieren des Logins: 
 +     * <code>sudo nano /etc/inittab</code>
 +     * Scroll down to <code>1:2345:respawn:/sbin/getty 115200 tty1</code>
 +     * Comment out: <code>#1:2345:respawn:/sbin/getty 115200 tty1</code>
 +     * Under that line add: <code>1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1</code>
 +     * Abspeichern
 +  * Auto StartX
 +     * <code>sudo nano ~/.bash_profile</code>
 +     * Eingeben: <code>startx</code>
 +     * Abspeichern
 +  * Script für Steuern der Stromversorgung installieren (siehe firmware folder in MoPi)
 +