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 Pi” et à “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,
-
soit en consultant la liste des adresses ip connectés à votre routeur (ou box internet),
-
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”
- Ouvrir le fichier /boot/cmdline.txt :
- Supprimer “ttyAMA0” dans la ligne
- Supprimer la partie “console=serial0,115200” dans la ligne
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
- le logiciel MMDVMHost installé sur le Rapsberry Pi communique correctement avec le firmware MMDVM installé sur l’Arduino Due,
- le logiciel MMDVMHost connecte bien le serveur DMR BrandMeister
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 :
- un analyseur de spectre et ses atténuateurs de mesures
- un oscilloscope
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.
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 J0 va à un moment donné décroître. Au delà de ce point, en continuant l’appui sur “T”, l’amplitude de la raie J0 croit à 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)
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 …