Linux und Modellbahn

#1 von bertr2d2 , 23.11.2021 17:44

Hallo Linux-Modellbahnfreunde,

leider geriet der Thread Linux und Modellbahn oder Pinguine auf der MoBa nach kurzer Zeit außer Kontrolle.
Ich möchte die zu Grunde liegende Idee "Linux und Modellbahn" aufgreifen und Projekte aus dem Themenfeld hier sammeln. Es geht hier ausdrüklich nicht um "Linux/Mac/Windows ist besser weil ..." Argumente, sondern rein um die Projekte die Linux verwenden bzw. Software, die man auch unter Linux verwenden kann. Hier darf auch gerne in die Tiefe gegangen werden wenn man möchte. Näheres, auch für Anfänger, kann man in den Links nachlesen.

Hier eine Sammlung von Projekte aus dem Themenfeld ...

Schienen-Signalerzeugung
Zentralen nutzen oft Microprozessoren um das Schienen-Signal zu generieren. Linux ist kein Echtzeitbebriebsystem und ist daher eher ungeeignet, um das Schienensignal (DCC, Motorola, SX, mfx ..) zu generieren. Aber durch geschickte Ausnutzung von Hardwareschnittstellen ist es trotzdem möglich.

SRCPD mit MFX und anderen Erweiterungen (nutzt Hardware SPI)
Gleissignalerzeugung mit BananaPi (nutzt Hardware SPI)
LinTrain - Model Railway Digital Command Control for Linux
DDL Linux (veraltet - nutzt RS232)

Modellbahnsteuerung
JMRI
Rocrail (Closed Source)
Railcontrol (OpenSource)
iTrain (kommerziell)
mrystem CAN-Bus (Märklin Gleisbox) Steuerung von Michael Bernstein
spdrs60 - Digital Model Train Signal Box

Schnittstellen
RaspberryPi CAN-Bus (DIY mit S88)
Banana Pi CAN-Bus + S88
Raspberry Pi S88
CP2104 RS485 (XpressNet)
Smallest Railroad Server Ever (CAN, RS485 und S88 in Gleisbox)

Programme zur Gleisplanung
XtrackCAD
TRAX by Ngongo B im Webbrowser
Cplan von Andreas Kielkopf (Java)

MCU Programmer
Microchip PIC Programmer
Pickitminus/pk2cmd für Pickit2 und Pickit3
avrdude

Platinenentwicklung
KiCad
gEDA

Debugging
HTerm
PacketSender

MCU Simulatoren
AVR simulator Simulavr

Liste wird erweitert.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 18.02.2024 | Top

RE: Linux und Modellbahn

#2 von rmayergfx , 23.11.2021 18:06

Hier noch ein paar Programme zur Gleisplanung, diese funktionieren teilweise mit Java bzw. Webbrowser, also plattformunabhängig:

XtrackCAD
TRAX by Ngongo B im Webbrowser
Cplan von Andreas Kielkopf (Java)
... to be continued

mfg
Ralf


Der Computer soll die Arbeit des Menschen erleichtern und nicht umgekehrt!
Neue Kupplungen für Faller OHU Selbstentladewagen: viewtopic.php?f=27&t=82863
Kein Support per PN !


MYKer, Sven, bertr2d2 und Smistamento haben sich bedankt!
 
rmayergfx
ICE-Sprinter
Beiträge: 5.391
Registriert am: 07.07.2008
Gleise C-K-Flex-M-Gleis
Spurweite H0, Z, 1
Steuerung MS2, 6021, 60213
Stromart AC, Digital, Analog


RE: Linux und Modellbahn

#3 von bertr2d2 , 23.11.2021 18:43

Hallo Ralf,

Zitat von rmayergfx im Beitrag #2
Hier noch ein paar Programme zur Gleisplanung, diese funktionieren teilweise mit Java bzw. Webbrowser, also plattformunabhängig:
XtrackCAD
TRAX by Ngongo B im Webbrowser
Cplan von Andreas Kielkopf (Java)
... to be continued


danke ! Eingefügt.

Gruß

Gerd

PS: Andreas Kielkopf - der Name kommt mir seltsam bekannt vor


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 23.11.2021 | Top

RE: Linux und Modellbahn

#4 von Sven , 23.11.2021 18:45

Servus miteinander,

Dr. Guido Scholz hatte das Projekt SpDrS60 weitergeführt. Dieses Stellwerk benötigt den srcp-Daemon.
spdrs60 - Digital Model Train Signal Box

Das Projekt hatte ich aus den Augen verloren, weil srcpd kein Mfx konnte. Hilfsweise konnte Rocrail eingesetzt werden, um einen srcpd bereitzustellen und den Brückenschlag zur Märklin CS2 bzw CS3 bereitszustellen. Das Gummibandgleisbild der CS3 ist ja ein Grauen und die "gute" Stellwerk-Optik wird von Märklin in der Webapp (noch) nicht unterstützt. Da ist spdrs60 eine meines Erachtens ganz hervorragende Alternative, wäre da nicht der Mords-Aufriß für mfx.
Nur als srcpd-Hilfskrücke war mir Rocrail dann zu aufwändig. Dann blieb es bei der CS3 nativ. Womöglich ist aber das Projekt "SRCPD mit MFX und anderen Erweiterungen" eine Alternative (die mir bisher nicht bekannt war).

Gruß
Sven


Rainer Müller, bertr2d2 und vikr haben sich bedankt!
Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018

zuletzt bearbeitet 23.11.2021 | Top

RE: Linux und Modellbahn

#5 von bertr2d2 , 24.11.2021 11:28

