Updated 14/09/2017

mmdvm image cover

Κατά τη διάρκεια πειραμάτων και αναζητήσεων στα ψηφιακά ραδιοερασιτεχνικά, ανακάλυψα ένα ωραίο project στο διαδίκτυο από τον  που περιγράφει έναν προσαρμογέα για D-Star, DMR, Fusion και άλλα ψηφιακά πρότυπα βασισμένο σε έναν μικροελεγκτή Arduino Due και μια μικρή πλακέτα πάνω του. Αυτή η πλακέτα ονομάζεται Multimode Voice Modem ή MMDVM. Αυτό έχει γίνει αρκετά δημοφιλές επειδή το υλικό και λογισμικό είναι Open Source.

 

Το σχέδιο και κάποια τεκμηρίωση μπορούν να βρεθούν στο αντίστοιχο Yahoo Group. Το κύκλωμα στο οποίο αναφερόμαστε, είναι η έκδοση 1 και τα υλικά που χρειάζονται μπορούν να αγοραστούν από ένα κατάστημα ηλεκτρονικών στη Γερμανία για το οποίο υπάρχει προσυμπληρώμενη λίστα με όλα τα υλικά, έτοιμη για αγορά. Αν κάποιος επιθυμεί να αγοράσει τη λίστα αυτή από το συγκεκριμένο κατάστημα μπορεί να δει εδώ. Όλα τα υλικά μαζί με την πλακέτα και τα μεταφορικά κόστισαν περίπου 23 ευρώ. Φυσικά χρειαζόμαστε και το Arduino Due το οποίο κόστισε 16 ευρώ από το Banggood (φυσικά είναι ένας κλώνος και όχι το γνήσιο).

Έτσι, όλα τα υλικά κοστίζουν περίπου 40€ για ένα εμφανίσιμο ψηφιακό προσαρμογέα φωνής για το DMR, Dstar κτλ. Δεδομένου ότι το κύκλωμα είναι λίγο πιο περίπλοκο από ένα απλό κύκλωμα με τρανζίστορ θα γίνει χρήση κάποιου λογισμικού που επιτρέπει το σχεδιασμό του κυκλώματος σε ένα breadboard. Οπότε και έγινε η χρήση του προγράμματος Blackboard. Αυτό το λογισμικό είναι διαθέσιμο ως Open Source από εδώ και είναι γραμμένο σε Java και εκτελείται σε όλα τα γνωστά λειτουργικά συστήματα.

Το λογισμικό επιτρέπει τον βασικό σχεδιασμό του κυκλώματος με βασικά εξαρτήματα χωρίς να ληφθούν υπόψιν οι τιμές τους. Όλα τα υλικά μπήκαν μαζί σε μια πλακέτα διπλής όψης διάτρητη που είναι ελαφρώς μεγαλύτερη από το Arduino Due στο οποίο και θα τοποθετηθεί. Στην πλακέτα αυτή χρησιμοποιούνται και οι δύο όψεις για την υλοποίηση των πιστών. Οι πίστες της πάνω όψης διαγράφονται με κόκκινο χρώμα και της κάτω όψης με μπλε χρώμα. Υπάρχουν μερικές περιοχές όπου οι κάτω πίστες ταυτίζονται με τις πάνω. Για να γίνει η απεικόνιση του κυκλώματος θα κάνουμε χρήση του προγράμματος Blackboard επειδή επιτρέπει την απόκρυψη μιας από τις δύο όψεις ώστε να ξεχωρίζει η άλλη. Το αρχείο του προγράμματος μπορείτε να το κατεβάσετε από εδώ.

mmdvm blackboard

Αφού υλοποιηθεί η πλακέτα του mmdvm και τοποθετηθεί πάνω στο Arduino Due θα πρέπει να προγραμματιστεί. Για να το προγραμματίσουμε, θα πρέπει να κατεβάσουμε το firmware από εδώ.

mmdvm sv6nob all pcb

mmdvm sv6nob bottom

Για να γίνει ο προγραμματισμός του Arduino Due θα πρέπει να κατεβάσουμε το Arduino IDE στον υπολογιστή μας. Όταν προγραμμάτισα το δικό μου Arduino, χρησιμοποίησα την έκδοση του IDE 1.6.7. Εφόσον βάλουμε στον υπολογιστή μας το IDE και συνδέσουμε το Arduino από την Programming Port σε μια θύρα USB, μεταβαίνουμε στο μενού Tools -> Board -> Boards Manager και εγκαθιστούμε το Arduino SAM Boards. Στην δική μου περίπτωση, χρησιμοποίησα την έκδοση 1.6.6 όπως φαίνεται και στην εικόνα.

mmdvm ide boards manager

Στη συνέχεια θα πρέπει εφόσον κλείσουμε το IDE ,να κάνουμε τις απαραίτητες αλλαγές όπως αναφέρει εδώ. Για τις εκδόσεις που ανέφερα πιο πάνω ότι χρησιμοποίησα, τροποποίησα το αρχείο C:\Users\[USERNAME]\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.6\platform.txt ως εξής.

Βρίσκουμε τη γραμμή

## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group "{build.path}/core/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--end-group -lm –gcc

και αντικαθιστούμε με

## Combine gc-sections, archives, and objects

recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group "{build.path}/core/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.system.path}/CMSIS/CMSIS/Lib/ARM/arm_cortexM3l_math.lib" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc

Στη συνέχεια ανοίγουμε το IDE και ανοίγουμε το Firmware που κατεβάσαμε πιο πριν. Μεταβαίνουμε μέσα από το IDE στο αρχείο Config.h και το διορθώνουμε ως εξής

#if !defined(CONFIG_H)
#define  CONFIG_H
// Allow for the use of high quality external clock oscillators
// The number is the frequency of the oscillator in Hertz.
//
// The frequency of the TCXO must be an integer multiple of 48000.
// Frequencies such as 12.0 Mhz (48000 * 250) and 14.4 Mhz (48000 * 300) are suitable.
// Frequencies such as 10.0 Mhz (48000 * 208.333) or 20 Mhz (48000 * 416.666) are not suitable.
//
// For 12 MHz
// #define EXTERNAL_OSC 12000000
// For 12.288 MHz
// #define EXTERNAL_OSC 12288000
// For 14.4 MHz
// #define EXTERNAL_OSC 14400000
// For 19.2 MHz
// #define EXTERNAL_OSC 19200000

// Allow the use of the COS line to lockout the modem
// #define USE_COS_AS_LOCKOUT
// Use pins to output the current mode
// #define ARDUINO_MODE_PINS

// For the original Arduino Due pin layout
// #define ARDUINO_DUE_PAPA

// For the ZUM V1.0 and V1.0.1 boards pin layout
#define ARDUINO_DUE_ZUM_V10

// For the SQ6POG board
// #define STM32F1_POG

// For the SP8NTH board
// #define ARDUINO_DUE_NTH

// For ST Nucleo-64 STM32F446RE board
// #define STM32F4_NUCLEO_MORPHO_HEADER
// #define STM32F4_NUCLEO_ARDUINO_HEADER

// Use separate mode pins to switch external filters/bandwidth for example
// #define STM32F4_NUCLEO_MODE_PINS

// To use wider C4FSK filters for DMR, System Fusion and P25 on transmit
// #define WIDE_C4FSK_FILTERS_TX
// To use wider C4FSK filters for DMR, System Fusion and P25 on receive
// #define WIDE_C4FSK_FILTERS_RX

// Pass RSSI information to the host
#define SEND_RSSI_DATA

// Use the modem as a serial repeater for Nextion displays
// #define SERIAL_REPEATER
#endif

Αν ο πομποδέκτης δεν υποστηρίζει RSSI, βάζουμε // μπροστά από τη γραμμή #define SEND_RSSI_DATA ώστε να γίνει σχόλιο.
Πλέον είμαστε έτοιμοι να κάνουμε Upload το firmware στο Arduino. Μόλις τελειώσει το Compile και το Upload χωρίς σφάλματα, όπως στην εικόνα που ακολουθεί, είμαστε έτοιμοι να συνεχίσουμε.

mmdvm ide flash done

mmdvm sv6nob with arduinor

Τελειώνοντας με τον προγραμματισμό του Arduino, θα πρέπει να γίνει η σύνδεση με τον ηλεκτρονικό υπολογιστή ή ένα Raspberry ώστε να επικοινωνήσει με το λογισμικό MMDVM Host. Εδώ θα περιγράψουμε τη διαδικασία για Raspberry Pi 3. Αρχικά θα πρέπει να κατεβάσουμε το λειτουργικό Raspbian Jessie Lite ή και τη Full έκδοση που περιέχει και το γραφικό περιβάλλον από εδώ. Στον ίδιο σύνδεσμο υπάρχουν και οι οδηγίες για το πώς να εγκατασταθεί στο Raspberry Pi. Θα πρέπει να γίνει μια εξοικείωση με τη γραμμή εντολών καθώς και στην περίπτωση της Lite έκδοσης αλλά και της Full θα δουλεύουμε από γραμμή εντολών. Εγώ θα χρησιμοποιήσω την Lite έκδοση καθώς το γραφικό περιβάλλον δεν με εξυπηρετεί πουθενά, αλλά αντιθέτως μου φορτώνει το raspberry με περιττό λογισμικό.

Εφόσον τελειώσουμε την εγκατάσταση του Jessie θα ενημερώσουμε το λειτουργικό μας. Οπότε εκτελούμε. Όσοι επέλεξαν την Full έκδοση θα πρέπει να ανοίξουν το Τερματικό.

# sudo apt-get update
# sudo apt-get upgrade

Στο επόμενο βήμα θα εγκαταστήσουμε το απαραίτητο λογισμικό.

# sudo apt-get install git screen

Καθώς και το MMDVMHost

# cd /opt
# sudo git clone https://github.com/g4klx/MMDVMHost.git
# cd /opt/MMDVMHost
# sudo make

Στο σημείο αυτό θα πρέπει να συνδέσουμε το Arduino Due μαζί με το MMDVM στο Raspberry σε μια USB θύρα. Αφού το συνδέσουμε βλέπουμε το πορτοκαλί led να ανάβει και προχωράμε για να δούμε με ποια διαδρομή προσαρτήθηκε στο Jessie εκτελώντας

# sudo dmesg | grep tty

mmdvm dmesg

Από το αποτέλεσμα που βλέπουμε καταλαβαίνουμε ότι το Arduino είναι το /dev/ttyACM0. Κρατάμε τη διαδρομή αυτή και πάμε να ρυθμίσουμε το MMDVM Host εκτελώντας

# sudo nano /opt/MMDVMHost/MMDVM.ini

Στο αρχείο βλέπουμε όλες τις ρυθμίσεις του MMDVM Host. Πιο κάτω βλέπουμε τις ρυθμίσεις που έχω βάλει στο δικό μου.
Να σημειωθεί οτι στην ενότητα Modem, στην τιμή Port, βάζουμε τη διαδρομή που προσαρτήθηκε το mmdvm όπως τη βρήκαμε από την εντολή πιο πάνω. Επίσης στην ενότητα DMR Network χρησιμοποιώ τον Ελληνικό master server. Προσέχουμε το συγκεκριμένο αρχείο να είναι σωστά γραμμένο και με τα στοιχεία που αντιστοιχούν στον καθένα μας (callsign, DMR id κτλ) ώστε να μην δημιουργούνται προβλήματα. ΜΗΝ αντιγράφετε ολόκληρο το αρχείο που ακολουθεί καθώς αλλάζει συνεχώς όσο βγαίνουν νέες εκδόσεις. Το παρακάτω που ακολουθεί είναι απλώς ένα δείγμα.

[General]
Callsign=SV6NOB
Timeout=600 # Transmitter timeout in seconds. Default is: 120s
Duplex=0 # Is this station Simplex or Duplex. Hotspot is Simplex, Repeater is Duplex. 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=434925000 # Receiver frequency in Hz Used by DVMega, reported to DMR-Master. Default is: 0Hz
TXFrequency=434925000 # Transmitter frequency in Hz. Used by DVMega, reported to DMR-Master. Default is: 0Hz
Power=1 # Power in Watts, for informational use only. Keep below 99 for BrandMeister
Latitude=39.364760 # if set, reported to DMR-Master, causes recognition as repeater in BrandMeister
Longitude=20.253125 # if set, reported to DMR-Master, causes recognition as repeater in BrandMeister
Height=0 # if set, reported to DMR-Master, causes recognition as repeater in BrandMeister
Location=Ioannina
Description=SV6NOB Homebrew MMDVM Hotspot - GM350 Motorola Radio, Homebrew MMDVM modem, Arduino DUE & Ubuntu server OS
URL=www.mariosv.gr

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

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

[DMR Id Lookup]
File=/opt/MMDVMHost/DMRIds.dat
Time=24

[Modem]
Port=/dev/ttyACM0
#Port=\\.\COM3
TXInvert=0
RXInvert=0
PTTInvert=0
TXDelay=100
DMRDelay=0
RXLevel=90
TXLevel=60
# CWIdTXLevel=50
# D-StarTXLevel=50
# DMRTXLevel=50
# YSFTXLevel=50
# P25TXLevel=50RSSIMappingFile=/opt/MMDVMHost/RSSI-GM350_3.dat
SamplesDir=.
Debug=0

[UMP]
Enable=0
# Port=\\.\COM4
Port=/dev/ttyACM1

[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=2026008 # 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=2 # Time to answer in same Talk Group. Default is: 3
TXHang=2 # 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=master.dv4gr.eu
Port=62031 # Port DMRMaster is listening on
# Local=3350 # Local UDP port if needed else random
Password=p2ssw1rd # 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=0 # 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

Για έξοδο από το editor πατάμε Ctr+x μετά y για αποθήκευση, n για έξοδο χωρίς αλλαγές και στη συνέχεια Enter.

Στη συνέχεια θα κάνουμε μια πρώτη δοκιμή πριν το calibration του mmdvm.

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

Στο σημείο αυτό θα δούμε στο Arduino τα LED να αναβοσβήνουν και στην οθόνη μας θα βλέπουμε το εξής log

mmdvm first test log

 

Και στο σημείο αυτό μπορούμε να επισκεφτούμε το Brandmeister και στην επιλογή Hotspots μπορούμε να αναζητήσουμε το callsign μας και να εμφανιστεί. Για να σταματήσουμε τη δοκιμή, στο τερματικό πατάμε Ctrl+C.

mmdvm hotspot in brandmeister

Στο επόμενο βήμα θα συνδέσουμε τον πομποδέκτη στο MMDVM. Στην δική μου περίπτωση θα χρησιμοποιήσω έναν Motorola GM350 UHF. Επισημαίνεται πως δεν κάνουν όλοι οι πομποδέκτες με είσοδο/έξοδο 9600 για τη χρήση αυτή. Στη λίστα αυτή υπάρχουν κάποια μοντέλα που έχουν δοκιμαστεί για το συγκεκριμένο πρότυπο. Η συνδεσμολογία για το GM 350 είναι η εξής.

mmdvm GM350

 

 

Update 14/09/2017:

Εσωτερικά, στον πομποδέκτη motorola GM350, θα πρέπει να γίνει η εξής γέφυρα όπως φαίνεται στην εικόνα που ακολουθεί.

sv6nob motorola gm350 mmdvm dmr

Δείτε και το σχέδιο εδώ

Το γεφύρωμα αυτό, συνοδεύεται με κάποιες ρυθμίσεις στο codeplug του πομποδέκτη GM350, τις οποίες παραθέτω από δικό μου backup που μπορείτε να κατεβάσετε από εδώ. Φυσικά θα χρειαστεί να αλλάξετε τις συχνότητες σε ότι εσείς επιθυμείτε.

 

Εφόσον συνδέσαμε τον πομποδέκτη, θα κάνουμε τη διαδικασία του Calibration εκτελώντας

# cd /opt
# sudo git clone https://github.com/G4KLX/MMDVMCal
# cd /opt/MMDVMCal/
# sudo make

Στο σημείο αυτό θα ξεκινήσουμε το πρόγραμμα του Calibration τονίζοντας ότι ο πομποδέκτης θα πρέπει να έχει συνδεδεμένο ένα dummy load στην έξοδο που να καλύπτει την ισχύ του πομπού, ώστε κατά τη διάρκεια της εκπομπής να μην δημιουργήσουμε πρόβλημα στον πομπό. Η διαδικασία αυτή απαιτεί Spectrum Analyzer αλλά μπορούμε να το αντικαταστήσουμε με ένα RTL SDR και το SDRSharp με εξασθενιτή στην κεραία του.

# sudo /opt/MMDVMCal/MMDVMCal /dev/ttyACM0

Με το πλήκτρο h μπορούμε να εμφανίσουμε τη βοήθεια

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

Για να ξεκινήσει η εκπομπή πατάμε το πλήκτρο space και βλέπουμε ότι στο MMDVM ανάβει το κόκκινο LED. Ο πομπός πλέον εκπέμπει ένα ήχο 1200Hz τον οποίο μπορούμε να ακούσουμε με ένα αναλογικό δέκτη στην ίδια συχνότητα. Με το πλήκτρο t μπορούμε να μειώσουμε το LF gain και με το πλήκτρο T το αυξάνουμε. Στη δοκιμή που έκανα έβαλα το gain στο 50 και στη συνέχεια πείραξα το trimmer της εκπομπής (δίπλα από το ΠΡΑΣΙΝΟ led) ώστε το φέρον να πάψει να είναι ορατό και να έχει διαμοιραστεί στις πλευρικές όπως φαίνεται στην εικόνα. Αν δεν μπορούμε να το φέρουμε με το trimmer, μπορούμε να αυξήσουμε ή να μειώσουμε το LF gain και να πειράξουμε πάλι το trimmer ώστε να το πετύχουμε όσο το δυνατόν καλύτερα. Την τιμή στην οποία θα αφήσουμε το LF gain θα πρέπει στη συνέχεια να την βάλουμε στο αρχείο ρυθμίσεων του MMDVM Host /opt/MMDVMHost/MMDVM.ini στην ενότητα Modem στην τιμή TXLevel.

mmdvm sdrsharp

Για να ρυθμίσουμε τη λήψη, μπορούμε απλά να ορίσουμε στο αρχείο /opt/MMDVMHost/MMDVM.ini στην ενότητα Modem την τιμή στο RXLevel αρχικά στο 50 και στη συνέχεια να ξεκινήσουμε το MMDVM Host. Για να το ξεκινήσουμε, εκτελούμε

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

mmdvm trimmers

Πατώντας με τον DMR πομποδέκτη μας με χαμηλή ισχύ, αρχικά θα δούμε το πράσινο LED να ανάβει και θα πρέπει να ακούμε τον εαυτό μας στο Hoseline του Brandmeister. Αν όχι, πειράζουμε το trimmer της λήψης (δίπλα από το ΚΟΚΚΙΝΟ led) μέχρι να μπορούμε να ακούμε τον εαυτό μας χωρίς προβλήματα. Αν οι στροφές του trimmer δεν επαρκούν, αλλάζουμε την τιμή του RXLevel από 50 που ορίσαμε αρχικά και επαναλαμβάνουμε τη δοκιμή με το trimmer μέχρι να τελειοποιήσουμε τη λήψη και να ακουγόμαστε στο hoseline απροβλημάτιστα.

Στο σημείο αυτό αν έχει γίνει σωστά το calibration, θα μπορούμε να μιλάμε και να ακούμε πλέον από τον DMR πομποδέκτη μας μέσω του hotspot ή repeater μας.

Στη συνέχεια, για να ξεκινάει το MMDVM Host όταν ανοίγει το Raspberry χωρίς να χρειάζεται να κάνουμε εμείς κάτι, θα πρέπει να δημιουργήσουμε την υπηρεσία και να την ορίσουμε να ξεκινάει κατά την εκκίνηση. Οπότε εκτελέσουμε

# sudo nano /lib/systemd/system/mmdvmhost.service

Και μέσα στο αρχείο βάζουμε

[Unit]
Description=MMDVM Host Service
After=syslog.target network.target

[Service]
User=root
WorkingDirectory=/opt/MMDVMHost
ExecStart=/usr/bin/screen -S MMDVMHost -D -m /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini
ExecStop=/usr/bin/screen -S MMDVMHost -X quit
[Install]
WantedBy=multi-user.target

Βγαίνουμε από το αρχείο και ορίζουμε δικαιώματα εκτελώντας

# sudo chmod 755 /lib/systemd/system/mmdvmhost.service

Ορίζουμε το symbolic link εκτελώντας

# sudo ln -s /lib/systemd/system/mmdvmhost.service /etc/systemd/system/mmdvmhost.service

Στην συνέχεια ορίζουμε να ξεκινάει 60 δευτερόλεπτα μετά την εκκίνηση εκτελώντας

# sudo nano /lib/systemd/system/mmdvmhost.timer

Και μέσα στο αρχείο βάζουμε

[Timer]
OnStartupSec=60

[Install]
WantedBy=multi-user.target

Βγαίνουμε από το αρχείο και ορίζουμε δικαιώματα εκτελώντας

# sudo chmod 755 /lib/systemd/system/mmdvmhost.timer

Ορίζουμε το symbolic link εκτελώντας

# sudo ln -s /lib/systemd/system/mmdvmhost.timer /etc/systemd/system/mmdvmhost.timer

Στο επόμενο βήμα προσθέτουμε την υπηρεσία και την ορίζουμε να ξεκινάει 60 δευτερόλεπτα μετά την εκκίνηση του Raspberry.

# sudo systemctl daemon-reload
# sudo systemctl enable mmdvmhost.timer
# sudo reboot

Μετά την επαννεκίνηση, το MMDVM Host θα πρέπει να ξεκινήσει μόνο του μετά από 60 δευτερόλεπτα. Για να φέρουμε στο προσκήνιο και να δούμε το log του MMDVM Host, εκτελούμε

# sudo screen -r MMDVMHost

Και για να βγούμε από το log, πατάμε Ctrl+a και μετά d.

Για να σταματήσουμε χειροκίνητα το MMDVM Host εκτελούμε

# sudo systemctl stop mmdvmhost.service

Για να το εκκινήσουμε πάλι

# sudo systemctl start mmdvmhost.service

Και για επανεκκίνησή του

# sudo systemctl restart mmdvmhost.service

Μια πρώτη δοκιμή με τους συναδέλφους SV6DBG και SV7LWW

Και η τελική μορφή

Καλή επιτυχία σε όποιον συνάδελφο κάνει το βήμα για την υλοποίηση του οδηγού. Είναι μια εμπειρία που σίγουρα θα αρέσει σε όποιον το προσπαθήσει. Σίγουρα δεν είναι απλό, θα απαιτηθούν αρκετές ώρες εργασίας, αλλά το αποτέλεσμα αξίζει καθώς θα έχουμε στα χέρια μας μια κατασκευή 100% δική μας. Στο σημείο αυτό οφείλω να ευχαριστήσω τον SV6DBG (Δημήτρης), που με "χώνει" συνεχώς σε project ηλεκτρονικών και ακόμα ένα συνάδελφο, που δεν επιθυμεί την δημόσια αναφορά του, για την πολύτιμη βοήθεια που μου προσέφεραν καθώς χωρίς αυτή δεν θα υπήρχε το αποτέλεσμα αυτό.
Τέλος, η ίδια κατασκευή, απεικονίζεται στην επόμενη φωτογραφία και λειτουργεί απροβλημάτιστα ως ψηφιακός αναμεταδότης φωνής DMR του Συλλόγου Ρααδιοερασιτεχνών Ιωαννίνων και αποτελεί κατασκευή του συναδέλφου SV6DBG από τον Αύγουστο του 2016.

mmdvm svgdbg repeater

73, de SV6NOB

Παραπομπές

https://www.florian-wolters.de/

http://mmdvm.blogspot.de/

https://github.com/mpue/blackboard

https://github.com/g4klx/MMDVM

https://github.com/g4klx/MMDVMCal

https://bm.pd0zry.nl/index.php/Homebrew/MMDVM

https://www.arduino.cc/

https://www.raspberrypi.org/products/raspberry-pi-3-model-b/

https://www.raspberrypi.org/blog/raspbian-jessie-is-here/

http://www.raai.gr/

Η λίστα με τα υλικά για την πλακέτα

C2     680pF
C3     470pF
C4     470pF
C9     470pF
C8     47µF
C10     470pF
C11     470pF
C13     2.2nF
C14     470pF
C18     2.2nF
C19     4.7µF
C20     4.7µF
C22     680pF
C23     47µF
D1     green
D2     red
D3     yellow
Q1     IRL 530N
Q2     2N7000
R1     1.5k
R2     1.5k
R3     1.5k
R5     330
R6     330
R7     500k
R8     47k
R9     1M
R12     47k
R13     47k
R14     47k
R15     47k
R16     47k
R17     47k
R18     100k
R19     10k
R20     100k
R21     10k
R27     47k
R28     47k
R11     10k
R23     10k
U1     MCP6002
U2     MCP6002
U3     LF 33CV

Περι αναδημοσίευσης:

Μπορεί ελεύθερα να αναδημοσιευτεί το παρόν κείμενο ολόκληρο ή τμηματικά, με την προϋπόθεση ύπαρξης συνδέσμου "link" προς την παρούσα ιστοσελίδα και αναφέροντας την προέλευσή του.

QRZ callsign lookup:

sv6nob amateur radio symbol
 




Η ιστοσελίδα χρησιμοποιεί cookies για την σωστή λειτουργία, την πλοήγηση, την ανάλυση κίνησης, για social media, και άλλες λειτουργίες. Οι επισκέπτες και χρήστες της, θα πρέπει σύμφωνα με τις οδηγίες της αρχής προστασίας προσωπικών δεδομένων να συμφωνούν με τη χρήση των εν λόγω cookies.