Zusammenfassung

Einbau des SLCAN-Interfaces in die Gleisbox (60112/60113)

Wichtiger Hinweis

Auch wenn die modifizierte Gleisbox unter Windows funktioniert ist für die Programmierung der MCU ein Linux System notwendig. Ich kann leider Rückfragen mit Windows-Bezug nicht beantworten - ich habe kein Windows System (mehr).

Gleisbox + USB2CAN Interface

Gegenstand dieser Beschreibung ist der Einbau und die Inbetriebnahme einer SLCAN-Interface Platine in die Gleisbox (nur 60112 bzw. 60113). Dabei wird die SLCAN Platine und ein einfacher USB nach Seriell Wandler (FT232RL) verwendet.



Hardware


Herz der Schaltung ist ein PIC18F25K80 bzw PIC18F26k80, der die CAN Daten in serielle Daten (SLCAN) umwandelt. Als CAN Tranceiver dient ein ISO1050.
Aufgrund der galvanischen Trennung durch den Tranceiver muss zusätzlich eine Verbindung zur 5V Versorgung hergestellt werden. Der PIC wird über die USB Schnittstelle versorgt.

BOM (nur CAN)

Alle R,C LEDs sind SMD 1206
R1      4k7 Ohm
R2      120 Ohm
R7      270 Ohm
R8      10k Ohm
R9-10   220 Ohm
C1,C2   22pf   
C3-C7   100nf
Q1      16MHz Crystal
LED1    LED gruen
LED2-3  LED gelb
IC1     PIC18F25K80-ISO oder PIC18F26K80-ISO
IC2     TI ISO1050 DUBR
Reichelt Warenkorb
Der Längsregler 'MC 78M05 CDTG' ist beim Einbau in die Gleisbox nicht notwendig, da 5V zur Verfügung stehen. Die ICs 3-5 sind für den CAN-Betrieb nicht erforderlich und können weggelassen werden. Sie sind für spätere Erweiterungen (I2C, RS485 ...) vorgesehen.

Platinen können hier bestellt werden: Dirty PCBs
bzw. kurz mich per eMail kontaktieren, denn ich habe ggf. noch eine Platine übrig.

Die Firmware (500kbaud UART 250kBaud CAN)

Adapter

Anschluss der WR841-SLCAN Platine an den USB2Serial Wandler:

JP1 (SLCAN Platine)
          -----
   3V3 14 |O O| 13
       12 |O O| 11
       10 |O O| 9  PGD(RxD)
        8 |O O| 7  PGC(TxD)
        6 |O O| 5  MCLR
        4 |O O| 3  RTS
   GND  2 |O 0| 1
          -----

FTDI Verbindungen zur SCLAN Platine
           ---
       DTR |O|  <-> Jumper -> MCLR
       RxD |O|  <-> PGC(TxD)
       TxD |O|  <-> PGD(RxD)
       VCC |O|  <-> VCC
       CTS |O|  <-> RTS
       GND |O|  <-> GND
	   ---
Notwendige Verbindungen zwischen SLCAN-Platine und Gleisbox:
    SLCAN     Gleisbox
 JP7     5V   am Laengsregler 7805
 JP7    GND   am Laengsregler 7805
 JP3   CANL   am CAN Tranceiver Pin 6
 JP3   CANH   am CAN Tranceiver Pin 7
Wem die Abstände fuer CANH und CANL am Transceiver zu eng sind, kann diese auch einfach an der MINI-DIN 10 Buchse abgreifen:

Progammierung der Firmware

Der USB2Serial Wandler übernimmt neben der Umwandlung der seriellen Daten auch die initiale Programmierung der Firmware. Dazu muss aber der DTR PIN über den auf der der grünen Platine vorgesehenen Jumper verbunden werden. Nach Programmierung muss der Jumper wieder entfernt werden.
# mercurial installiern
sudo apt-get install mercurial build-essential libftdi-dev
# PIC Programmer uebersetzen
mkdir -p ~/tmp
cd ~/tmp
hg clone http://hg.kewl.org/pub/pickle
cd pickle
make
sudo make install
mkdir -p ~/.pickle
wget -O ~/.pickle/config http://lnxpps.de/maerklin/gleisbox/pickle_config

# Verbindung zum PIC ueberpruefen
# CONFIGx Register differieren ggf.
# sudo weil ggf. udev Regel fehlt
sudo p16 lvp id
[000000] [PROGRAM]     8000 WORDS (0400 ROWS OF 0020 WORDS)
[200000] [IDLOCATION1] FF .
[200001] [IDLOCATION2] FF .
[200002] [IDLOCATION3] FF .
[200003] [IDLOCATION4] FF .
[200004] [IDLOCATION5] FF .
[200005] [IDLOCATION6] FF .
[200006] [IDLOCATION7] FF .
[200007] [IDLOCATION8] FF .
[300000] [CONFIG1]     085D
[300002] [CONFIG2]     7F7F
[300004] [CONFIG3]     8900
[300006] [CONFIG4]     0091
[300008] [CONFIG5]     C00F
[30000A] [CONFIG6]     E00F
[30000C] [CONFIG7]     400F
[3FFFFE] [DEVICEID]    6124 DEV:309 REV:06 PIC18F26K80
[F00000] [DATA]	       0400 BYTES

