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: