Repeater Controller is also the synthesyser.

VK3ZYZ

Moderator
Staff member
EDIT: If you want the final code without all the steps, jump to post #10.

As I have an FM828 set up as a repeater (still on commercial band but that will change to 2M.) I've started modifying one of my basic Arduino Nano VFOs to be a controller. Here it is so far. It will have 15 channels pre-programmed in, the first is a simplex channel for testing, the second will be to used with our local repeater, once again for testing.
Then the other 14 are run as a repeater frequency.
Photo on 9-11-2022 at 9.16 PM.jpg


These channels will be selected via the jumper links shown below.
Photo on 9-11-2022 at 9.17 PM.jpg


Photo on 9-11-2022 at 9.41 PM.jpg


The CTCSS R2R network is pressed into service to generate a 400hz signal for a Morse ident.

Photo on 9-11-2022 at 9.22 PM.jpg

Here too is the code so far. It is not doing any radio controlling as yet, and the OLED display option is not implemented.
Lots to do!
Keep checking here for progress.
 

Attachments

Last edited:

VK3ZYZ

Moderator
Staff member
I think this code may actually work!
Channels 0 and 1 do not run the repeater code.
The others have talk timeout and repeater ident after a longish accumulated talk time.
The times will need to be adjusted to suit, as will the ident call sign.
Also, don't forget to run the Si5351 calibration utility from the library example and plug the resultant number into this code.
It now needs to be grown into the radio but that may take a while.
EDIT! I just realized on channels 0 and 1 I need to fix the code so the Si5351 TX ad RX signals are not both running at the same time. DONE!
And I have the LCD/OLED selection working too.

For OLED use, the line should be...
#define OLED // comment out for LCD.

and for LCD...
// #define OLED // comment out for LCD.
 

Attachments

Last edited:

VK3ZYZ

Moderator
Staff member
The VFO/repeater controller board mounts very well in the FM828 sets. There ae a couple of M3 tapped holes just in the right place!
It would be good to claim that as a design choice but it was just plain luck!
Photo on 10-11-22 at 1.08 pm.jpg

The 2 x CTCSS??? boards are to the right of the picture. They were stuck down with thick double sided tape that has died and gone very sticky.
I think this is enough for today.
 
Last edited:

VK3ZYZ

Moderator
Staff member
I found the data sheet for the CTCSS boards in this radio. These look to be set for 127.3Hz.

This may be of some use as I now have a few of these boards.
IMAG0329.JPG
IMAG0330.JPG

So far, I think this is what the FM828 set has.
1668233533308.png
 

Attachments

Last edited:

VK3ZYZ

Moderator
Staff member
FM828_3DPrintedFront.jpg

Here is the 3D printed front I have for the FM828 repeater. So far, I have the receiver working but still need to tune up the transmitter. To make that easier, I decided to work on the controls so now it has a speaket, volume control and power switch. A mic socket will go into the blank space to the right. There is a hole to suit with a thin covering over it that I'll cut out later.
Last 2M SADARC net, I used this set's receiver to listen while talking on my other set.
Here are the .stl files if anyone wants to print a set.

When I get it done, I'll post full info.

EDIT! True to form, the lids don't fit the new front panel :(
The brim I put on it is in the way.
 

Attachments

Last edited:

VK3ZYZ

Moderator
Staff member
Here is the circuit so far.
I just updated it yet again 20221126 as the channel selection links were left off.
NANO_VFO2-Repeater2.jpg


EDIT: Updated code and circuit 20221123

The code needs work but I have actually talked from one set to another via the repeater :)
And the ident and timeouts work.

The IDENT tone is now 1Khz as the 400Hz was a bit hard to hear. Also, there is a running count displayed showing how long talk time without an IDENT has past. It will send an IDENT after about 1 hour of talk time if there has not been a talk timeout.
And the talk timeout per over is a bit over 2 mins.
The RX_Mute control, to mute the RX in timeout situations and tone/ident is now implemented
 

Attachments

Last edited:

VK3ZYZ

Moderator
Staff member
EDIT: I will not use this at the moment as the code looks to be working ok.

I wanted to play with the millis() function to work out how to set more accurate repeater timing. So this is what I've come up with as a test.

Photo on 22-11-22 at 10.04 am.jpg

It shows the loop takes a bit under 40mS to run. This is really not to accurate as a clock because the time taken to handle the seconds setting has not been taken into account, but it was just a test to see how it all works. Also, it does depend on the crystal accuracy.

//having a play to work out the use of the millis() function

#define Version "millis()Test"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x27,16,2); // 16 char x 2 line LCD

extern volatile unsigned long timer0_millis;
int secs;
int mins;
int hours;

void setup() {
lcd.init();
lcd.backlight();
lcd.print(Version);
lcd.clear();
delay(1000);
lcd.setCursor(0,0);
lcd.print(millis());
timer0_millis = 0;
lcd.setCursor(8,1);
lcd.print(millis()); // display millis since power up
// change these to set the time.
secs = 30;
mins = 56;
hours = 9;
}

void loop() {
if (millis() >= 1000) // is it one second?
{ timer0_millis = 0; // yes, reset millis
secs ++; // inc the esconds
if (secs>=60) // is it a minute?
{ secs = 0; // yes, reset seconds
mins ++; // and inc the minutes
}
if (mins>=60) // is it an hour?
{ mins = 0; // yes, reset the minutes
hours ++; // inc the hour
}
if (hours >=24) // is it 'tomorrow'?
{ hours = 0; // yes, reset the hours
}
lcd.setCursor(0,1); // clear the LCD bottom line
lcd.print(" ");
lcd.setCursor(8,1); // display the time
lcd.print(hours);
lcd.print(":");
lcd.print(mins);
lcd.print(":");
lcd.print(secs);
lcd.setCursor(0,1); //back to the start of the bottom line
lcd.print(millis()); // display millis loop time for interest.
}
}
 
Last edited:

VK3YNV

Administrator
Staff member
Interesting way of doing it. Wouldn't you lose time if the software was off doing something else for more than 1 sec?
 

VK3ZYZ

Moderator
Staff member
I may play with something else for a bit as the code now in post #6 looks to be working well, at least on the OLED display. I have not used the LCD as it will be harder to fit the case.
Photo on 22-11-22 at 10.07 pm #2.jpg

This shows the OLED and the addition of the ID_Timer counter.
 

VK3ZYZ

Moderator
Staff member
I have cleaned up the code to remove the LCD stuff as that was not used.
Also, now the DO_IDNT(); function reads the CallSign string to form the Morse ident so that is all one needs to edit.
It does appear to work now :)
 

Attachments

VK3ZYZ

Moderator
Staff member
Here are the link positions indicating the value.
Link 1 on = count of 1.
Link 2 on = count of 2
Link 3 on = count of 4
Link 4 on = count of 8.
RepeaterLinks.jpg
 
Top