• You can now help support WorldwideDX when you shop on Amazon at no additional cost to you! Simply follow this Shop on Amazon link first and a portion of any purchase is sent to WorldwideDX to help with site costs.

Bearcat 980SSB "PLL Porn"

brandon7861

Loose Wire
I Support WorldwideDX.com!
Nov 28, 2018
2,224
2,430
293
Its the same PLL they use in many of these newer radios (like the PC68LTX, see this post), but since the data could be different, this one is getting its own thread. Its time to find out. Spoiler, although the data is similar to the PC68LTX, it is not the same.

Green is chip select, yellow is data, and pink is clock (vertical scales offset a little to help separate the colors). The first thing that I see is that not all the data is for the PLL. Only some of it happens with the chip select on the PLL high so the micro is talking to more than just the PLL. But the two sections where chip select (green) is high, I see the familiar reference divider then loop divider data pattern as in the PC68.
20260116_040343.jpg

This is what is seen keying the mic on ch1
SDS824X_HD_JPG_1.jpg

This is zoomed in on the first section with CS (green) high, its the TX reference divider data
SDS824X_HD_JPG_1.jpg
If you want to decode this, the PC68 post linked above explains it, so I'll just provide the answer here. This translates to a HEX code of 1000, or a dec value of 4096. 10.24MHz/4096 = 2.5kHz at the phase detector. Like before, the last bit tells it that its for the reference.

The second part with chip select high (the TX loop divider data)
SDS824X_HD_JPG_2.jpg
Here, we have a hex code of 196C, or 6508 in DEC, and 2.5kHz*6508=16.27MHz. Going back into RX when unkeying, .....its the same data. This is where the 980 and PC68 synthesis part ways (besides the phase detector frequency and SSB stuff of course).

Rather than using the PLL to shift for TX/RX like the PC68, it is selecting between mixing with the 10.24MHz and 10.695MHz crystals
.
In TX you have 16.27MHz+10.695MHz=26.965MHz and in RX you have 16.27MHz+10.24MHz=26.51MHz (offset by 455kHz).

1768563703338.png

How convenient, you only need to give it one code for both TX and RX :) That might make things easier to arduino!

Edit: So that makes me wonder what Les did. Did he change that code bank for all 40 channels or did he swap the 10.695 and have TX only in freebanded?

Thats it for tonight, headed to bed.
 

Attachments

  • SDS824X_HD_JPG_2.jpg
    SDS824X_HD_JPG_2.jpg
    122.8 KB · Views: 1
  • SDS824X_HD_JPG_3.jpg
    SDS824X_HD_JPG_3.jpg
    126.7 KB · Views: 1
  • SDS824X_HD_JPG_4.jpg
    SDS824X_HD_JPG_4.jpg
    121.9 KB · Views: 4
Last edited:

You might try talking to the guy who goes by "Mark19960" on YouTube. He created a total microprocessor replacement board for the 980 a few years ago so he might have some insight into what's going on with the PLL programming.
 
I'll see if I can find him and ask. The problem with developing a replacement board, in my mind, is that it will cost more for the end user and be too difficult for most people to install. I need to work with the existing hardware.

Whether by connecting to the factory micro and reprogramming it, or by hijacking the data lines, I want an arduino solution that anyone can do for under $30. I want to see the code to make it happen made public. I wanna screw the man and give people a free option that cannot be taken away or squandered by some greedy tech.

I will try to make a profit on this stuff after I retire from my regular job, but until then, I just wanna contribute where I can.

There are capacitors right at the PLL pins that would make intercepting and replacing the serial data a very simple matter, no trace cutting necessary. I think the next thing is to look at the other data that the micro is sending. Who's chip select is going high at that time?

I keep asking myself "What else inside a radio could possibly need to be changed with the frequency?" Is it talking to an eeprom for serial data, is it controlling a digital pot for IF tuning varactors, or is it for the frequency display?? That extra data is a serious mystery that warrants attention, and if I don't get too stoned today, I will try to figure out what it does.
 
You might try talking to the guy who goes by "Mark19960" on YouTube. He created a total microprocessor replacement board for the 980 a few years ago so he might have some insight into what's going on with the PLL programming.
Mark was on here too at some point. He seems to have fallen off the edge of the planet, when his buddy Mike (Mike's radio repair) also vanished.
 
  • Wow
Reactions: doffo
Any guesses? I can't find anything.
Edit, turns out, this is the microprocessor of interest. The one on the display board does not send PLL data, it comes from this one here. NM, it only goes there, I found the signal at the faceplate ribbon cable. I missed it last time around. Faceplate verified as the source by observing delay between PLL and the two potential sources. Definitely from the display PCB, not this chip.
1768627918004.png
I am going to move on to the arduino nano part tomorrow. I could spend a long time trying to figure out how to replace the micro and all its functions and get nowhere, so instead, I think the data intercept method should be tried first.
 
Last edited:
  • Like
Reactions: Shadetree Mechanic
Made a little progress with the arduino. Using PORTD, I was able to emulate the CS, CLK, and Data signals the PLL needs at the same 350kHz speed the radio's micro sends it. Now I need to write the part that listens for what the radio sends to decipher the radio channel and make a lookup table so it can send the data for the modified channel frequency instead.

I'm slow at programming these things. This will only be my 4th or 5th arduino project ever but Im slowly getting there.
 
Made a little progress with the arduino. Using PORTD, I was able to emulate the CS, CLK, and Data signals the PLL needs at the same 350kHz speed the radio's micro sends it. Now I need to write the part that listens for what the radio sends to decipher the radio channel and make a lookup table so it can send the data for the modified channel frequency instead.

I'm slow at programming these things. This will only be my 4th or 5th arduino project ever but Im slowly getting there.
This stuff, is out of my analog kid realm.

I do like what the DDS VFO people are doing with the 980 SSB though. Seems simple enough, except for the Brazil guy/Troy radio collaboration 980 SSB vaporware, that will never be seen.
 
I never did do much with the Si5351 boards. I noticed that after I calibrated it and got it to output the frequency I wanted that everything would reset to factory if that 5351 lost power. Clearly, the arduino sketch I had used to program it did not do so in a way that retained the memory on the 5351. I never did learn how to write stuff to it that sticks.
 
I never did do much with the Si5351 boards. I noticed that after I calibrated it and got it to output the frequency I wanted that everything would reset to factory if that 5351 lost power. Clearly, the arduino sketch I had used to program it did not do so in a way that retained the memory on the 5351. I never did learn how to write stuff to it that sticks.
The Si5351 doesn't have any non-volatile memory that I know of. So you have to put any calibration factor into a sketch for an Arduino to set the board up again at the next power on event.

In the sketch for the Sidebander VI here's what I used to set the calibration factor:

First a definition, then an assignment:

#define XT_CAL_F 1000 //Si5351 calibration factor, adjust to get exatcly 10MHz. Increasing this value will decreases the frequency and vice versa.

long cal = XT_CAL_F;

Then I dropped this line in the setup() function:

si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, cal);

Now every time the radio is power cycled the calibration factor gets written out to the Si5351 before the outputs are turned on (or off).
 
edit: 4am, finally got one arduino mimicking the radio data and another arduino listening, interpreting, and resending whats in my table on separate pins. Gonna go make a dozen copies of the sketch before a squirrel climbs on our transformer. Not done yet though, still need to program it to ignore the reference divider chunk.
 
Last edited:
  • Like
Reactions: Shadetree Mechanic
I connected it to the radio without isolating the PLL just to see if the arduino would detect the channel the radio is set to, and it worked, serial monitor reading the displayed channel as I change it and the scope showing the data for the new channel.

Getting it to ignore the reference chunk was easy enough, it wasn't in the table of codes and ignores it automatically by outputting "invalid code" and not retransmitting anything to the PLL until it gets a valid code that is in the table of the standard 40ch binary sequences.

Those caps by the PLL, those are to ground, not in series with the data, so it looks like it will be a trace cutting job.

This is gonna be slick if it works. 180 lines of code was all it took, and I'm sure someone here with more code experience can shrink that down further if they wanted. If it works fully installed in the radio, I'll be making a video about it.
 
I haven't read any other threads on this subject, so I wonder what ultimate outcome are you pursuing with all of this work?
 
I haven't read any other threads on this subject, so I wonder what ultimate outcome are you pursuing with all of this work?
The arduino is going to be velcro'd to the back side of the display board on that flat metal support and it will be wired in such a way that the data to the PLL goes to the arduino, the arduino interprets what channel the radio is asking for, and then based on a nice little table at the top of the arduino sketch with a list of other frequencies for those channels, the corresponding replacement data will be sent to the PLL.

Its going to be a way to make the 40 channels in this radio be whatever you want them to be. If you want ch1 to be 27.555 and ch2 to be 28.400, you should be able to do that. I just woke up and have some other chores to do, but I should have the final verdict tonight. I need to cut three traces and solder in some wires to actually test the program in the radio.

There are no other threads about it because no one else had done it with the intention of making their work public yet, everyone that has wants a custom product they can charge for.

Edit: it just occured to me that this is going to work on all radios with a serial PLL, not just the 980 (with some data table changes of course):)
 
Last edited:

dxChat
Help Users
  • No one is chatting at the moment.
  • @ 357:
    holy man no activity or what?
  • dxBot:
    357 has left the room.