RF product - moRFeus - frequency converter and signal generator

Many thanks @Abhishek !

I would like to know more about controlling the MoRFeus with a PC.

For example
Will there be a library for Python?
What will we be able to control?
Will it be prudent to use a USB “Y” cable so extra power is delivered to the MoRFeus?

Again many thanks (this time in advance)!

Mine is scheduled for delivery for this afternoon 4/2. I have the user manual showing the six menu items but exactly how to control the amplitude of the output signal is a little nebulous and whether I need to build some attenuators for the input signal.

The software control is a lower priority. Depending on what I can do with the panel switches.

1 Like

The USB control tool gives you the same settings like what can be reached from moRFeus LCD menu.

No need Y usb cable as the current consumption is around 150mA @5V

(the rest SW questions can answered by Abhishek)

1 Like

In generator mode the signal amplitude level can controlled by the “mixer current” setting, you can see this chart in the datasheet and product page too:

The setting ‘0’ gives you very week power like -70dBm, the rest is in the range of 0 to -20 dBm (depends on setting and frequency range too)

2 Likes

Today I got my moRFeus. Looks nice!
Can you point me to software examples to control it over USB?

1 Like

morfeus_tool v1.6 is now up on archive. This tool can be used to control moRFeus over USB. It offers the same function as the on-screen-menus on moRFeus.

Please check out the pdf at the above link for more information.

2 Likes

Windows … applicable versions?
Linux?

–Konrad, WA4OSH

checkout the pdf

1 Like

@Abhishek @zoltan are you able to give an example “Hello World” example that would more or less prove that moRFeus is running?

E.g. Can you down-convert from 5-6 GHz to 500-1500 MHz? Eg. can you see what’s on the 5GHz band of WiFi on an RTL-SDR. Antenna = 5 GHz rubber duckie.

LO= 4.5 GHz
Mixer current = ? How do you know where to set it?
No bias tee = off
Mixer, not generator.

–Konrad, WA4OSH

wifi is burst-y and very wide (40MHz channels!) - challenging to capture it on rtl-sdr. If its just about verifying moRFeus is working, easiest thing would be to find a local FM station, lets say around 100MHz, and then upconvert it to, say, 1GHz, and try capturing that on rtl-sdr.

So, for that LO would be 900MHz, bias-tee off, Mixer, and Mixer current set to 7. Mixer current simply sets the strength of the output signal (as you can see from the chart posted by @zoltan above). If you aren’t worried about the signal being too strong, just set it to 7.

(You may have to connect some appropriate FM antenna to the moRFeus input)

(edited: removed incorrect line about bias-tee being on the output)

1 Like

Excellent Hello World test. It’s a good sanity check.

So the Bias Tee on the RF output instead of the RF input? I somehow expected bias-tee power Eg. for a “NooElec Low Noise Amplifier (LNA) & SAW Filter Module For Outernet and Other Inmarsat Applications” on the input. But I can see that you might not want to short-out your bias tee supply with a funny antenna.

Is there Bias Tee voltage on the RF output?

–Konrad, WA4OSH

You know, I think I may be wrong about that Bias-Tee being on the output (vs input) - it makes a lot more sense for it to be on the input. @zoltan can say for sure.

1 Like

@Abhishek @Konrad_Roeder It is on the input. I’ve tested this on 100+ devices at this point :slight_smile: Setting bias tee to on supplies about 5V to the RF IN antenna

3 Likes

thanks @karascanlin!

1 Like

Thanks Abhishek for the link! Is there Source code available? I want to implement it in Python and therefore it would be nice to see how you communicate with the device. Sure, I could reverse the code, but this is a very nice device for HAM’s etc and therefore having the sources would be very nice. Thanks!

1 Like

Yup, with python and Qt, you can build a really nice GUI interface or it.

The other thing that’s really needed is to be able to sweep the LO so you can look at filter passbands, etc Eg. with an SDR like HackRF.

–Konrad, WA4OSH

I would love to be able to initiate a continuous sweep of say 1 mhz or setting a top / bottom limit
and let it run while I make adjustments on my filters. I watch the output on my analyzer screens, so It
would be better if I could initiate scans from the moRFeus buttons and not tie up a computer port.

1 Like

@bruno:

The protocol is simple:

  1. set frequency to 1234567890 (0x00000000499602D2 in hex, 64 bits):
    sent hid report (16 bytes): 0x77,0x81,0x00,0x00,0x00,0x00,0x49,0x96,0x02,0xD2,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes):
    0x77,0x81,0x00,0x00,0x00,0x00,0x49,0x96,0x02,0xD2,0x00,0x00,0x00,x00,0x00,0x00

  2. get frequency:
    sent hid report (16 bytes): 0x72,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes):
    0x72,0x81,0x00,0x00,0x00,0x00,0x49,0x96,0x02,0xD2,0x00,0x00,0x00,x00,0x00,0x00

  3. set mixer mode:
    sent hid report (16 bytes): 0x77,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes):
    0x77,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,x00,0x00,0x00

  4. set generator mode:
    sent hid report (16 bytes): 0x77,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes):
    0x77,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,x00,0x00,0x00

  5. get mode (mixer/generator):
    sent hid report (16 bytes): 0x72,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes) when in mixer mode:
    0x72,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,x00,0x00,0x00
    reply from moRFeus (16 bytes) when in generator mode:
    0x72,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,x00,0x00,0x00

general: first byte is 0x72 for “get”-ing and 0x77 for “set”-ing. second byte is 0x81 for frequency, 0x82 for function (mixer/generator), 0x83 for mixer current, 0x84 for biastee on(1) and off(0). Value to be set is sent in the next eight bytes (and returned in those eight bytes), and after these 10 bytes (1+1+8), 6 bytes of zero padding is sent.

Please note this is as the protocol works in raw form. Depending upon OS and libraries used, there might be complications (for example windows expects an extra byte to be sent before the sent report).

Also, the protocol may change on a firmware update, and comes with no support. The command line tools released above are the preferred options for scripting (sweep could easily be implemented by calling out to the tools from python, for example, instead of re-implementing the protocol in python).

3 Likes

@Abhishek @Syed
I agree with James that it would be nice to have a sweep function - either center frequency and width or start and stop frequencies. It’s very useful for sweeping filters, receivers, amplifiers, etc.

Also an RFon / RF off feature would be very useful if the moRFeus hardware supports it. If not, it really needs an RF switch to connect the output to a 50 ohm load when not used. And towards the DUT, there should probably be another RF switch to source a 50 ohm load to prevent oscillations.

I will be adding a step attenuator 0-31 dB in 0.5 dB steps and manually adding some larger 20dB inline attenuators manually. I will use my HP438 to measure the output power and calibrate it.

–Konrad, WA4OSH

Hi, just received the package, it took just 48hrs to come here (France).
First big thanks to @Abhishek and @zoltam, and the whole Outernet team.

So far it’s it’s looks really promising, and I just tested the generator mode, also using the tool (linux-32bits) provided yesterday, thanks ! Helpful !

Below a quick try performed few minutes ago, and associated shell script. Feel free to adapt and fork it, I’m not a programmer at all.

#!/bin/bash
morf_tool=/home/user/morfeus_tool_linux_x32
$morf_tool Generator
$morf_tool setCurrent 1

for i in {433500000..433600000..2500}
  do 
     echo "Freq : $i"
     $morf_tool  setFrequency $i
     sleep 2
 done
sleep 3
for i in {433600000..433500000..-2500}
  do 
     echo "Freq : $i"
     $morf_tool  setFrequency $i
     sleep 2
 done
`

Regards.

5 Likes