Wednesday, December 4, 2024

Wouxun KG-UV9D Plus - full duplex settings

 Just a quick and dirty post.  A number of the Wouxun HTs are advertised as being able to be cross band repeaters.

A by-product of that is they are full duplex radios...at least in the crossband (can't confirm any other configurations)

A repeater receives a transmission and then immediately rebroadcasts it.

Most Amateur Radio repeaters repeat on the same band with a predefined frequency offset (depending on the band)

A crossband repeater receives on one band and retransmits on another band.   All the AMSAT/ARISS satellite repeaters operate in this way.   Most of them are 70CM and 2M for the two bands.

If you want to communicate on these satellites, you will transmit on the uplink frequency and receive on the downlink frequency.

The simplest setup to do this is one antenna on one radio, and a different antenna on a different radio.

A more complex way to do this is a dual band antenna (or two antennas through a duplexer) connected to a full duplex radio.


There are a few full duplex mobile radios out there...In my opinion the nicest new one is the Icom IC-9700.


There are very few full duplex HTs.  Kenwood used to have a bunch of them...but the last one they made was the TH-D72...the 74 and later are NOT full duplex.


So I picked up the KG-UB9D Plus, not for duplex, but because it could receive around 7 bands of radio frequencies...I thought that would be interesting.


Just a week or so ago Jason at the Ham Radio 2.0 YouTube channel meantioned that a different version of the Wouxun HT was full duplex.


So I looked at mine and read the specs...and sure enough my was supposed to be able to do crossband repeater work.


I will skip to the punch line, the manual is very hard to follow, and for whatever reason, you cannot word search it...so I had to dig.

I tested trying to duplex it, and it seemed to be transmitting the same time it was repeating (both signal meters were alive) but no receive audio as soon as you hit the PTT.   The speaker icon on the receive side would indicate mute.


So I had to locate whatever was causing the mute...


MENU 60 - Mute on the sub area (S-MUTE). "Setting the volume status on the sub band when the transceiver is working on the main band.

Option: OFF/RX mute/TX mute/RX and TX mute

Default: OFF"

So for all that gobbly gook...to get full duplex where you can hear the receive audio...

Hit the MENU button (on my radio it is orange)

Dial the freq knob (top next to volume) CCW to MENU 60, "S-MUTE" will  be on the display.

Hit the MENU button again, this will display the current setting...you want to see "OFF"

Sub band is which ever one is not main...seems obvious, but some radios use A or B (top or bottom freq of display) to define some functions  freq on the display...this just uses Main and Sub...much easier to understand.  (However there is still a A and B side... top is A and that is the only half that can do AM)

Mine was not set to the Default...so at some time in the programming that got swapped.

I tried to reproduce the mute function...but couldn't so I listed the rest of the settings that might affect it

MENU 43 "TYPE-SET" - TALKIE

MENU 44 "RPT-SPK" - ON

MENU 60 "S-MUTE" - OFF

Until the few hours I spent solving the duplex problem I had NEVER changed any menu entry...and about half of mine were not the defaults as listed in the manual...so maybe check them all.

Hopefully something in there helps.


Sunday, September 1, 2024

Kenwood TM-D710A GPS mod.

 Kenwood TM-D710A GPS mod.


Another copy of someone else's work...


I have the older non built in GPS D710...I had been using various external devices...but hated setting them up when using radio in a different vehicle.

In my case that different vehicle was used for 100 mile bicycle race support.  This year the bike race organizers incorporated APRS as an additional way to see where the support vehicles were currently located.   I didn't bring my external GPS, and my HT couldn't hit most of the APRS Igates...so I couldn't really participate in that...just had to use old fashioned location reports.


I started looking at the subject again, and there were no inexpensive, simple solutions to adding GPS...and most were no longer available or required out of date, and somewhat unavailable hardware.


Then I found this article.

 https://mythopoeic.org/tm-d710-internal-gps-de-nf3h/


It had all the info I needed...but I found some more references just to make sure.


Such as... https://yo3hjv.blogspot.com/2010/01/oem-gps-inside-tm-d710-front-panel.html


I used the Sparkfun GP1818  https://www.sparkfun.com/products/19166


It can take up to 5v VCC, so no regulator is required to step down to 3.3v

The serial output is 3.3v so I inserted the signal on the output side of R47.  Intially I had a 1k resistor from the GPS TX output to that point after R47...but wasn't getting a signal, then realized the output was only 3.3v without a resistor.


I recommend finding the service manual for the radio to locate the 5V power source and R47.


I have a microscope for soldering, so it wasn't a big deal...but R47 is tiny and requries much care to solder to...I was using tiny 30ga or so wire and that was big next to R47.  My tiny (I thought) solder tip was the entire size of R47...and I have done quite a bit of pin by pin SMD soldering with that same tip...


I didn't have to modify the case at all...just double stick taped the module to the back case right next to the 'speaker' output.


Good luck.

Arduino Teensy 4.1 MIDI Step Sequencer

 I had been working on a Teensy based Synthesizer project, but the one I was designing was too complex to manage the code. Luckily a friend of mine was also working on one, so I am using his.

But now, how do you play it, well you can plug a keyboard in and play it that way, or you can program a sequence in to a keyboard sequencer etc.

But I was sure there was a project for a small stand alone sequencer I could build.


And there was.  Simple DIY Electronic Music Projects has a ton of projects...including an Arduino based Step Sequencer.

I knew this was a terrific starting point.

Two areas for improvement...the MIDI channel was hard coded in, so if for whatever reason you changed your mind, you had to reprogram it.

Second the BPM rate was fixed...again, no way to change it without reprogrammming.

So I started with the base code and added my own... He (Kevin the author) wrote some well annotated code, so it was simple to add my code.

I added three things.

I added the ability to select a MIDI channel, I added the BPM rate selection...and I added a display so you could see your settings AND see the 'beat' as it went across the 8 notes.


I will list the parts of code that I added and explain them, then the whole code at the end.

First, display.

For the display I already had an Adafruit 8x16 matrix display on their LED Backpack.

I needed to be able to drive it and change the font...both were a bit of a challenge for me.

I edited both Adafruit_LEDBackpack.h and Adafruit_I2C.h from "&Wire" to "&Wire2" because I am using SCL2/SDA2 for I2C

#include <Adafruit_GFX.h>

#include "Adafruit_LEDBackpack.h" 

#include <Fonts/Picopixel.h>

Adafruit_8x16matrix matrix = Adafruit_8x16matrix();

 First two are needed to drive the hardware, third one changes the font to a smaller one (so everything fits on screen)

Fourth line defines the matrix as a display device (vs a tft or something else)


Next the code to assign the MIDI channel

int midiChannel;

int midird;

float bpmmath;

The first line I changed...the default code sets a fixed midi channel there.

next I needed some variables to track the midi setting and bpm setting


Now some setup to allow the user to set the midi channel during boot up (from my friend who made the synth)

unsigned long start_millis;  // use this variable to take a snapshot of

                             //    the current number of milliseconds

                             //    since the Teensy last booted


#define HOW_LONG_TO_WAIT_IN_MILLISECONDS  5000  // use this constant to specify how long

                                                //    you want to look/wait for something

                                                //    at startup: this defines 5-seconds

Next bit of code is added to voice setup so during the first 5 sec after boot you can select the midi channel.

 void setup() {

 //added code to drive matrix LED and the midi channel select code  

  matrix.begin(0x70);  // pass in the address.  default for led backplane

 Wire2.begin(); //in order to use SCL2/SDA2 you need Wire2 and need to change the Adafruit libraries listed above 

  // next section allows a delay for user to set midi channel using MIDI/BPM pot

  start_millis = millis();   // take a snapshot of the current number of

                              //    milliseconds since the Teensy booted

  while ((millis() - start_millis) < HOW_LONG_TO_WAIT_IN_MILLISECONDS)

   {

      // whatever you put here will be done repeatedly

      //    until your defined time in milliseconds expires

  midird = analogRead(A14); //reads pot for midi...later same pot used for BPM

  midiChannel = map(midird, 0, 1023, 1, 16); //map() converts the analog pot to 16 choices

  delay(50);

  matrix.setFont(&Picopixel); //make font smaller

  matrix.setTextSize(1);

  matrix.setTextWrap(true);  // we dont want text to wrap so it scrolls nicely

  matrix.setTextColor(LED_ON);

  matrix.setRotation(1); //if hookup wires are on left then 1...if on right then 3

    matrix.clear();

    matrix.setCursor(1,5);

    matrix.print("M ");

    matrix.print(midiChannel);

    matrix.writeDisplay();

    delay(50);

 }


All the rest of the code is in the void loop

Next on the list (as we go down the code)...I had a problem with the synth sending midi messages back through the usbMIDI and eventually locking up the synth...this can be disabled on the synth, but it made more sense to simply stop the controller from receiving the return info (that it doesn't need or want to operate)


void loop() {

   while (usbMIDI.read()) {

}

It just reads and discards or ignore inbound messages (I am not sure exactly which)...either way it solved the problem.

Now the additional code to read the input and set the delay for the appropriate BPM (beats per minute)

  //so I modified code to allow a pot to give the delay instead of fixed...it is set to run 1000ms to 150ms delay

  int bpmread  = analogRead(A14); 

  int bpm = map(bpmread, 2, 1015, 1000, 150);

  float bpmmath = 1.0 / (bpm / 1000.0) * 60.0; //probably a better way to do this, but it is what I came up with

  int bpmshow = bpmmath; //gives us a BPM vs a delay to display

 delay(bpm); // this is a code change from fixed delay to adjustable

   //this dispays bpm on matrix display

  matrix.setFont(&Picopixel); //sets the smaller font

  matrix.setTextSize(1);

  matrix.setTextWrap(true);  // we dont want text to wrap so it scrolls nicely

  matrix.setTextColor(LED_ON);

  matrix.setRotation(1);

    matrix.clear();

    matrix.setCursor(3,5);

    matrix.print(bpmshow);


And finally some code to flash an appropriate LED when a note in the sequence is played (1-8)

//tracks where in the sequence it is for use on display later in the code...

  int x = (((playingNote + 1) * 2) - 2); //so the first note (A0) lights the first led etc

  int y = 7;  //I didn't need to put this here...but it made sense to keep it all in one place

 matrix.drawPixel(x, y, LED_ON);  //uses variables from above to plot a dot at the current step position

  matrix.writeDisplay();  // this writes ALL the above info to the matrix LED display

 }

 Thats all the modifications...the wiring should be straight forward...but I will summarize here (again on my Teensy4.1)

A0-A7   -10k pots for the notes in the sequence

A14       -10k pot for MIDI/BPM adjustment

TX1/RX1  -(if you add a actual 5pin DIN MIDI port)

SCL2/SDA2  -for I2C to drive LED display

The 10k pots have 3.3v on one side, GND on the other side and the center pin goes to the A0-7,A14 pins for input.  DO NOT USE 5V.

On my pots I have GND on the 'left' (viewed from the top) pin or the pin you turn counter clockwise toward...

...3.3v is on the 'right' pin or the pin you turn clockwise toward.   

This way CCW is down and CW is up.

I am using the USB port to power it, and pull 5v off for a MIDI connector and the LED matrix display.

 

 

Wednesday, February 22, 2023

Icom IC-7300 with SDRplay RSPduo as panadapter - digital mode settings


 There is already a ton of information on the PTRX-7300 panadapter I got for the IC-7300 from RadioAnalog.   I have a RSPduo attached to it. (in the screenshots I had hooked up a RSP2Pro for testing)  Also there is lots of info on using the USB port on the 7300 for CAT.

I am just going to list my settings...because it was a ton of pain to figure it out from conflicting info.

SDR software - SDRuno (works with the RSPduo and their other products)

Digital applications in use - Winlink Express, Vara HFFLdigi, WSJT-X, JS8Call

System:  IC-7300, panadapter, RSPduo, Win10.

Basics:

Omni-Rig and com0com software for the various apps to connect to the other software/hardware.  Some programs need com0com, some need Omni-Rig.  Apparently the 7300 does not support RTS/DTR.

SDRuno to interface with the RSPduo and control everything.

In all cases, once you correctly point to Omni-Rig or com0com/SDRuno your app should immediately start showing the radio frequency and the 7300 as well as SDRuno should match...if not, then go back to the basics.  Do the Test Cat/ Test PTT if possible...or just try to send a message.

AUDIO:  Luckily this is the same for all apps...the Icom creates two "USB Audio CODEC" devices...one is a Microphone, and one is Speakers.  The preceding number may be different than my screen shots, but they will say (USB Audio CODEC) in the name.  Mine say (3- USB Audio CODEC)

BTW, Winlink Express was the hardest, followed closetly by FLdigi...WSJT-X was the easiest.

If you are using different SDR software...as long as it sees Omni-Rig and can create a virtual CAT port...these instructions should work for you.


Omni-Rig:  Software to interface many apps to your radio.

Install normally and point to the Com Port the Icom is using.

-NOTE: the radio has two baud rates in the Set > Connectors > CI-V section.

--1: CI-V Baud Rate = 19200

--2: CI-V USB Baud Rate = 115200

In Omni-Rig use the CI-V USB Baud Rate...in my example 115200.  Screenshot below is from my working system.


com0com: creates virtual com port pairs...allowing devices to interface with each other, if they can't use Omni-Rig.

I only needed the one default port pair.  In my case COM3 and COM11


SDRuno: Can use Omni-Rig AND create a virtual radio com port for other apps to attach to.

--1: enable RSYN1 which lets SDRuno attach to Rig1 on Omni-Rig.  Once you click that this software and the radio should match frequency.

--2: Enable &Connect the CAT (in the RX Control Settings)

-This is how my software looks.


--NOTE: In my example SDRuno creates COM11...so all the appropriate apps need to connect to COM3 (created by com0com)

-- Also it simulates a Kenwood...normally a TS-2000...but you will see it is pretty generic.


Winlink Express with VARA HF

--1: set up correct SoundCard on the main Vara HF window.

--2: In Vara HF Winlink Settings there is no TS-2000...so I chose the TS-890S and seems to work fine.  Note Com port matches com0com and the baud matches SDRuno, and I put the TS-890S in the PTT Port also.



FLdigi:

--1: Need to use FLrig. TS-2000 for the radio, Com from com0com, baud from SDRuno.  The rest of the FLrig settings don't seem to matter...but this was my best guess.

--2: In FLdigi chose flrig for rig control (checkmark box in the flrig setting)  and set up the audio.



WSJT-X:

-1: of course this is the easiest one...just choose OmniRig Rig 1 (if using RIG1 for your radio) as the radio. (the screen shot below shows far too many uses of the word Rig...)

-2: same sound card settings as all the rest.  



JS8Call:

'should' be just as easy as WSJT-X.


NOTE: In this screen shot I hadn't yet clicked "Test CAT"  So the Freq hasn't matched yet.


If I add more...they will be tacked on here.






Wednesday, December 9, 2020

Link SIP phone throuhgh PBX to Allstar Node.

 I honestly have no idea why someone would want to do this...but I done it anyway... making a PBX so I could  do all the things made some sense...linking the PBX (asterisk) to the Allstar node (asterisk) seems ridiculous.


So here is how to do it.  (this is more of a quick and dirty reference rather than a walk through explaining everything)


Background...in 2018 I built an Allstar Node using a cheap radio and a Raspberry Pi.  My access to control it was either DTMF on the radio, or logging in using the built in web page.


Also a couple of years ago I got a Hamshack Hotline number and had that on my SIP phone.


(some other things were done...time passed) 


And just now I built a PBX using Incredible PBX on a Raspberry Pi.


So obviously I would link the Allstar node to the PBX.   Trust me, there are much more advanced set ups that folks have done with Asterisk and radios...Such as K8JTK's multimode hub.


Anywho it took a day of pain and watching error screens before I got the solution...and the first verified solution did not work at all...maybe I typo'd something, but it was wrong.


This won't be full of info, because it is pretty simple...it is just the terminology that is difficult.


If  you built a PBX then you know some of these terms already.


Big picture is Allstar uses Asterisk to do all the heavy work, the DTMF controls the hub linking etc.

Incredible PBX (FreePBX) ALSO uses Allstar for all the heavy lifting...it just has a pretty GUI to make admin easier.


What we will do is connect two peer Asterisk servers.   Allstar <-> Incredible PBX


To do that we will Trunk them together using the IAX protocols.

That means, on Incredible PBX we will ADD a IAX Trunk.


If you already have the Allstar node, then you are already used to editing the various .conf files.


We will edit two of them.  iax.conf and extensions.conf     (if you were to connect a SIP phone to the Allstar node directly you would edit sip.conf and externsions.conf. SIP for phone, IAX for server)


IAX.conf is basically the 'add IAX Trunk' for the folks that like using the linux terminal.

[pbx2_to_pbx1}
host=(IP address of PBX2 goes here)
username=pbx1_to_pbx2
secret=UseALongPasswordNumbersLike1234AreOk
type=friend
disallow=all
allow=ulaw

[pbx1_to_pbx2]
host=  (IP address of PBX1 goes here)
username=pbx2_to_pbx1
secret=UseALongPasswordNumbersLike1234AreOk
type=friend
context=radio-control
disallow=all
allow=ulaw

So those two matching entries are the Trunk entries or IAX.conf entries, depending on which device you are working on.   The HUGE hint is to look at the name in [brackets] that is the TRUNK name.   Note also that the OPPOSITE machine uses that TRUNK name as USERNAME and vice versa.   That lets the two Trunks to talk to each other.

Not understanding that, and following the wrong instructions took a day to figure out.


You will note in my screenshots that I didn't put all that stuff in it...but the important takeaway is the relation of the "Trunk Name" in the OUTGOING section of the Trunk entry to the username of the Trunk in the machine you want to link to.


The other edit required is in the  extensions.conf   again note the name in [brackets] it has to match the "context=" value in the Allstar node IAX.conf.


So how does it work?  I select the same extension I am using for GV,  punch in my Allstar node number, the PBX connects my phone to the Allstar node.  From there I punch in the codes to connect to outside nodes...or just listen to what is coming over my node.   I haven't done any speed dials etc yet...


Some links.

I used this to make the extensions.conf

Here is where I learned the correct format for the iax.conf/Trunk entries

Some screenshots.






Monday, December 7, 2020

GoogleVoice through Obi200 to IncrediblePBX (FreePBX) on a Pi4 (part3)

Parts one and two had to do with setting up the Obi and Phones.

It doesn't matter in what order, I think it makes  more sense to me in this order.


The PORTS used depend on what SP you use etc...the screen shots are of mine...if you use a different config, then doublecheck the ports...mine are consistent, so you can start with your Obi and convert from mine to yours.

Also btw...I removed my GV number from the caller ID spots in the pictures...but it was only in a few places that I should have mentioned...if I didn't mention caller ID, then you probably don't need to put the GV number in...in other words there are blank caller ID spots and filled caller ID spots...I think CID is only need in two spots.

I will not get into installing Incredible PBX.  BTW, if you are googling for help you can use FreePBX also in your search...the menus are the same.


This last part is the settings I used to get the PBX to talk to the Obi,  For the Phones to talk to the PBX, and for the phones to make calls and ring, and even intercom.


First...PBX talks to Obi.

Log into your Incredible PBX as Admin  (when you installed you should have created a new password?)

We are starting from zero...nothing other than default entries on the PBX.

After each step, hit submit...when done with a section click the Red button in the upper right that says Apply Config

 ---------------------------------

You need a Trunk.


Click on Connectivity > Trunks


There are a ton of Trunks there for using all sorts of VOIP phone services...I am not using those, so I deleted all the trunks.


+Add Trunk > +Add SIP (chan_sip) Trunk     (I could not get anything to work using the pjsip anywhere                                                                             in my install...just plane old legacy SIP)

General Tab

Trunk Name = {something useful to you  - I used obi200 to match the Obi settings}

Outbound CallerID = {your Google Voice number}

sip Settings Tab

 type=friend
defaultuser=obi200
secret={password you put into the obi}
qualify=yes
port=5062
nat=yes
host=dynamic
dtmfmode=rfc2833
disallow=all
context=from-trunk
canreinvite=no
allow=ulaw
insecure=port,invite

 Thats it for Trunks.

 ---------------------

 You now need an Outbound Route

 

Delete any existing Outbound Routes, or you will have a bad time.


Route Settings Tab

Route Name = {something useful to you - I chose OBiOut}

Route CID =  {same Google Voice phone number}

Trunk Sequence for Matched Routes = {you just built it... obi200 for me}

Dial Patterns Tab

You can try to learn them...or just click the 'Dial patterns wizards' and select all the appropriate ones

 

Thats it for Outbound Route

 -------------------------------

We will have to do the Extensions before we do anything else...these are the different physical phones (in my case) you want to access the PBX.

 

Applications > Extensions

There will already be a bunch there and you can use them...or roll your own...I rolled my own and did some experiments, so there are some extras there...don't worry about them.

They are pretty simple.

+Add Extension > +Add New SIP (Legacy)[chan_sip] Extension


again, I could not make the pjsip extensions work...my phone wouldn't log in, and it wasn't worth it to fight it.

If you edited your phones and gave them numbers like 201, 202 whatever. you make an Extension for each one.

In my case I have two, 200 and 201.  (ignore the others in the pictures)

So 

General Tab

Extension = 200 {whatever you put in that particular phone}

Display name = 200 {or whatever you want}

Secret = {same password as you put in your phone}

That is all you NEED to do...you can add voicemail etc...that is beyond the scope of this article.


Once you have made an Extension for each phone...you are done.  (BTW the user manager settings are to allow logging into a user dashboard)

Now I have two Extensions...and probably my phones are showing online...but we aren't done yet.

------------------

We want to be able to answer the phone.   If you wanted only one phone to ring you would set it up a bit differently from here...


...but I want all phones to ring, so I can pick up whatever extension I am near.

 

So I need a Ring Group

 

Applications > Ring Groups

+ Add Ring Group

 Name= {some number, this is considered an extension, I made it 222}

Group Description = {anything you want, sales, admin, or in my case bothphones}

Extension List = {all the extensions that are in this particular ring group...in my case both phones, yo

u                                 can use the User Quick Select. In my case 200 and 201}

Ring Strategy = {this is awesome...so many choices...but I simply want all the phones to ring                                            simultaneously so... ringall}

Destination if no answer = {for now I have an extension chosen...but voicemail is probably a good choice...outside the scope of this discussion}

You are done with ring groups...

-----------------------------

NOW time to do the Inbound Routes

 

Connectivity > Inbound Routes

(there should not be any old routes here...if there are, delete them)

+Add Inbound Route

Set Destination = Ring Groups   {and select the Ring Group extension you created - in my case 222}


That is it for Inbound Routes.

--------------------------------

Bonus section

 

Put all the phones on intercom...

Applications > Paging and Intercom

+Add Page Group

Paging Extension = {this is the phone dialpad sequence you type to start the intercom -  in my case 22}

Group Description = {whatever you want}

Device list = {pulldown - which extensions do you want involved in the paging - for me all of them}

 

Done with paging.   When I select the PBX line (EXT3 on my SPA504) and type 22 on the dialpad, all the phones (both) go on speakerphone and connect to each other.

----------------------------

That is everything I modified...and attached are my screen shots in case something doesn't make sense.   If it doesn't work, break down WHICH part doesn't work.


Some examples...I could phone in and one phone would ring, but I couldn't call out.  I had to delete the default (extra) outbound route to get the phone to dial out.

Only one phone rang during ringall...because one of my phones was not set up to Register on the PBX.

lines wouldn't connect to the pbx at all...because phones wouldn't use pjsip extensions

Latest example...one phone could dial voicemail and the other couldn't...the one that couldn't had just XX in the dial plan...it needed to be (*xx|[3469]11|0|00|[2-9]xxxxxx|1xxx[2-9]xxxxxxS0|xxxxxxxxxxxx.)

 

Pics...lots... hope it helps someone ... Of course there is much more to set up...but this gets your phones working.

 

 































GoogleVoice through Obi200 to IncrediblePBX (FreePBX) on a Pi4 (part2)

 Part one had the settings to edit on the Obi200.


This part will cover two Cisco Phones a SPA504G and a SPA525G  these are SIP phones, and the ones I have are unlocked (not associated with any carrier).

These settings will allow the phones to be able to access the PBX for calling etc.

I will have to assume you know the basics of how to get to the admin page of your phone and how to enable lines etc.

Again, my PBX is at 192.168.11.45

For my setup...I put the PBX Google Voice line on Ext3 on the SPA504, and Ext4 on the SPA525, it doesn't really matter...just make sure you enable those Extensions and put them on Line buttons.

Everything I don't list is default from factory refresh.

EXT3

SIP Settings

SIP Port: 5062

EXT SIP Port: 5060

Proxy: 192.168.11.45

Outbound Proxy: 192.168.11.45

Alternate Proxy: 192.168.11.45  (I don't know if I had to fill them all in...but I did anyway)

Register: YES

Subscriber Information

Display Name: {whatever you want}

User ID: {an extension on your PBX I went with the 200s so this one is 201}

Password : {enter the same one on the PBX extension area for this extension}

Auth ID:  {same as User ID - again I used 201 here}

Dial Plan: (*xx|[3469]11|0|00|[2-9]xxxxxx|1xxx[2-9]xxxxxxS0|xxxxxxxxxxxx.)

Every other phone will have a different extension.






GoogleVoice through Obi200 to IncrediblePBX (FreePBX) on a Pi4 (part1)

 Long time no post.   Been doing stuff...but nothing completed, or worth documenting.


However this battle took days and the docs and instructions I found assumed you knew something.  (they were wrong).

BTW...some good links...

Documentation on all the settings for FreePBX (Incredible PBX)

Obihai support page

Obihai support video on how to set up Google Voice on Obi200

Nerdvittles article on setting up Incredible PBX on your Pi

How to set up your system so email works 

 

In summary, I installed the Incredible PBX (using an image) to the Pi4.   (I won't get into what a PBX or Asterisk or anything else is...this is simply my settings.)

 

Right now the only way to use a GoogleVoice phone number is through an Obi device (Polycon?)

I have an Obi200 that gives me a regular POTS phone line to plug into, but used a VOIP service on the other end...for example Google Voice.

 

I recently learned how to make an entry to the Obi that would allow a SIP phone (like a Cisco SPA504g) to call and answer on that Google Voice number.  (this won't explain that...I will link it)

 

A few months later I learned that I could take a PBX software, and have it call and answer through the Obi to Google Voice...AND then can have any number of SIP phones attached to it.  So instead of one SIP phone...a whole house full of them (if I so desire).  

 

Why would I care? I am already using a SIP phone for things other than my Obi telephone service.

 

So this string of posts will only involve taking your existing GoogleVoice setup on your Obi200 and pushing it out to IncrediblePBX and from there to SIP phones.

 

Part 1: I will start with the OBI settings in this post .   I don't know exactly why these are the settings...it just works (and some are different than all the tutorials I found) 

Part 2 will cover the phones and part 3 the Incredible PBX settings.

--------------------------------Danger Ahead-----------------------------


If you mess up your existing working Obi...not my fault...but I recommend that before you do this, you make a backup (or like I did, actually take screenshots) so you can put it back.

Good news is this does not involve editing the Service Provider settings of your existing GoogleVoice install...it does add one thing to the SP service associated with your GoogleVoice install.

To start, you have to enter the Obi Expert Configuration Menu on the Obi Dashboard (not your local device dashboard)

We will be working with the following that show on the left menu after you enter expert mode on the Obi

Service Providers: listed as A-D

Voice Services: listed as SP1-SP4 and some other stuff

I will try to list my setup, so you can modify to fit your setup.

 Service Providers:

ITSP Profile B is my Google Voice  main inbound service - we will not edit this.

ITSP Profile C is unused, I will connect my PBX to this profile

Voice Services:

SP2 Service is for Google Voice main inbound service - tiny edit here

SP3 Service is unused, I will my PBX will use this service


Obi is at 192.168.11.32

PBX is at 192.168.11.45

One cisco phone is at .33 and one is at .35 


To edit the Obi Expert Menu, you have to uncheck OBiTALK Settings, and then uncheck Device Default...sometimes you have to 'submit' there to go further...IDK.

Edits---

Service Providers > 

ITSP Profile C General

-General

Name = {whatever you want}

-Service Provider Info

Name ={same as above}

URL = {PBX ip address}

 

ITSP Profile C SIP

ProxyServer = {PBX ip address}

RegistrarServer = {PBX ip address}

OutboundProxy = {PBX ip address}

 ...

X_SpoofCallerID {uncheck Obitalk settings and Device default, check Value)

X_DiscoverPublicAddress {uncheck all}


Voice Services > 

SP2 Service

-Enable

X_InboundCallRoute = ph,SP3           (in my setup, the POTS phone is still connected and still rings)

                                                               (SP3 is for the PBX)

SP3 Service

-Enable

X_ServProvProfile = C    (because I created ITSP Profile C they go together)

X_InboundCallRoute = >(MSP2):SP2    (don't ask me what this does...but SP2 is where GV is)

X_AcceptSIPFromRegistrarOnly {check Value, uncheck the others}

X_KeepAliveEnable = {check Value, uncheck the others}

-SIP Credentials

 AuthUserName = {pick something, but you will use it on your PBX, I used obi200}

AuthPassword = {I put one in, but the check mark keeps going to Device Default...yet it works...}

                             (you will use the password on your PBX)

-Calling Features

MaxSessions = {something larger than 1...I used 6}

 

 

Some of those settings might be wrong, there may be better ways...but it works.  At the end I will attach the screen shots so you can compare notes.

 

On to Part 2 the phones.

 





 

 

 





Monday, April 27, 2020

Supplemental files... DG-10 to DG-20 MIDI conversion

Ok...this is simply going to be all the files...I will try to organize them by section...starting out with the MIDI conversion.

This is what I used to do my mod.

First it is very handy downloading the DG-10/20  Service Manual available many places... 

On all the documents I annotated the original wiring in red (so I could follow the circuit) and my changes in pink (basically as an assembly manual).

The most time consuming part was the re-engineering...but soon I realized that the schematics almost exactly matched the circuit board...so you could almost lay the schematics over the board to identify parts.

In my reverse engineering I reversed the pictures of the bottom of the circuit board so it would directly match the top of the board...and the schematic...it makes sense once you try it.  As a result some of my notes are in backward writing, but it is easy enough to figure out.

Lets start with the schematic.  

First starting with the MIDI port on the DG-20.  There is a switch to either have 6 channels out...or just all 6 strings to one channel.   Second is the port itself.   Note the identifiers JG-1 through JG-6  This is on a daughter board at the IO jacks...I had to just wire it up direct.  (BTW the item marked FB...those are ferrite beads) (I used DigiKey part number 240-2513-1-ND Ferrite Bead 86 Ohm Axial)  Also on the circuit below, there are two things that look like black circles spit in half...they probably match something on the circuit board that would have been mounted on the DG-20...I couldn't even see a photo of that board...the fully split in half one means not connected...the one with a small line in the middle is connected...


 Now on this schematic on the upper left side you again see JG-1 through JG-6 , these are the drilled holes in the DG-10  circuit board...they aren't marked...and I did have to modify them a bit...but it is almost 100% there.  So I ran wire from those drilled holes to my MIDI connector and switch.



Now you will note on the DG-10 schematic the obvious missing JG connection.  You can see in pink the required mods...one specific one tells the CPU that it is a DG-20 not DG-10



So here is what it looks like on the DG-10 circuit board.







 Inverted backside with mods  You will note I marked the connection 1-6 on the upper right side.

BTW all the jumpers and components go on the top...but it was easier to follow the circuit by drawing it out on the bottom of the board.




Actual view backside with mods, again red is existing wiring, pink is my mods.





These photos have ALL the mods in view, not just the MIDI...so just using the schematic, knowing where i marked pin 1 and 6, just follow the lines... There is one wire to remove, a resistor to add, a diode to add. and a handful of jumper wires to install...almost everything goes into existing drilled but not marked holes.  Now for the pic below, note the wires at the lower left of the above pic.



 Here is the only circuit trace you have to cut...right there in the center of the pic above next to "JD" you see I have a pink line and 3 white lines...that area is one big circuit trace, so I had to cut it where those lines are to separate the area into separate traces...the white is where I dug through the copper trace to bare circuit board below.


Finally I needed to know what pin is what for the MIDI connector.

Going slow and using a voltmeter in 'resistance...beep' mode I went through it line by line, making sure I had a match from the schematic to my DG-10 wiring.


Friday, January 10, 2020

Casio DG-10 modified into a DG-20



So if you were a rich kid in the 80's you might have had a DG-10 or DG-20 a digital guitar made by Casio.  ($350 for the DG-10...I am guessing the DG-20 was $50 to $100 more)





I was not a rich kid in the 80's and I hadn't even heard of this until I saw one on the remake of the Take On Me video by Weezer.



So I did so looking around, figured out what the device was, then tried to by one.



I lucked out and picked up a DG-10 (like in the video)  that needed a bit of work but operated just fine...for dirt cheap...

So I got it running and played with it a bit, as I dug through the documents available I learned that I had the stripped down version, but there was also a DG-20 that had line out and MIDI out. (as well as some other sound and manual percussion switches).

Well I was jealous of the MIDI output...so I popped mine open to see how hard it would be to modify mine to add MIDI support.

I noticed that in the Service manual that the main parts seemed to be identical and even the circuits were almost identical except for some minor differences and some passive components.

I took pictures of the circuit boards top and bottom and happened to find a few pictures of a DG-20's guts.

I realized that those geniuses at Casio had built both keyboards with the same chips and almost identical circuit boards except for about 3 modified traces...depending on which version you got, some traces were whole and some were cut.

The circuit boards even had the drill holes...the only thing missing was labeling and some of the pads were coated and had to be cleaned.

So based on the schematic (they did not have board photos unlike most electronics service manuals) I basically reverse engineered the circuit boards and figured out where to add passives and jumpers, and where to remove them to convert the DG-10 into the DG-20.

(luckily mine is a DG-10 so no worries)


I can say that it was actually an easy mod...time consuming for the planning and reverse engineering, but the actual mod went pretty quickly with no problems, except for missing a jumper, and 4 passives for the line out circuit.

So the total number of parts required for the mod were:

1 slide switch
1 midi port
1  1/4" mono port
8 momentary pushbutton switches 
4 ferrite bead filters
9 diodes
3 ceramic capacitors
3 electrolytic capacitors
6 resistors

So depending on what you have on hand...$10 to $20 worth of parts...you know the Casio factory got them at bulk...so I am guessing the DG-20 cost at most $5 to $10 more to build...total cost. (some more rubber switches, two more circuit boards, and a completely different sound selector in the actual DG-10)

The result is other than how the switches and outputs look, my DG-10 is a DG-20.





I am sure nobody else is dumb enough to do this mod, but I include the photos I used and modified to show the original circuit and components and the ones requited to modify the DG-10.

I will say you don't really need the line out, but I thought bypassing the amp circuits might sound better?

Anywho the following are my modifications to the board photos I did.


 Lineout mod to schematics (not complete...just showing what I missed...

In all cases the pink (salmon?) colored lines are what needs to be added or modified, the red is the existing circuit topside components (to help me trace the circuits)









Amp circuit mods to get line out


Tone control and rhythm select panel...needed to be modified to add 4 tone switches.



If someone really gets a desire to do this mod, drop me a line and I will send all my photos and documents...