Hallo Sven,

Zitat von Sven im Beitrag #4

Nur als srcpd-Hilfskrücke war mir Rocrail dann zu aufwändig. Dann blieb es bei der CS3 nativ. Womöglich ist aber das Projekt "SRCPD mit MFX und anderen Erweiterungen" eine Alternative (die mir bisher nicht bekannt war).


vielen Dank für Deinen Link - habe ich eingefügt. Das SRCPD/mfx Projekt finde ich auch sehr interessant. Nur SRCP ist ein wenig in die Jahre gekommen. Wäre mal Zeit für ein Signalgenerierungs Linux-Kernel Modul, das z.B. SPI verwendet.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


Sven und vikr haben sich bedankt!
bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: Linux und Modellbahn

#6 von bertr2d2 , 26.11.2021 09:44

Hallo,

XpressNet ist nichts anderes als RS485, 62500 Baud mit 9 Bit Übertragung . Allgemein wird dies auch als RS485 Multidrop bezeichnet.
Es gibt nur wenige UARTs auf SoC (RPi kann es z.B. nicht), die 9 Bit Übertragung beherrschen. Die Linux Unterstützung ist zudem kümmerlich.

Nichtsdestotrotz habe ich mal mit einem preiswerten, CP2104 basierenden RS485 Adapter experimentiert. Das Ergebnis ist recht brauchbar:



Der Code emuliert das 9. Bit über Parity Umschaltung.

Die Lücke zwischen erstem und den darauf folgenden Bytes ist der Umschaltung des Parity Bits (Parity MARK -> SPACE) geschuldet. Der RS485 Transceiver wird dabei kurzfristig von Send auf Receive umgeschaltet, was aber kein Problem darstellt. Es geht jedenfalls recht schnell: laut Datenblatt 600 - 700ns Assert Time und 1 Bit Time in umgekehrter Richtung.

Meiner Meinung nach reicht das, um ein einfaches XpressNet Interface aufzubauen.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


vikr hat sich bedankt!
bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 26.11.2021 | Top

RE: Linux und Modellbahn

#7 von bertr2d2 , 19.03.2022 13:53

Hallo,

hier eine kurze Beschreibung wie man z.B. eine Märklin Lokkarte unter Linux (Raspberry Pi) bearbeiten kann.

Die Lokkarte ist ein I2C EEPROM und kann mit einem einfachen, mechanischen Smart Card Leser bearbeitet werden:



Wir nutzen Vcc (3V3), GND, SCL und SDA.

I2C einschalten beim RPi(/boot/config.txt)

dtparam=i2c_arm=on

und Reboot

# I2C Tools herunter laden und EEPROM suchen
sudo apt-get install i2c-tools
i2cdetect -y 1

Beispiel Output:

pi@raspberrypi:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Man sieht die Lokkarte am I2C Bus 1 mit der Adresse 0x50.

# EEPROM Modul laden
sudo modprobe at24
# Wir nutzen IC2 Bus 1 mit Adresse 0x50 Typ 24c64
sudo sh -c "echo '24c64 0x50' > /sys/class/i2c-adapter/i2c-1/new_device"

Mit dmesg kann man die Initialisierung kontrollieren:

pi@raspberrypi:~ $ dmesg | tail -3
[ 135.938783] at24 1-0050: supply vcc not found, using dummy regulator
[ 135.940536] at24 1-0050: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[ 135.940653] i2c i2c-1: new_device: Instantiated device 24c64 at 0x50

Jetzt kann man wahlfrei die Karte lesen oder schreiben.
# Beispiel Lokkarte speichern
sudo cat /sys/bus/i2c/devices/1-0050/eeprom > lokkarte_01.bin


Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


Hardi, vikr und MTB-Ontour haben sich bedankt!
bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 19.03.2022 | Top

RE: Linux und Modellbahn

#8 von Rainer Müller , 19.03.2022 18:25

Hallo Gerd,

wie kannst du antworten bevor ich frage wie das geht?

Bei der mehrfach empfohlenen Reichelt-Karte ist ein Datenblatt verlinkt, das leider zwei Versionen des Chips auflistet und ich habe nicht herausgefunden, welche Version jetzt in der bestellbaren Karte steckt: die -2.7, die bei 3,3 und 5V geht oder die -5.0, die unbedingt 5V braucht.

Nachdem du hier schreibst, dass die Karten mit 3,3V gehen, spare ich mir also die befürchteten Pegelwandler zwischen BaPi und der Lesemechanik.

Gruß
Rainer


 
Rainer Müller
InterRegioExpress (IRE)
Beiträge: 313
Registriert am: 29.06.2006
Homepage: Link
Ort: Korntal
Gleise Mä: K und M
Spurweite H0
Steuerung basrcpd
Stromart Digital


RE: Linux und Modellbahn

#9 von bertr2d2 , 19.03.2022 19:25

Hallo Rainer,

Zitat von Rainer Müller im Beitrag #8
wie kannst du antworten bevor ich frage wie das geht?


ich gebe mein Bestes

BTW: Im BPi Image fehlte das at24 Modul. Im neuen Image ist es jetzt enthalten.

Vor einiger Zeit habe ich auch mal die Infos aus dem Stummiforum in Bezug auf die Organisation der Lokkartendaten zusammen getragen und ein C-Programm daraus geschustert. Ist aber noch unvollständig bzw. fehlerbehaftet.

Wer es auf dem BPi ausprobieren möchte kann analog wie oben vorgehen:
# EEPROM Modul laden
modprobe at24
# Wir nutzen IC2 Bus 1 mit Adresse 0x50 Typ 24c64
echo '24c64 0x50' > /sys/class/i2c-adapter/i2c-1/new_device
# Lokkarten Analyse Programm herunter laden, compilieren und testen
cd
git clone --depth=1 https://github.com/GBert/railroad.git
cd railroad/can2udp/src/
export CC=gcc
make read_lococard
./read_lococard


Das Lokkarten Analyse Progrämmchen kann auch bereits gespeicherte Kartendaten lesen. Gerne darf daran weiter entwickelt werden

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


Hardi und vikr haben sich bedankt!
bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 19.03.2022 | Top

RE: Linux und Modellbahn

#10 von Rainer Müller , 25.03.2022 17:42

Hallo Gerd,

Zitat von bertr2d2 im Beitrag #9
Hallo Rainer,
ich gebe mein Bestes

BTW: Im BPi Image fehlte das at24 Modul. Im neuen Image ist es jetzt enthalten.

die SW sieht schon mal gut aus, mir fehlt noch die Lesemechanik, die ich aus einem Geldkartenguthabenstandsleser recyclen will, der seit 20 Jahren nur noch Error zeigt, weil ihm die "neue Währungseinheit Euro" suspekt ist.


Ich gehe mal davon aus, dass man den Positionskontakt, den die vollständig eingeschobene Karte schließt, für unsere Zwecke nicht benötigt. Im Altgerät hat er die Versorgungsspannung angeschaltet.

Zitat von bertr2d2 im Beitrag #9

Vor einiger Zeit habe ich auch mal die Infos aus dem Stummiforum in Bezug auf die Organisation der Lokkartendaten zusammen getragen und ein C-Programm daraus geschustert. Ist aber noch unvollständig bzw. fehlerbehaftet.
...
Das Lokkarten Analyse Progrämmchen kann auch bereits gespeicherte Kartendaten lesen. Gerne darf daran weiter entwickelt werden

Gruß

Gerd


Ich habe zwar kein Gerät mit Lokkartenzugriff, aber mal meine Notizen von 2010 ausgegraben, als im Forum über das Datenlayout der Lokkarten diskutiert wurde und ein paar Abweichungen von der Analyse in read_lococard festgestellt.

Meine Theorie zum Aufbau eines Lokkarten-Datensatzes:

Auf der obersten Ebene enthält der Datensatz einige Blöcke, die jeweils mit einem drei Byte großen Header beginnen:
<Blocktyp> <Länge low> <Länge high>
Ein Blocktyp 00 kennzeichnet das Ende des Datensatzes.

Diese Blöcke können mehrere Einträge enthalten, die folgendermaßen aufgebaut sind:
<Eintr.-Typ> <Länge> <Daten ... ...>
Ein Eintragstyp 00 kennzeichnet das Ende der Einträge eines Blocks, ob er bei der Blocklänge mitgezählt wird ist unklar.

Bisher bekannt sind die Blocktypen
- 02 enthält eine Anzahl Einträge mit numerischen Werten, deren Länge sich nicht ändert

- 03 enthält eine Anzahl Einträge mit Textstrings, die in ihrer Länge variieren können

- 05 enthält keine einzelnen Einträge, sondern den kompletten Inhalt einer png-Datei


Daraus folgt:
- die drei Bytes am Anfang geben nicht den Codetyp an, sondern nur die Länge des ersten Blocks, beispielsweise:
-- 75h = 117 für Decoder mit bis zu 8 Funktionen, also z.B. für MM-Decoder
-- C5h = 197 für Decoder mit 16 Funktionen, also übliche mfx-Decoder
-- F5h = 245 für Decoder mit (zumindest damals) ungeklärtem Typ-0C-Rucksack
-- andere Längen sind nicht ausgeschlossen, z.B. für Decoder mit mehr als 16 Funktionen

Nicht ganz clever vom Erfinder der Lokkarte ist, das Bild hinter den Strings zu speichern. Wird z.B. der Lokname bei einer Änderung um ein Zeichen länger, muss das ganze Bild um ein Byte versetzt neu geschrieben werden.

Noch ein Schönheitsfehler - die Hilfeausgabe von read_lococard verschweigt leider, wie man aus einer Datei liest:
./read_lococard loco.bin

Gruß
Rainer


vikr, bertr2d2, Hardi und Langsamfahrer haben sich bedankt!
 
Rainer Müller
InterRegioExpress (IRE)
Beiträge: 313
Registriert am: 29.06.2006
Homepage: Link
Ort: Korntal
Gleise Mä: K und M
Spurweite H0
Steuerung basrcpd
Stromart Digital


RE: Linux und Modellbahn

#11 von Rainer Müller , 27.07.2022 11:19

Hallo,

zwar habe ich immer noch keine echte Lokkarte, aber für die ersten Tests tuts auch eine andere I2C-Speicherkarte.

Die Anschaltung des Chipkartenlesers an Raspberry PI oder Banana Pi gestaltet sich recht einfach, bei beiden PIs sind die Anschlüsse für SDA und SCL schon onboard mit den für I2C erforderlichen Pullup-Widerständen ausgestattet. Allerdings zeigte sich, dass ein Widerstand in der 3V3-Leitung erforderlich ist, weil beim Einschieben und Entfernen der Karte kurzzeitige Kurzschlüsse entstehen können, wenn die Karte einen Masse-Schirmring um die Kontaktinsel aufweist. Und diese Kurzschlüsse mag der Prozssor überhaupt nicht.



Beim RPi und beim BPi mit OpenWrt funktionieren die Kommandos wie von Gerd angegeben, beim BPi mit Armbian wandert der externe I2C-Bus von 1 auf 2, weil sich der Videocontroller auf I2C0 vordrängt (und den BPi-internen I2C-Bus mit dem PowerController von 0 auf 1 schiebt).

Noch ein paar Anmerkungen zum at24-Treiber:
er funktioniert zwar, aber man sieht ihm deutlich an, dass er für festverbaute EEPROMs und nicht für Speicherkarten gedacht ist:
Das Kommando "echo ... /new_device" darf erst nach Stecken der Karte eingegeben werden, weil dabei der Treiber das Vorhandensein des EEPROM-Speichers überprüft und sich im Fehlerfall erst mal festfrisst. In dem Kommando muss auch die Größe des Speichers angegeben werden, eine automatische Erkennung ist nicht vorgesehen. Und schließlich zeigt die Log-Meldung "writable, 1 bytes/write", dass beim Schreiben kein Page Mode unterstützt wird, der um den Faktor drei schneller wäre. Dazu müsste aber der Speicher über den Device Tree an den Treiber gemeldet werden, was bei einer nicht fest verbauten Karte nicht praktikabel ist.
Ob man an dem Thema was machen muss wird sich erst bei "produktiver Anwendung" zeigen, im Augenblick ist das ja nur Testbetrieb.


Gruß
Rainer


vikr und bertr2d2 haben sich bedankt!
 
Rainer Müller
InterRegioExpress (IRE)
Beiträge: 313
Registriert am: 29.06.2006
Homepage: Link
Ort: Korntal
Gleise Mä: K und M
Spurweite H0
Steuerung basrcpd
Stromart Digital


RE: Linux und Modellbahn

#12 von bertr2d2 , 19.04.2023 12:30

Hallo,

wer auf der Suche nach einem preisgünstigen, galv. getrenntem USB-CAN Adapter ist, der wird auf Aliexpress (Makerbase Canable Pro) fündig. Den Adapter gibt es für rund 20€ incl. Versand. Mit der candleLight Frimware steht eine ausgereifte Software zur Verfügung.
Das Aufspielen der Software (CANable_MKS_fw.bin) war einfach und der Linux-Treiber wurde ohne zu tun geladen. Dann noch CAN konfigurieren:

sudo ip link set can0 up type can bitrate 250000 restart-ms 100

und schon hat man ein preisgünstige, von einer breiten Community gepflegte CAN Schnittstelle

Gruß

Gerd

PS: Mit einem MS2 Ersatzkabel kann man ohne Klimmzüge eine Verbindung zum Märklin CAN-Bus (u.a. Gleisbox) herstellen :
schwarzGNDG
braunCANLL
orangeCANHH
rot18Vwird hier nicht verbunden

Wenn man die Kontakte vorsichtig durch Hochbiegen der kleinen Laschen am Stecker herauszieht, dann kann man die gecrimpten Kontakte nutzen.

Wer den Adapter kaufen möchte, kann sich bei mir melden. Ich würde diesen zum Selbstkostenpreis abgeben.


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


vikr und robert7 haben sich bedankt!
bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 20.04.2023 | Top

RE: Linux und Modellbahn

#13 von Rainer Müller , 16.12.2023 18:24

Hallo Lokkartenanwender,

in diesem Beitrag geht es um Lesen und Beschreiben von Lokkarten mit dem BaPi.

Nachdem Gerd sich mal hier zur Lokkarten-Lesegeschwindigkeit bei der MS2 geäußert hatte

Zitat von bertr2d2 im Beitrag Lokkarten Emulator - Interesse ?
Hallo,

ich habe einen Logic Analyzer an den I2C Bus geklemmt während eine Lokkarte gelesen wird. Hier das Resultat:



Im ersten Block (I2C Adresse 0x50) wird die die Karte behandelt; im zweiten Block etwas anderes. Es hängt aber unmittelbar zusammen.
Die Lücke von 125ms bzw die komplette Kommunikation von 166ms Dauer sagt leider aber auch, das das Laden der Karten auf 6 pro Sekunde limitiert ist.
D.h. das die MS2 mit ihren 40 Lokplätzen nicht schneller als in ca. 7 Sekunden komplett geladen werden kann. Time to blame Märklin

Gruß

Gerd

habe ich, nachdem schon längere Zeit ein paar Reichelt-Karten rumliegen, Geschwindigkeitsmesungen auf meinem BaPi gemacht und war zutiefst enttäuscht:

- Lese ich eine Lokkarte komplett mit read_lococard ein, dauert das 783ms bei OpenWRT und 790ms bei Armbian. Das ist aber durch die Physik begründet wenn man 8KB mit 100kHz (Sollwert bei 3V3) liest. Der at24-Treiber holt dann 64 128Byte-Blöcke, braucht zu jedem 12ms, also mindestens 64*12 = 768ms, und dann noch etwas für nebenher.

- meine Idee, nur drei 128er Blöcke zu lesen, weil das für MS2-Lokkarten reicht (ohne Bild sind das nicht über 300 Byte) und den Rest später bei Bedarf, war nicht so erfolgreich, weil irgendwas im Linux meint, ein zu lesender Block sei immer 4KB groß, und damit statt der erhofften 40ms dann 390ms verbraucht.

- aber es kommt noch schlimmer; beim Schreiben einer 8KB-Datei auf die Karte dachte ich schon an abgestürzten Rechner: 44 Sekunden nahm er sich! Der at24-Treiber verweigert in unserem Betriebsfall den Pagemode und schreibt jedes Byte einzeln mit 5,3ms pro Byte (laut Datenblatt bis zu 10ms), und das dauert dann halt.