# PIC Firmware holen
wget http://lnxpps.de/openwrt/wr841/bin/can-can_uart500_can250.hex

# PIC Firmware flashen (Adapter Platine Jumper links)
p16 lvp p can-can_uart500_can250.hex

# PIC Firmware uerberpruefen
p16 lvp v can-can_uart500_can250.hex

# Adapter Platine Jumper rechts bzw. DTR trennen - fertig

Nutzung

Die gepimpte Gleisbox ist auf zwei Arten mit Rocrail nutzbar:
- direkt über die SLCAN-API
- indirekt über SocketCAN - damit werden viele Modellbahn Software nutzbar

Direkte Nutzung über SLCAN-API - Rocrail

Vorher sicher stellen, das CAN nicht bereits als SocketCAN genutzt wird:
killall slcand
Rocrail bitte wie folgt einstellen (seriell / SLCAN / 500000 bps - ttyUSBX entsprechend anpassen) und nach Konfiguration sichern und neu starten:

Indirekte Methode über SocketCAN

Die indirekte Methode ist etwas komplizierter, aber durch die Verwendung von 'can2lan' ähnelt sie M*rklins CS2 stärker. Dadurch sind verschiedene Modellbahn Software nutzbar.

Installation SocketCAN-Utils

Die Schritte sind nur notwendig, wenn man den Adapter testen bzw. can2lan nutzen will. Ansonsten arbeitet Rocrail auch direkt mit dem USB-Adapter (siehe "Direkte Methode").
# bitte vorher vergewissern, dass DTR getrennt ist und beim PIC an MCLR 3,3 bzw 5V anliegt
sudo apt-get remove brltty
sudo apt-get install build-essential autogen git
mkdir ~/tmp
cd ~/tmp
git clone https://github.com/linux-can/can-utils
cd can-utils
./autogen.sh
make
sudo make install
# Jetzt kann der Adapter genutzt werden
sudo modprobe can
sudo modprobe can-dev
sudo modprobe can-raw
sudo modprobe slcan
killall slcand
# bitte vorher mit dmesg schauen, ob der USB Adapter sich auch als /dev/ttyUSB0 angemeldet hat
#  ansonsten /dev/ttyUSB0 anpassen
sudo slcand -S500000 -s5 /dev/ttyUSB0 can0
sudo ifconfig can0 up

Test mit Gleisbox

# erstes Terminal
candump -tA -xe can0,0:0,#FFFFFFF

# zweites Terminal
cansend can0 00360301#0000000011
cansend can0 00304711#

# Ergebnis
candump -tA -xe can0,0:0,#FFFFFFF
 (2015-08-18 11:05:51.927377)  can0  TX - -  00360301   [5]  00 00 00 00 11
 (2015-08-18 11:06:31.302496)  can0  TX - -  00304711   [0]
 (2015-08-18 11:06:31.302651)  can0  RX - -  00319B32   [8]  47 43 DE AD 01 27 00 10
Der Adapter ist jetzt einsatzbereit.

can2lan Verwendung

can2lan kann wie folgt compiliert und verwendet werden:
# bitte vorher vergewissern, dass DTR getrennt ist und beim PIC an MCLR 3,3 bzw 5V anliegt
sudo apt-get install build-essential git libpcap-dev libz-dev
cd
git clone https://github.com/GBert/railroad.git
cd railroad/can2udp/src
make
sudo cp can2lan /usr/bin/
sudo cp can-monitor /usr/bin/
# sollte kein Web-Server installiert sein
sudo apt-get install lighttpd
sudo cp -vr ../files/maerklin/config /var/www/html
# slcand muss gestartet sein + ifconfig can0 up
# ggf alte Instanz stoppen
killall can2lan
rm -f /var/run/can2lan.pid
# Test im Vordergrund / ggf LAN Interface anpassen
can2lan -vfgm -c /var/www/html/config -b eth0
Falls Rocrail verwendet wird, bitte wie folgt einstellen (IP-Adresse bitte anpassen - läuft can2lan auf dem selben Rechner wie der Rocrail-Server ist die IP 127.0.0.1):

Info Sammlung

Pickle Einstellung
# Datei ~/.pickle/config

DEVICE=ftdi
SLEEP=0
BITRULES=0x1000
BUSY=1

# FTDI Zuordnung
# TX  0
# RX  1
# RTS 2
# CTS 3
# DTR 4
# DSR 5
# DCD 6
# RI  7

VPP=4
PGM=-1
PGC=1
PGD=0

FWSLEEP=0
DEBUG=01

Reduced to the max

Impressum: