F5UII – Station radioamateur française

Installation de MMDVMHost sur Raspberry Pi et réglage de MMDVM en DMR

Intro

A la suite de mon article vous présentant ce qu’est MMDVM et toutes les étapes d’installation du Firmware MMDVM sur la carte Arduino Due, voici l’article qui vous permet de répondre aux questions comment installer MMDVMHost sur mon Raspberry Piet à Comment réaliser les réglages de MMDVM ?.

Pour les non débutants qui maitrisent déjà les étapes d’installations du Raspberry Pi et du logiciel MMDVM, ils pourront directement lire les parties consacrées aux réglages. Cette article est organisé en multiples pages, je vous invite à utiliser le sommaire.

Synoptique d’un relais utilisant le “MultiMode Digital Voice Modem” (MMDVM)


Installer le système d’exploitation Raspberry Pi

Nous allons installer la dernière version de Rasperry Pi OS Raspbian Jessie Lite. La version “Lite” est suffisante puisque nous n’avons pas besoin d’interface en mode graphique. Le fichier à télécharger est moins volumineux que celui de la version complète.

Préférez une carte microSD rapide de classe 10.

Télécharger Raspbian

Rendez-vous sur la page download de raspberrypi.org et choisissez la version légère (la version “lite”). Actuellement, la version disponible est la version Jessie

Installer le fichier

Le fichier téléchargé est un fichier compressé (zip), que vous allez tout d’abord décompresser. Vous avez besoin d’insérer votre carte microSD vierge, avec un adaptateur SD dans le lecteur de cartes de votre PC. Vous allez utiliser le logiciel de “gravure” du fichier image Win32ImageWriter. ATTENTION, sélectionnez impérativement la bonne lettre de lecteur. En cas d’erreur, vous pouvez détruire le contenu de votre disque dur !

Une fois votre carte gravée, insérer votre SD (microSD) dans le port du Raspberry Pi. Raccorder un câble Ethernet sur votre routeur réseau, et mettez sous tension le Raspberry Pi, en branchant une alimentation à prise micro-USB (Bloc d’alimentation de téléphone). Prenez garde à ce que votre alimentation soit d’au moins 1 ampère. En effet certaines alimentations trop faibles, permettent l’allumage des LED du Raspberry Pi laissant penser que celui ci fonctionne, mais bloquent en réalité son démarrage.

Connexion au Raspberry Pi

Vous avez connecté votre Raspberry Pi sur votre réseau Ethernet. Une adresse IP automatique lui a certainement été donné par le routeur (box internet) de votre réseau. Déterminez l’adresse IP du Raspberry Pi,

  1. soit en consultant la liste des adresses ip connectés à votre routeur (ou box internet),
  2. soit en utilisant un logiciel de scanning de votre réseau Ethernet (exemple Advanced IP Scanner)

Connectez-vous avec un logiciel terminal, par exemple Putty en indiquant l’adresse IP du Raspberry Pi, protocole SSH (port 22).

Saisir le login et mot de passe par défaut.

login : pi
password : raspberry

Puis lancer la commande, pour paramétrer le Raspberry Pi

raspi-config

Puis choisissez le menu Expand Filesystem pour utiliser l’ensemble de l’espace disponible de votre carte SD.

Mettre à jour le système d’exploitation par les commandes suivantes. Les fichiers de mises à jour sont directement téléchargés sur internet. Le déroulement peut être long, et dépend de votre débit de téléchargement.

sudo apt update
sudo apt upgrade -y

Installer le logiciel Git qui permet de télécharger directement les projets disponibles sur la plateforme GitHub.

sudo apt install git -y

Quelques étapes pour le Raspberry Pi 3

Si vous utilisez un Raspberry Pi 3, voici quelques modifications à apporter. Ce paragraphe ne doit pas être appliqué si vous avez une version antérieure (2, B+), passez directement au paragraphe suivant “Télécharger le logiciel MMDVMHost”

  1. Ouvrir le fichier /boot/cmdline.txt :

Vous devriez avoir une ligne

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2
rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

2. Ouvrir à présent le fichier /boot/config.txt

sudo nano /boot/config.txt

et ajouter en dernière ligne (dévalide la fonction bluetooth wifi du Raspberry Pi 3)

dtoverlay=pi3-disable-bt

Télécharger le logiciel MMDVMHost

Placez vous dans le répertoire /opt

cd /opt

Nous téléchargeons à présent le projet MMDVMHost de Jonathan, et mis à disposition sur https://github.com/G4KLX/, avec cette instruction:

sudo git clone https://github.com/G4KLX/MMDVMHost

Compiler le logiciel MMDVMHost

Nous avons à présent dans le répertoire /opt/MMDVMHost qui contient le code source précédemment téléchargé. Nous allons lancer la compilation du logiciel.

cd /opt/MMDVMHost/
sudo make
pi@raspberrypi:/opt/MMDVMHost $ sudo make
g++ -g -O3 -Wall -std=c++0x -pthread -c -o AMBEFEC.o AMBEFEC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o BPTC19696.o BPTC19696.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Conf.o Conf.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o CRC.o CRC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Display.o Display.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRControl.o DMRControl.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRCSBK.o DMRCSBK.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRData.o DMRData.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRDataHeader.o DMRDataHeader.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMREMB.o DMREMB.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMREmbeddedLC.o DMREmbeddedLC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRFullLC.o DMRFullLC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRIPSC.o DMRIPSC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRLookup.o DMRLookup.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRLC.o DMRLC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRShortLC.o DMRShortLC.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRSlot.o DMRSlot.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRSlotType.o DMRSlotType.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRAccessControl.o DMRAccessControl.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRTrellis.o DMRTrellis.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarControl.o DStarControl.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarHeader.o DStarHeader.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarNetwork.o DStarNetwork.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarSlowData.o DStarSlowData.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Golay2087.o Golay2087.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Golay24128.o Golay24128.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Hamming.o Hamming.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Log.o Log.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o MMDVMHost.o MMDVMHost.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Modem.o Modem.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Nextion.o Nextion.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o NullDisplay.o NullDisplay.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o QR1676.o QR1676.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o RS129.o RS129.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o SerialController.o SerialController.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o SHA256.o SHA256.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o StopWatch.o StopWatch.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Sync.o Sync.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o TFTSerial.o TFTSerial.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Thread.o Thread.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Timer.o Timer.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o UDPSocket.o UDPSocket.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o Utils.o Utils.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFControl.o YSFControl.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFConvolution.o YSFConvolution.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFFICH.o YSFFICH.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFNetwork.o YSFNetwork.cpp
g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFPayload.o YSFPayload.cpp
g++ AMBEFEC.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRIPSC.o DMRLookup.o DMRLC.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o Golay24128.o Hamming.o Log.o MMDVMHost.o Modem.o Nextion.o NullDisplay.o QR1676.o RS129.o SerialController.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o -g -O3 -Wall -std=c++0x -pthread -lpthread -o MMDVMHost
pi@raspberrypi:/opt/MMDVMHost $


Configuration du fonctionnement de MMDVMHost

Toute la configuration du fonctionnement de MMDVM se réalise à partir du fichier de configuration unique MMDVM.ini. C’est dans ce fichier que nous indiquerons notamment quels modes seront activés (DStar, C4FM, DMR, …). Dans notre cas, nous avons mis uniquement le mode numérique DMR en route (Enable=1 dans la rubrique [DMR])

Egalement, vous y renseigner votre indicatif de relais, ainsi que l’identifiant ID (CCS7) que vous aurez certainement reçu en retour de votre enregistrement en ligne.

sudo nano /opt/MMDVMHost/MMDVM.ini
[General]
Callsign=F1ZZZ
Timeout=180       # Transmitter timeout in seconds. Default is: 120s
Duplex=1          # Is this station Simplex or Duplex. DVMega is simplex. Default is: 1
# ModeHang=10     # Time to stay in mode after receiption. If set overrides RFModemHang and NetModemHang
RFModeHang=10     # Time to stay in mode after RF-receiption Default is: 10s
NetModeHang=3     # Time to stay in mode after Network-receiption Default is: 3s
Display=None      # If a screen of LCD is on the device (None or name)
Daemon=0          # Run in background

[Info]
RXFrequency=431950000    # Receiver frequency in Hz Used by DVMega, reported to DMR-Master. Default is: 0Hz
TXFrequency=439550000    # Transmitter frequency in Hz. Used by DVMega, reported to DMR-Master. Default is: 0Hz
Power=5                  # Power in Watts, for informational use only. Keep below 99 for BrandMeister
Latitude=47.7            # if set, reported to DMR-Master, causes recognition as repeater in BrandMeister
Longitude=7.4            # if set, reported to DMR-Master, causes recognition as repeater in BrandMeister
Height=12                # if set, reported to DMR-Master, causes recognition as repeater in BrandMeister
Location=Colmar
Description=Multi-Mode Repeater
URL=www.yourwebsite.net

[Log]
# Logging levels, 0=No logging
DisplayLevel=2          # log Debug to console. Default is: 1 
FileLevel=2             # log Debug to file. Default is: 1
FilePath=.
FileRoot=MMDVM

[CW Id]
Enable=1                # Enable the CW Id
Time=10                 # How often to ID in minutes

[Modem]
Port=/dev/ttyACM0
# Port=\\.\COM3
TXInvert=0              # Invert TX data. Needed for some transmitters. Default is: 0
RXInvert=0              # Invert RX data. Needed for some receivers. Default is: 0
PTTInvert=0             # PTT goes low to transmit. Invert for some transmitters. Default is: 0
TXDelay=100             # Give the transmitter time to settle in ms. Default is: 100ms
DMRDelay=0              # Compensate for delay in transmitter audio chain in ms . Usually DSP based. Default is: 0.0ms
RXLevel=50              # Soft control for receive level. Not used by DVMega. Default is: 100%
TXLevel=50              # Soft Control for transmit level. Not used by DVMega. Default is: 100% 
# D-StarTXLevel=50
# DMRTXLevel=50
# YSFTXLevel=50
OscOffset=0             # Tweak the Due oscillator if not using the TCXO. Default is: 0ppm
RSSIMultiplier=1
RSSIOffset=10
Debug=0

[D-Star]
Enable=0                # Enable D-Star repeater mode. Default is: 1
Module=C
SelfOnly=0              # If set, only own ID can operate. Default is: 0

[DMR]
Enable=1                # Enable DMR repeater mode. Default is: 1
Beacons=1               # Enable transmission of DMR-Beacons, used for DMR-Roaming
Id=2084333              # DMR ID of this station (repeater)
ColorCode=1             # Color Code to use for DMR repeater access. Default is: 2
SelfOnly=0              # If set, only own ID can operate. Default is: 0
# Prefixes=234,235      # These prefixes are whitelisted for operation. Default is: 0
LookupFile=DMRIds.dat
CallHang=3              # Time to answer in same Talk Group. Default is: 3
TXHang=4                # Time that TX stays on transmission after DMR-over. Default is: 3
#Blacklist=
#DstIdBlackListSlot1RF=       # comma separated list TGs to block on RF Slot1
#DstIdBlackListSlot2RF=       # comma separated list TGs to block on RF Slot2
#DstIdWhiteListSlot1RF=       # comma separated list TGs to allow on RF Slot1
#DstIdWhiteListSlot2RF=       # comma separated list TGs to allow on RF Slot2
#DstIdBlackListSlot1NET=      # comma separated list TGs to block on NET Slot1
#DstIdBlackListSlot2NET=      # comma separated list TGs to block on NET Slot2
#DstIdWhiteListSlot1NET=      # comma separated list TGs to allow on NET Slot1
#DstIdWhiteListSlot2NET=      # comma separated list TGs to allow on NET Slot2

[System Fusion]
Enable=0                      # Enable Fusion repeater mode. Default is: 1

[D-Star Network]
Enable=0                      # Enable D-Star network connection. Requires ircDDBGateway. Default is: 1
GatewayAddress=127.0.0.1
GatewayPort=20010             # UDP port ircDDBGateway is listening on.
LocalPort=20011               # UDP port MMDVMHost is listening on. 
Debug=0

[DMR Network]
Enable=1                      # Enable DMR network connection. Default is: 1
Address=51.254.100.133
Port=62031                    # Port DMRMaster is listening on
# Local=3350                  # Local UDP port if needed else random
Password=passwOrd             # Access password of DMR Master
RSSI=0                        # Enable RSSI measure. Defaukt is: 0
Slot1=1                       # Enable Slot 1 Do not enable for DVMega. Default is: 1
Slot2=1                       # Enable Slot 2. Default is: 1
Debug=1                       # Default is: 0

[System Fusion Network]
Enable=0                      # Enable Fusion network connection
LocalAddress=127.0.0.1
LocalPort=3200
GwyAddress=127.0.0.1
GwyPort=4200
Debug=0

[TFT Serial]
Port=/dev/ttyAMA0
Brightness=50

[HD44780]
Rows=2
Columns=16

# For basic HD44780 displays (4-bit connection)
# rs, strb, d0, d1, d2, d3
Pins=11,10,0,1,2,3

# Device address for I2C
I2CAddress=0x20

# PWM backlight
PWM=0
PWMPin=21
PWMBright=100
PWMDim=16

DisplayClock=1
UTC=0

[Nextion]
Port=/dev/ttyAMA0
Brightness=50
DisplayClock=1
UTC=0
IdleBrightness=20

[OLED]
Type=3
Brightness=0
Invert=0

Premier essai de validation, avant calibration

Pour vérifier que

nous raccordons par câble USB entre le Raspberry Pi et l’Arduino Due. La prise de droite de l’Arduino Due (prêt du connecteur d’alimentation) doit être utilisé.

Lancez le logiciel directement en indiquant le chemin du fichier de configuration.

sudo /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini

L’arduino se met à clignoter (lentement puis rapidement lorsqu’il y le relais est en émission).

Cela vous donne les traces suivantes, avec du trafic entrant en provenance du réseau (internet).

I: 2016-08-18 19:29:50.005 This software is for use on amateur radio networks only,
I: 2016-08-18 19:29:50.005 it is to be used for educational purposes only. Its use on
I: 2016-08-18 19:29:50.005 commercial networks is strictly prohibited.
I: 2016-08-18 19:29:50.005 Copyright(C) 2015, 2016 by Jonathan Naylor, G4KLX and others
M: 2016-08-18 19:29:50.005 MMDVMHost-20160816 is starting
I: 2016-08-18 19:29:50.006 General Parameters
I: 2016-08-18 19:29:50.006     Callsign: F1ZZZ
I: 2016-08-18 19:29:50.006     Duplex: yes
I: 2016-08-18 19:29:50.006     Timeout: 180s
I: 2016-08-18 19:29:50.006     RF Mode Hang: 10s
I: 2016-08-18 19:29:50.006     Net Mode Hang: 3s
I: 2016-08-18 19:29:50.006     D-Star: disabled
I: 2016-08-18 19:29:50.006     DMR: enabled
I: 2016-08-18 19:29:50.006     YSF: disabled
I: 2016-08-18 19:29:50.006 Modem Parameters
I: 2016-08-18 19:29:50.006     Port: /dev/ttyACM0
I: 2016-08-18 19:29:50.006     RX Invert: no
I: 2016-08-18 19:29:50.006     TX Invert: yes
I: 2016-08-18 19:29:50.007     PTT Invert: no
I: 2016-08-18 19:29:50.007     TX Delay: 100ms
I: 2016-08-18 19:29:50.007     DMR Delay: 0 (0.0ms)
I: 2016-08-18 19:29:50.007     RX Level: 50%
I: 2016-08-18 19:29:50.007     D-Star TX Level: 50%
I: 2016-08-18 19:29:50.007     DMR TX Level: 50%
I: 2016-08-18 19:29:50.007     YSF TX Level: 50%
I: 2016-08-18 19:29:50.007     RX Frequency: 431950000Hz
I: 2016-08-18 19:29:50.007     TX Frequency: 439550000Hz
I: 2016-08-18 19:29:50.007     Osc. Offset: 0ppm
M: 2016-08-18 19:29:50.007 Opening the MMDVM
I: 2016-08-18 19:29:52.019 MMDVM protocol version: 1, description: MMDVM 20160624 24                          kHz (D-Star/DMR/System Fusion/CW Id)
I: 2016-08-18 19:29:52.039 Display Parameters
I: 2016-08-18 19:29:52.040     Type: None
I: 2016-08-18 19:29:52.040 DMR Network Parameters
I: 2016-08-18 19:29:52.040     Address: 51.254.100.133
I: 2016-08-18 19:29:52.040     Port: 62031
I: 2016-08-18 19:29:52.040     Local: random
I: 2016-08-18 19:29:52.040     Slot 1: enabled
I: 2016-08-18 19:29:52.040     Slot 2: enabled
I: 2016-08-18 19:29:52.040     RSSI: disabled
I: 2016-08-18 19:29:52.040 Info Parameters
I: 2016-08-18 19:29:52.040     Callsign: F5UII-R
I: 2016-08-18 19:29:52.040     RX Frequency: 431950000Hz
I: 2016-08-18 19:29:52.040     TX Frequency: 439550000Hz
I: 2016-08-18 19:29:52.041     Power: 5W
I: 2016-08-18 19:29:52.041     Latitude: 47.700001deg N
I: 2016-08-18 19:29:52.041     Longitude: 7.400000deg E
I: 2016-08-18 19:29:52.041     Height: 12m
I: 2016-08-18 19:29:52.041     Location: "Colmar"
I: 2016-08-18 19:29:52.041     Description: "Multi-Mode Repeater"
I: 2016-08-18 19:29:52.041     URL: "www.yourwebsite.net"
M: 2016-08-18 19:29:52.041 Opening DMR IPSC
I: 2016-08-18 19:29:52.041 CW Id Parameters
I: 2016-08-18 19:29:52.041     Time: 10 mins
I: 2016-08-18 19:29:52.041 DMR Parameters
I: 2016-08-18 19:29:52.041     Id: 2084333
I: 2016-08-18 19:29:52.041     Color Code: 1
I: 2016-08-18 19:29:52.041     Self Only: no
I: 2016-08-18 19:29:52.042     Prefixes: 0
I: 2016-08-18 19:29:52.042     Lookup File: DMRIds.dat
I: 2016-08-18 19:29:52.042     Call Hang: 3s
I: 2016-08-18 19:29:52.042     TX Hang: 3s
I: 2016-08-18 19:29:52.042     RSSI Multiplier: 1
I: 2016-08-18 19:29:52.042     RSSI Offset: 10
I: 2016-08-18 19:29:52.297 Loaded 40545 DMR Ids to the callsign lookup table
M: 2016-08-18 19:29:52.297 MMDVMHost-20160816 is running
M: 2016-08-18 19:30:02.240 Logged into the master successfully
M: 2016-08-18 19:52:37.767 DMR Slot 1, received network voice header from F1RRJ to TG 208
M: 2016-08-18 19:52:48.764 DMR Slot 1, received network end of voice transmission, 10.7 seconds, 0% packet loss, BER: 0.0%
M: 2016-08-18 19:55:40.749 DMR Slot 1, received network voice header from F1RRJ to TG 208
M: 2016-08-18 19:55:57.644 DMR Slot 1, received network end of voice transmission, 16.8 seconds, 1% packet loss, BER: 0.0%
M: 2016-08-18 19:56:15.277 DMR Slot 1, received network voice header from F4FHM to TG 208
M: 2016-08-18 19:56:15.826 DMR Slot 1, received network end of voice transmission, 0.5 seconds, 0% packet loss, BER: 3.0%
M: 2016-08-18 19:58:49.881 DMR Slot 1, received network voice header from ON7FI to TG 208
M: 2016-08-18 19:58:50.858 DMR Slot 1, received network end of voice transmission, 0.8 seconds, 0% packet loss, BER: 0.0%
M: 2016-08-18 19:59:08.617 DMR Slot 1, received network voice header from ON7FI to TG 208
M: 2016-08-18 19:59:15.952 DMR Slot 1, received network end of voice transmission, 6.8 seconds, 0% packet loss, BER: 0.0%
M: 2016-08-18 19:59:38.423 DMR Slot 1, received network voice header from ON7FI to TG 208
M: 2016-08-18 19:59:47.558 DMR Slot 1, received network end of voice transmission, 9.1 seconds, 0% packet loss, BER: 0.0%

En visitant la page des relais “fait maison” (Homebrew Repeteurs) sur le site Brandmeister, vous allez voir l’indicatif de votre relais apparaître.

Spécifications des commandes du firmware MMDVM

Pour les curieux, voici les spécifications et commandes du firmware à envoyer à l’arduino MMDVM via le port série : MMDVM Specification 20150922 . Notez bien que cette documentation date de septembre 2015. Les informations ont pu évoluer depuis.


Réglage du mode numérique DMR

Le mode numérique DMR est à priori le mode le moins simple à régler. Logiquement, les autres modes seront donc également régler. Nous allons voir quelle méthode suivre pour arriver au résultat.

Nous vous présentons la technique permettant d’avoir un résultat optimum. Vous devrez vous équiper avec :

Dans un premier temps, nous allons régler l’émission du relais, puis dans un second temps, la réception du relais. Pour celà nous allons exploiter le logiciel de calibration MMDVMCal. Voyons comment l’installer.

Installation du logiciel de calibration

Télécharger MMDVMCal

Placez vous dans le répertoire /opt

cd /opt

Nous téléchargeons à présent le projet MMDVMCal de Jonathan, et mis à disposition sur https://github.com/G4KLX/, avec cette instruction:

cd /opt/
sudo git clone https://github.com/G4KLX/MMDVMCal
Compiler le logiciel MMDVMCal

Nous avons à présent dans le répertoire /opt/MMDVMCal qui contient le code source précédemment téléchargé. Nous allons lancer la compilation du logiciel.

cd /opt/MMDVMCal/
sudo make

Réglage de l’émission DMR

Pour réaliser nos réglages, vos postes doivent être raccordés à la platine de filtrage. Prenez un instant pour vérifier vos raccordements fil à fil avant de vous lancer sur les réglages (Rx Audio, Squelch, Tx Audio, PTT et Ground).

Dans mon cas, j’utilise deux postes Motorola GM360. Ils sont raccordés à la platine de filtrage avec connecteurs PS2 (6 broches), et coté poste sur la prise arrière accessoire GM360 (Fournisseur par exemple Aliexpress). Le niveau du signal Squelch doit être vérifié (actif = haut niveau), et au besoin être inversé par la programmation du GM360.

Motorola GM360

Connecteur accessoire arrière GM360

MMDVM, platine de filtrage avec connecteurs PS2 pour postes

Lancer le logiciel de réglage, en précisant le port série sur lequel est raccordé l’arduino au Raspberry Pi. Habituellement, le port USB est crée sous /dev/ttyACM0

sudo /opt/MMDVMCal/MMDVMCal /dev/ttyACM0

Le menu d’aide s’affiche (touche h).

The commands are:
    H/h      Display help
    I        Toggle transmit inversion
    i        Toggle receive inversion
    P/p      Toggle PTT inversion
    Q/q      Quit
    R        Increase receive level
    r        Decrease receive level
    T        Increase transmit level
    t        Decrease transmit level
    D        DMR Deviation Mode (Adjust for 2.75Khz Deviation)
    d        Return to Dstar Mode
    V/v      Display version of MMDVMCal
    <space>  Toggle transmit

Passer la commande “D” (touche D majuscule), pour passer en réglage du mode DMR. Pour passer en émission, appuyez sur la barre espace. Le voyant PTT de la platine de filtrage MMDVM  doit alors s’allumer. Votre poste doit également passer en émission. A ce moment là, le logiciel MMDVMCal envoi un signal basse fréquence de 1200 Hz sur votre poste. Vous pouvez éventuellement écouter le signal avec un récepteur analogique à l’écoute sur la fréquence de sortie de votre (futur) relais.

Votre analyseur de spectre doit être à présent branché sur la sortie HF de l’émetteur. Attention à mettre en place un atténuateur suffisamment important pour protéger votre analyseur. Régler votre analyseur pour voir apparaître le signal d’émission.

Nous allons commencer par réduire le niveau de signal BF généré par la platine MMDVM, en réduisant à 0% le gain. Pour cela appuyez de multi fois sur la touche “t” (touche t minuscule). Vérifier que le potentiomètre multitours de réglage TX (R98 sur ma platine) soit à peu prêt au milieu de sa plage, et en tout cas, pas en bout de course.

Le niveau de BF étant nulle, vous devriez lire sur votre analyseur uniquement la fréquence fondamentale  (Fonction de Bessel J0).

Fréquence fondamentale à amplitude J0

Nous allons à présent augmenter le niveau du signal basse fréquence de 1200 Hz, les “harmoniques” vont apparaître autour de la raie J0. Pour augmenter le niveau, appuyez la touche “T” (T majuscule).

Le spectre FM avec un signal BF 1200Hz (J0, J1,J2, J3 et J4 sont présents)

A présent, en continuant d’augmenter le niveau du signal avec la touche “T” (touche T majuscule), vous allez constater que l’amplitude de la raie Jva à un moment donné décroître. Au delà de ce point, en continuant l’appui sur “T”, l’amplitude de la raie Jcroit à nouveau. Notez le pourcentage auquel vous êtes arrivé, lorsque la raie est au minimum d’amplitude. Nous allons enregistrer ce pourcentage de niveau TX tout à l’heure dans le fichier de configuration de MMDVMHost.

Ce point de fonctionnement peut maintenant être affiné au potentiomètre d’émission R98 de la platine de filtrage MMDVM, pour chercher toujours l’amplitude de J0 la plus basse. Cela donne un spectre comme celui là. Votre platine est réglée pour émettre en DMR.

Réglage optimum de l’émission en DMR, la raie J0 a disparue

1,2000 kHz et 600 mV CC

Le signal injecté sur le Motorola GM360 correspondant à ce point de fonctionnement a une amplitude de 0,6 V. Notez bien que ce niveau est dépend de votre poste, et qu’il n’est pas une référence universelle.

Amplitude du signal MMDVMCal pour J0 au minimum (poste GM360)

 

En DMR, la déviation FM doit à être de 2,75kHz. MMDVMCal génère un signal de 1200 Hz. La courbe de Bessel J0 est nulle lorsque l’indice de modulation (x) est égal à 2,4/ Lorsque la raie J0 disparait, le point de fonctionnement est de 2,88 KHz (indice de modulation = 2880/1200 = 2,4). Nous devons donc réduire le niveau d’émission (TX Level du fichier mmdvm.ini) de 5% pour régler la bonne déviation. En exemple, si nous avons déterminé un TX Level à 85% avec MMDVMCal, nous enregistrerons dans le fichier mmdvm.ini (85×0,95 =) 81 (Lire plus bas).

Fonctions de Bessel. Extrait de TP Electronique, École Polytechnique de l’UNS

Réglage avec un récepteur SDR (clé USB RTL)

Il est tout à faire possible d’utiliser un récepteur SDR (telle une clef USB récepteur TNT RTL xxx) pour remplacer l’analyseur de spectre. Cette solution nécessite d’installe le logiciel SDRSharp par exemple.

 

 

Réglage DMR à l’aide d’une simple clé SDR RTL

Réglage de la réception DMR

Voyons à présent comment régler la réception. Cette seconde phase reste plus simple. En effet, le but est simplement que les niveaux audio ne soit pas trop fort et ne mettent pas en saturation l’entrée analogique de l’arduino Due. Nous allons utiliser un oscilloscope pour cette opération.

Tout d’abord, je précise que votre poste de réception doit sortir un signal basse fréquence sans préaccentuation ou désaccentuation. Le signal du GM360 envoyé sur la prise accessoire est “Audio RX Flat” (configuration “personnalisée”). Si vous le pouvez, configurez votre poste pour que l’audio RX soit envoyé même si le squelch n’est pas actif.

La vérification consiste à vérifier à l’oscilloscope le signal A0 qui est envoyé à l’arduino. Placer votre pointe de touche sur la broche 7 de IC2. Vous pouvez prendre la masse sur JP5 ou JP6 par exemple.

Même en absence de signal HF par le récepteur, le filtre amplifie les signaux. Si vous constatez des saturations de signaux au delà de 3V crête à crête, diminuez l’amplitude en tournant le potentiomètre R99.

Voilà un exemple de signaux que vous avez sur l’entrée analogique A0 lorsque un signal DMR est reçu par le récepteur. On voit nettement que le DMR est un mode numérique avec ‘trames commutées”, avec des “blancs” de transmission (amplitudes les plus grandes). Ici les signaux de bruit évolue à maximum +/- 1V. Les signaux DMR eux évoluent à environ +/- 400mV

Transmission DMR


Enregistrement des paramètres dans MMDVM.ini

Afin de vérifier que la réception DMR, nous positionnons le paramètre debug à 1.

Nous renseignons l’adresse IP, port et mot de passe du serveur (dans notre cas pour le Serveur Français 2081)

sudo nano /opt/MMDVMHost/MMDVM.ini
[DMR Network]
Enable=1
Address=51.254.100.133
# France Server 2081
Port=62031
# Local=3350
Password=passwOrd
RSSI=0
Slot1=1
Slot2=1
Debug=1   

Les niveaux de réglages sont à reporter au chapitre [Modem]

[Modem]
Port=/dev/ttyACM0
# Port=\\.\COM3
TXInvert=0
RXInvert=0
PTTInvert=0
TXDelay=100
DMRDelay=0
RXLevel=85
TXLevel=81
# D-StarTXLevel=50
DMRTXLevel=32
# YSFTXLevel=50
OscOffset=0
RSSIMultiplier=1
RSSIOffset=10
Debug=0

TXLevel et DMRTXLevel ont été ici réglé avec 81, correspondant à valeur (pourcentage) déterminée avec MMDVMCal (avec la réduction de 5% pour faire correspondre une bande passante de 2750 Hz pour le DMR).

Lancer MMDVMHost avec le chemin du fichier de configuration :

sudo /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini

Pour ce qui concerne le niveau RXLevel, celui ci peut être ajusté au besoin jusqu’à ce que les lignes de Debug “DMRSlotRx” soit affichées systématiquement lorsque vous passer en émission.

M: 2016-11-11 16:55:42.720 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -158 202
M: 2016-11-11 16:55:43.080 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -155 202
M: 2016-11-11 16:55:43.441 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -148 202
M: 2016-11-11 16:55:43.801 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -151 202
M: 2016-11-11 16:55:44.161 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -157 201
M: 2016-11-11 16:55:44.521 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -166 202
M: 2016-11-11 16:55:44.882 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -174 202
M: 2016-11-11 16:55:45.242 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -180 202
M: 2016-11-11 16:55:45.599 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -178 202
M: 2016-11-11 16:55:45.959 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -170 202
M: 2016-11-11 16:55:46.321 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -165 202
M: 2016-11-11 16:55:46.680 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -160 202
M: 2016-11-11 16:55:47.041 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -171 201
M: 2016-11-11 16:55:47.401 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -181 201
M: 2016-11-11 16:55:47.761 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -192 201
M: 2016-11-11 16:55:48.122 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -191 201
M: 2016-11-11 16:55:48.479 Debug: DMRSlotRX: voice sync found slot/pos/centre/threshold 2 452 -179 201
M: 2016-11-11 16:55:48.840 Debug: DMRSlotRX: voice terminator found slot/pos/centre/threshold 2 452 -170 201
M: 2016-11-11 16:55:48.846 DMR Slot 2, received RF end of voice transmission, 7.2 seconds, BER: 0.0%

A présent, votre relais numérique DMR doit être prêt à fonctionner. Vous pourrez considérer que les réglages sont optimum lorsque le taux BER est de 0.0% à chaque passage en émission.

Si toutefois à ce stade vous n’arriviez pas à avoir un fonctionnement correcte, vous pouvez passer le paramètre TXInvert à 1. Egalement, vous testerez RXInvert à 1. Cela dépendra de votre poste. (D’expérience, par exemple pour GM360 : TXInvert = 0, RXInvert = 0. Pour un FT7800 :  TXInvert = 1, RXInvert = 0).

Pour vérifier la qualité de transmission, je vous invite à utiliser le service perroquet (TG 9999), qui vous renvoi votre message au relâché de la pédale.

Le démarrage automatique de MMDVM

Votre relais numérique MMDVM est réglé. Vous pouvez remettre les lignes de debug à 0. Pour assurer le démarrage automatique lors de la mise sous tension de votre Raspberry Pi, nous ajoutons une ligne dans le fichier /etc/rc.local, avant la ligne “exit 0”

sudo nano /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

sudo  /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini


exit 0


Remerciements

Je tiens à remerciement Jonathan G4KLX (@G4KLX) qui a réalisé là un logiciel très complet et efficace, capable de traiter maintenant 4 modes numériques (DStar, C4FM, DMR, et P25) ! Egalement, merci aux designers des filtres et platines KI6ZUM, EB4FBZ, SP8NTH…  Egalement, merci à Jean-Pierre F5AHO, pour son aide à la réalisation des mesures.

Il m’intéresserait de savoir si vous avez régler la platine MMDVM pour un Motorola GM360, si vous avez trouvez également un signal 1200 Hz à 600mV CC. Quelqu’un as-t-il mis en route un relais DMR avec des Motorola GM350 ?

Les commentaires sont ouverts. N’hésitez pas à poser vos questions …

Références
  1. MMDVM support list 
  2. SP8NTH
  3. Homebrew repeaters
  4. Brandmeister
  5. Platine MMDVM F5UII