- zumindest für kleinere Dateien geht die Schreibzeit fast linear runter, braucht meine 228Byte-Beispieldatei "nur" 1,2s mit der getesteten Karte.

Das war Grund für mich, einen völlig neuen Treiber für den Kartenzugriff zu erstellen, der auch das Problem löst, dass beim Start des at24-Treibers eine Karte gesteckt sein muss.
Mit diesem i2card genannten Treiber, zu finden unter https://github.com/mue473/bapienv/tree/main/i2card, ergeben sich dann folgende Werte:

- beim 8KB-Lesen ändert sich erwartungsgemäß nichts.

- bei 384Byte-Lesen verringert sich die Dauer auf 38ms (anstatt 390ms für größtenteils ungenutzte 4KB).

- Schreiben von 8KB im Pagemode bei der Pagegröße von 32 dauert nur noch 2,1s: 256 mal 8,2ms. Also 20 mal schneller als im Einzelbytemodus!

- Schreiben der genannten 228Byte-Beispieldatei erfolgt dann in 60ms,
zu sehen in folgendem Bild ("cp card228.bin /dev/i2card"):



Ganz links kurz die Kartenanwesenheitsprüfung, dann 7 Blöcke mit ganzen Seiten jeweils gefolgt von abgewiesenen Schreibversuchen solange die Karte noch beschäftigt ist, und dann rechts die letze Seite mit den restliche vier Bytes (weil 228 - 7 * 32 = 4 ist). Ob richtig geschrieben wurde, kann dann mit "read_lococard /dev/i2card" überprüft werden.

Bisherige Tests des neuen Treibers fanden nur unter Armbian statt, weil ich für OpenWRT keine Umgebung zum Erzeugen von Kernelmodulen habe. Zudem habe ich nur vom Kartenanfang an geschrieben und gelesen und keine komplexen READ/SEEK/WRITE-Sequenzen ausprobiert.

Gruß
Rainer


vikr, LDG und bertr2d2 haben sich bedankt!
 
Rainer Müller
InterRegioExpress (IRE)
Beiträge: 313
Registriert am: 29.06.2006
Homepage: Link
Ort: Korntal
Gleise Mä: K und M
Spurweite H0
Steuerung basrcpd
Stromart Digital


RE: Linux und Modellbahn

#14 von bertr2d2 , 17.12.2023 15:52

Hallo Rainer,

vielen Dank für das Kernel Modul ! Ich habe es dem aktuellen BPi Image hinzugefügt:

root@Modellbahn-BPi:/# uname -a
Linux Modellbahn-BPi 5.4.264 #0 SMP PREEMPT Sun Dec 17 13:48:18 2023 armv7l GNU/Linux
root@Modellbahn-BPi:/# modprobe i2card
[ 44.972959] i2card: created with major number 248 using I2C bus 1, EEPROM size 8192.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


Rainer Müller hat sich bedankt!
bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 17.12.2023 | Top

RE: Linux und Modellbahn

#15 von Rainer Müller , 29.12.2023 19:02

Hallo Gerd und Mitleser,

Zitat von bertr2d2 im Beitrag #14
Hallo Rainer,
Ich habe es dem aktuellen BPi Image hinzugefügt


und ich habe es jetzt endlich getestet, nachdem ich viel früher fertig sein wollte. Aber OpenWrt hat mich ziemlich reingelegt: der Logicanalyzer hat nicht mehr getriggert und im Log standen auch keine Meldungen mit Zeitstempeln mehr um die Zeiten mit der Armbian-Verwendung zu vergleichen.

Schließlich habe ich bemerkt, dass der cp-Befehl aus meiner Gerätedatei eine gewöhnliche im Dateisystem gemacht hat:

1
2
3
4
5
6
7
8
9
10
 
root@Modellbahn-BPi:/dev# ll i*
0 crw------- 1 root root 89, 0 Jan 1 1970 i2c-0
0 crw------- 1 root root 89, 1 Jan 1 1970 i2c-1
0 crw------- 1 root root 248, 0 Dec 23 19:50 i2card
...
root@Modellbahn-BPi:/dev# cp /root/gateway/lococard/testcard.bin /dev/i2card
root@Modellbahn-BPi:/dev# ll i*
0 crw------- 1 root root 89, 0 Jan 1 1970 i2c-0
0 crw------- 1 root root 89, 1 Jan 1 1970 i2c-1
4 -rw-r--r-- 1 root root 228 Dec 23 19:55 i2card
 


und damit wurde der Treiber ja gar nicht mehr angesprungen.

Dass das nicht an meinem Treiber liegt, wird durch andere Meldungen unterstützt wie z.B.
die bezüglich des NULL-Devices.

Für fehlerfreies Arbeiten muss man also beim Schreiben auf

1
 
cat /root/gateway/lococard/testcard.bin > /dev/i2card
 


ausweichen, dann funktioniert der Treiber anstandslos und liefert auch ähnliche Zeiten wie unter Armbian.

Wenn man den Treiber automatisch beim Start laden will , muss man einmalig

1
 
echo i2card > /etc/modules.d/i2card
 


eingeben; der Start ohne Karte stört bei diesem Treiber ja nicht mehr.


Gruß
Rainer


bertr2d2 hat sich bedankt!
 
Rainer Müller
InterRegioExpress (IRE)
Beiträge: 313
Registriert am: 29.06.2006
Homepage: Link
Ort: Korntal
Gleise Mä: K und M
Spurweite H0
Steuerung basrcpd
Stromart Digital


RE: Linux und Modellbahn

#16 von Gelöschtes Mitglied , 29.12.2023 19:37

Moin,

in der Liste MCU Programmer fehlt aber noch eine Menge

Neben der bekannten Arduino IDE wäre natürlich avrdude zu erwähnen, wenn man ohne den Arduino Kram die AVR Controller verwenden möchte.

Wer sich abseits der PIC und AVR Controller bewegt, ein wenig mehr Leistung zu niedrigeren Preisen und gute Entwicklungsboards sucht, für den wären die europäischen STM32 ARM Controller etwas. Die gesamte Toolchain fürs Flashen, Entwickeln, Debuggen usw. gibt es natürlich kostenlos für Linux:

STM32 Development Tools
STM32 Nucleo Boards (Die Boards gibt es auch bei Reichelt)

Wer dann die Controller auf eigenen Entwicklungen einsetzen möchte, da empfiehlt sich KiCad.

Zum Debuggen in Netzwerk und über serielle Schnittstellen die zwei Tools HTerm und PacketSender.

Damit hat man dann eine gute Grundaussstattung fürs Entwickeln von Schaltungen für die Modellbahn unter Linux.

Gruß
Tom


bertr2d2 und TEEvt115Fan haben sich bedankt!

RE: Linux und Modellbahn

#17 von bertr2d2 , 30.12.2023 11:38

Hallo Tom,

Zitat von DL7BJ im Beitrag #16
in der Liste MCU Programmer fehlt aber noch eine Menge

Neben der bekannten Arduino IDE wäre natürlich avrdude zu erwähnen, wenn man ohne den Arduino Kram die AVR Controller verwenden möchte.


stimmt, die Liste ist unvollständig. avrdude habe ich eingefügt

Zitat
Wer sich abseits der PIC und AVR Controller bewegt, ein wenig mehr Leistung zu niedrigeren Preisen und gute Entwicklungsboards sucht, für den wären die europäischen STM32 ARM Controller etwas. Die gesamte Toolchain fürs Flashen, Entwickeln, Debuggen usw. gibt es natürlich kostenlos für Linux:

STM32 Development Tools
STM32 Nucleo Boards (Die Boards gibt es auch bei Reichelt)


STM32 ist wirklich mächtig und bietet viele Möglichkeiten. Abgesehen von STM32 finde ich die Pi Pico für die Modellbahn noch interessanter. Mit seinen integrierten PIOs bietet er einige Möglichkeiten, die ihn von anderen ARM MCUs abhebt. So ist z.B. die Ansteuerung von WS2812 ein Kinderspiel und belastet den Prozessor kaum. Oder die exakte Generierung der Gleissignale. Oder ...
Zudem wird die Verfügbarkeit auch noch in Jahren gegeben sein. Die Pi Foundation und die weite Verbreitung sorgt dafür.

Zitat
Wer dann die Controller auf eigenen Entwicklungen einsetzen möchte, da empfiehlt sich KiCad.

Zum Debuggen in Netzwerk und über serielle Schnittstellen die zwei Tools HTerm und PacketSender.


Habe ich eingefügt. Vielen Dank für die Links !

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


TEEvt115Fan hat sich bedankt!
bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: Linux und Modellbahn

#18 von bertr2d2 , 04.01.2024 09:28

Hallo Rainer,

sorry für die Falle, die Dir das OpenWRT Image gestellt hat.
Ich habe es jetzt im neuesten Image korrigiert (FEATURE_NON_POSIX_CP):

root@Modellbahn-BPi:/dev# ll i2*
0 crw------- 1 root root 89, 0 Jan 1 1970 i2c-0
0 crw------- 1 root root 89, 1 Jan 1 1970 i2c-1
0 crw------- 1 root root 248, 0 Jan 4 08:50 i2card

root@Modellbahn-BPi:/dev# cp /root/testcard.bin /dev/i2card
cp: can't create '/dev/i2card': No such device or address

root@Modellbahn-BPi:/dev# ll i2*
0 crw------- 1 root root 89, 0 Jan 1 1970 i2c-0
0 crw------- 1 root root 89, 1 Jan 1 1970 i2c-1
0 crw------- 1 root root 248, 0 Jan 4 08:50 i2card

root@Modellbahn-BPi:/dev# dmesg | grep i2card
[ 9.486826] i2card: created with major number 248 using I2C bus 1, EEPROM size 8192.
[ 503.102910] i2card: opened using I2C bus 1, addr 0x50, EEPROM size 8192, pagesize 32.
[ 503.135642] i2card: i2c_transfer for read operation failed with code -6.
[ 503.142497] i2card: reading one byte failed with code -6.
[ 503.148212] i2card: close was called.

Die Fehlermeldung ist OK - es war keine Karte angeschlossen.

Das i2card Kernel Modul wird jetzt zum Start auch gleich geladen.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 04.01.2024 | Top

RE: Linux und Modellbahn

#19 von Rainer Müller , 04.01.2024 19:21

Hallo Gerd,

Zitat von bertr2d2 im Beitrag #18
Hallo Rainer,

sorry für die Falle, die Dir das OpenWRT Image gestellt hat.
Ich habe es jetzt im neuesten Image korrigiert (FEATURE_NON_POSIX_CP):


nicht weiter schlimm, nachdem andere das Problem ja auch ohne meinen Treiber hatten, musste ich wenigstens in dem nicht nach der Ursache suchen.

Zitat von bertr2d2 im Beitrag #18
root@Modellbahn-BPi:/dev# dmesg | grep i2card
[ 9.486826] i2card: created with major number 248 using I2C bus 1, EEPROM size 8192.
[ 503.102910] i2card: opened using I2C bus 1, addr 0x50, EEPROM size 8192, pagesize 32.
[ 503.135642] i2card: i2c_transfer for read operation failed with code -6.
[ 503.142497] i2card: reading one byte failed with code -6.
[ 503.148212] i2card: close was called.

Die Fehlermeldung ist OK - es war keine Karte angeschlossen.


Wenn ich mal wieder an den Treiber gehe, fliegt eine der "with code -6"-Fehlermeldungen raus, dass ein Zugriff ohne Karte stattgefunden hat braucht nicht doppelt im Log stehen.

Zitat von bertr2d2 im Beitrag #18
Das i2card Kernel Modul wird jetzt zum Start auch gleich geladen.

Gruß

Gerd


Besten Dank.

Gruß
Rainer


bertr2d2 hat sich bedankt!
 
Rainer Müller
InterRegioExpress (IRE)
Beiträge: 313
Registriert am: 29.06.2006
Homepage: Link
Ort: Korntal
Gleise Mä: K und M
Spurweite H0
Steuerung basrcpd
Stromart Digital


RE: Linux und Modellbahn

#20 von robert7 , 14.02.2024 22:12

Zitat von bertr2d2 im Beitrag #12
Hallo,

wer auf der Suche nach einem preisgünstigen, galv. getrenntem USB-CAN Adapter ist, der wird auf Aliexpress (Makerbase Canable Pro) fündig. Den Adapter gibt es für rund 20€ incl. Versand. Mit der candleLight Frimware steht eine ausgereifte Software zur Verfügung.
Das Aufspielen der Software (CANable_MKS_fw.bin) war einfach und der Linux-Treiber wurde ohne zu tun geladen. Dann noch CAN konfigurieren:
sudo ip link set can0 up type can bitrate 250000 restart-ms 100

und schon hat man ein preisgünstige, von einer breiten Community gepflegte CAN Schnittstelle



Hallo Gerd,

ich habe mir so einen Adapter zugelegt. Kannst du mir sagen, wie du Rocrail (oder ein anderes Steuerprogramm) mit dem CAN-Netz verbindest? Alles, was ich gefunden habe, möchte ein serielles Device (tty) konfigurieren, aber keine Netzwerkverbindung.

Danke schonmal,

Robert


robert7  
robert7
RegionalExpress (RE)
Beiträge: 96
Registriert am: 03.03.2016
Gleise M
Spurweite H0
Stromart AC, Digital, Analog


RE: Linux und Modellbahn

#21 von Pirat-Kapitan , 14.02.2024 23:06

Zitat von robert7 im Beitrag #20

Kannst du mir sagen, wie du Rocrail (oder ein anderes Steuerprogramm) mit dem CAN-Netz verbindest? Alles, was ich gefunden habe, möchte ein serielles Device (tty) konfigurieren, aber keine Netzwerkverbindung.


Moin Robert,
ggf. ist in Rocrail keine entsprechende Schnittstelle (LAN) implementiert. Das einzige, was ich als CAN-Unkundiger gefunden habe ist
https://wiki.rocrail.net/doku.php?id=can-gca1e-e

Meines Erachtens solltest Du so eine Frage im Rocrailforum stellen.

Schöne Grüße
Johannes


Spur G im Garten, H0m im Hause. Lenz LZV100 mit Rocrail auf RasPi, Manhart-Funky und RocoWLM.


Pirat-Kapitan  
Pirat-Kapitan
CityNightLine (CNL)
Beiträge: 1.585
Registriert am: 13.05.2018
Ort: Bergisches Land
Gleise Edelstahl / TT-Bettungsgleis Tillig
Spurweite H0, H0m, N, G
Steuerung Lenz LZV100
Stromart Digital


RE: Linux und Modellbahn

#22 von bertr2d2 , 15.02.2024 00:18

Hallo Robert,

Zitat von robert7 im Beitrag #20
Zitat von bertr2d2 im Beitrag #12
Hallo,
wer auf der Suche nach einem preisgünstigen, galv. getrenntem USB-CAN Adapter ist, der wird auf Aliexpress (Makerbase Canable Pro) fündig. Den Adapter gibt es für rund 20€ incl. Versand. Mit der candleLight Frimware steht eine ausgereifte Software zur Verfügung.
Das Aufspielen der Software (CANable_MKS_fw.bin) war einfach und der Linux-Treiber wurde ohne zu tun geladen. Dann noch CAN konfigurieren:
sudo ip link set can0 up type can bitrate 250000 restart-ms 100

und schon hat man ein preisgünstige, von einer breiten Community gepflegte CAN Schnittstelle


ich habe mir so einen Adapter zugelegt. Kannst du mir sagen, wie du Rocrail (oder ein anderes Steuerprogramm) mit dem CAN-Netz verbindest? Alles, was ich gefunden habe, möchte ein serielles Device (tty) konfigurieren, aber keine Netzwerkverbindung.


hast Du die candleLight Firmware auf den Adapter geschrieben ?
Siehst Du denn das Interface 'ifconfig -a' ? Wenn ja:
sudo ip link set can0 up type can bitrate 250000 restart-ms 100

Als Zentrale wählt man MBUS, Typ SocketCAN und Hostname can0.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


robert7 hat sich bedankt!
bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 15.02.2024 | Top

RE: Linux und Modellbahn

#23 von robert7 , 15.02.2024 08:54

Hallo Gerd,

Zitat von bertr2d2 im Beitrag #22

hast Du die candleLight Firmware auf den Adapter geschrieben ?
Siehst Du denn das Interface 'ifconfig -a' ? Wenn ja:
sudo ip link set can0 up type can bitrate 250000 restart-ms 100

Als Zentrale wählt man MBUS, Typ SocketCAN und Hostname can0.


Vielen Dank für die schnelle Antwort!

Ich hatte schon die candleLight Firmware drauf. Mittlerweile habe ich die slcan Firmware geflasht, jetzt bekomme ich auch ein tty-Device für das Gerät.

Mit der candleLight-Firmware bin ich vmtl. gescheitert, weil ich keine CAN-Module installiert hatte.

Viele Grüße

Robert


robert7  
robert7
RegionalExpress (RE)
Beiträge: 96
Registriert am: 03.03.2016
Gleise M
Spurweite H0
Stromart AC, Digital, Analog


RE: Linux und Modellbahn

#24 von bertr2d2 , 15.02.2024 09:54

Hallo Robert,

Zitat von robert7 im Beitrag #23
Zitat von bertr2d2 im Beitrag #22

hast Du die candleLight Firmware auf den Adapter geschrieben ?
Siehst Du denn das Interface 'ifconfig -a' ? Wenn ja:
sudo ip link set can0 up type can bitrate 250000 restart-ms 100

Als Zentrale wählt man MBUS, Typ SocketCAN und Hostname can0.

Ich hatte schon die candleLight Firmware drauf. Mittlerweile habe ich die slcan Firmware geflasht, jetzt bekomme ich auch ein tty-Device für das Gerät.

Mit der candleLight-Firmware bin ich vmtl. gescheitert, weil ich keine CAN-Module installiert hatte.


die SLCAN Firmware ist auch eine Möglichkeit, aber hat einen Nachteil: die CAN-Frames werden erst in serielle Daten umgewandelt und dann in CAN.
Für SLCAN in Rocrail:
MBUS -> LAWICEL/SLCAN - BPS 500000 - Kein RTS/CTS - Gerät:tty wählen

Da Du Dich hier im Thread "Linux und Modellbahn" befindest gehe ich mal davon aus, das Du auch Linux nutzt.
Der Treiber für die candleLight-Firmware sollte bereits auf Deinem Linux System sein (welche nutzt Du eigentlich ?). Hier mein "sudo dmesg" Output:

[553195.597039] usb 1-6: new full-speed USB device number 8 using xhci_hcd
[553195.746673] usb 1-6: New USB device found, idVendor=1d50, idProduct=606f, bcdDevice= 0.00
[553195.746687] usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[553195.746693] usb 1-6: Product: CANable-MKS gs_usb
[553195.746698] usb 1-6: Manufacturer: makerbase
[553195.746703] usb 1-6: SerialNumber: 002000204741570920313232
[553195.816696] gs_usb 1-6:1.0: Configuring for 1 interfaces
[553195.817327] usbcore: registered new interface driver gs_usb

und:

% sudo ip link set can0 up type can bitrate 250000 restart-ms 100
% sudo dmesg | tail
...
[553419.914747] can: controller area network core
[553419.914978] NET: Registered PF_CAN protocol family
[553419.919314] can: raw protocol
% lsmod | grep can
can_raw 16384 0
can 24576 1 can_raw
can_dev 57344 1 gs_usb

gs_usb -> Geschwister Schneider USB/CAN devices

Bei SocketCAN siehst Du kein tty, aber ein Netzwerk Interface:

% ifconfig can0
can0: flags=193<UP,RUNNING,NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.545
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital

zuletzt bearbeitet 15.02.2024 | Top

RE: Linux und Modellbahn

#25 von robert7 , 15.02.2024 23:10

Hallo Gerd,

danke nochmal für deine Rückmeldung-

Zitat von bertr2d2 im Beitrag #24

die SLCAN Firmware ist auch eine Möglichkeit, aber hat einen Nachteil: die CAN-Frames werden erst in serielle Daten umgewandelt und dann in CAN.



Was hat das wiederum für einen Nachteil? Höhere Latenz?

Zitat von bertr2d2 im Beitrag #24

Für SLCAN in Rocrail:
MBUS -> LAWICEL/SLCAN - BPS 500000 - Kein RTS/CTS - Gerät:tty wählen



Damit läuft es leider nicht, er reagiert leider überhaupt nicht.

Zitat von bertr2d2 im Beitrag #24

Da Du Dich hier im Thread "Linux und Modellbahn" befindest gehe ich mal davon aus, das Du auch Linux nutzt.
Der Treiber für die candleLight-Firmware sollte bereits auf Deinem Linux System sein (welche nutzt Du eigentlich ?). Hier mein "sudo dmesg" Output:



Ja, ich bin unter Linux unterwegs, habe aber nicht alle Kernle-Module mit installiert.

Zitat von bertr2d2 im Beitrag #24

% lsmod | grep can
can_raw 16384 0
can 24576 1 can_raw
can_dev 57344 1 gs_usb




Danke, das hilft, ich werde mal versuchen diese Module zu installieren. Die habe ich nämlich alle nicht installiert.

Zitat von bertr2d2 im Beitrag #24

Bei SocketCAN siehst Du kein tty, aber ein Netzwerk Interface:

% ifconfig can0
can0: flags=193<UP,RUNNING,NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0





Wie wäre denn Rocrail mit SocketCAN zu konfigurieren?

Viele Grüße

Robert


robert7  
robert7
RegionalExpress (RE)
Beiträge: 96
Registriert am: 03.03.2016
Gleise M
Spurweite H0
Stromart AC, Digital, Analog


   

Märklin MS2 WLAN Erfahrungsberichte
MobaLedLib: DMX zur Raumlichtsteuerung - update

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz