Keyboard Shortcuts
Likes
- N2adr-Sdr
- Messages
Search
Re: Adding a new kind of radio transceiver
Ok, After I corrected the missing "Pass", I got SSB working reasonably well and am seeing about what I expect to see in both the receiver and transmitter.
I'm pretty sure this is working as you intended because I was able to enable the IMD button and once I figured out how it worked I get a fair two tone signal transmitted at about the level I expect. I tried to get CW working and once I figured out that the config option in the "timing and cw" config dialog that said "Set" and nothing more was actually the sidetone enable switch - (must be a problem with the font size or something) The sidetone keyed along nicely and the radio sort of appeared to be transmitting, but what was coming out if it was a wierd short pulse for every keydown and not a proper CW signal. When I investigated the audio coming out of Quisk I found that the enclosed waveform was what it puts out. I was able to capture this by sending some very fast "dits". They appear to be at the dit rate. Furthermore. This was only on ONE channel of the audio, instead of the expected quadrature signal. The editor crashed here when I tried to enclose the small png file! The waveform looks like an attempt to send DC on one channel only of the sound card! I'm still using the Softrock fixed as the radio type. The USB variant looks unusable and all attempts to make it the radio type created a lot of error messages. Note that radiohat is NOT a USB connected radio. No USB is involved at all except that the current device I'm using for the speaker and microphone is USB connecte. I'm going to try and put the image in another post, since the editor is not showing an image icon during this edit. Another thing, I tried to install the latest Quisk on Raspbian "bullseye" and found there was no way to do so following your instructions. Bullseye uses Python 3.9, so I would think it should work. M |
Re: Quisk conf.py Si570 QRP2000
Hi Yves and everybody,
I managed it! Indeed I changed two lines in the "hardware_usb.py" file. The QRP2000 signal generator essentially in Quisk connects to the PC via the USB port like Softrock, but in the "hardware_usb.py" file there are two lines containing " * 4 ", and that is where the frequency is multiplied by 4. Removing the * 4 the QRP2000 to generate the frequency 3.5Mhz actually generates 3.5Mhz and not 14Mhz (= 3.5Mhz * 4) anymore. Then regarding the 10.7Mhz offset, it's trivial as I use the transverter option in the menu of Quisk in "bands" (just like Softrock) and to receive a 3.5Mhz with a 10.7Mhz intermediate frequency I set the offset to "- 10700000". It's very simple! The terminal command rigctl -vvvvv -m 2509 get_freq was very useful to check the generated frequency. That's all, thank you! And I hope other QRP2000 owners will be using Quisk! Franco iz2oos |
Re: Adding a new kind of radio transceiver
Thanks so much, Jim!
I had an idea that's what was needed - it wasn't clear to me whether the base class needed to be called or not. It actually sounds like i'm getting close! I won't get back to this for a day or two - my shared library is presently torn to pieces because I'm working on extirpating wiringPi. wiringPi and hardware libraries that depend on it (like a lot of a/d support) have turned into a major problem for me with Raspbian bullseye and I have to fix it urgently, but I'm giving Quisk quite high priority right now! Once I get some keying results with the default bullseye version I'll switch over to tracking the latest quisk revision again. Also, if you have a chance you might take a look at the RadioHat project. If you have any interest at all, I can probably come up with a way for you to have a board for testing. The board isn't a complete radio because it doesn't provide a power amp and filters, but it functions adequately for testing without them. I'll keep you posted M AE0GL |
Re: Adding a new kind of radio transceiver
Hello Mario,
I see you have many methods defined in your hardware file. This is not correct. If you don't define a method, that method is called from the base class, quisk_hardware_model. So you should eliminate all methods you don't need to change.? If you do define a method, it is almost always necessary to call the base class method too. So your ChangeFrequency() should be: ? ? def ChangeFrequency(self, tune, vfo, source="", band="", event=None):
? ? ? BaseHardware.ChangeFrequency(self, tune, vfo, source, event) ? ? ? self.libradiohat.setVFO(tune)
? ? ? return tune, tune? ? ? ?# not sure about this
You can read quisk_hardware_model.py to see what the default method does, but even if it does nothing, you should call the base class anyway. Your hardware file needs to know what the mode is. The base class does not record it, but PollCwKey() needs it.? So you need: class Hardware(BaseHardware):
? ? def __init__(self, app, conf):
? ? ? ? BaseHardware.__init__(self, app, conf)
? ? ? ? self.mode = None ? ? def ChangeMode(self, mode):
? ? ? ? # mode is a string: "USB", "AM", etc.
? ? ? ? BaseHardware.ChangeMode(self, mode) ? ? ? ? self.mode = mode
See if that makes PollCwKey() start working. Jim N2ADR ?
?
?
? |
Re: Adding a new kind of radio transceiver
¿ªÔÆÌåÓýHello Mario, I'm attaching a file I wrote last year for remote control of Quisk.? This is on the "control head" side of the network connection, and needs to capture transmit/receive as well as CW keying from Quisk.? I see that I commented out my support of OnChangeRxTx().? It appears that I rely on OnButtonPTT() for Rx vs. Tx. For CW Keying, PollCwKey() gets called periodically, many times per second from Quisk (mine is set up for a 5 msec period, based on Quisk configuration setup).? I use QS.is_cwkey_down() to get Quisk's current CW state. FYI, you will see a number of other hooks for OnButtonXXX(), OnChangeXXX(), etc. that are not in generic Quisk ... I added these for supporting the front panel buttons over the remote interface. It's been a while since I worked on this, and I forget some of the details of exactly why I did it this way ... perhaps Jim will provide some more onfo. In the meantime, I hope this provides some useful sample code for you. And, I hope the email server doesn't block a .py file! -- Ben, AC2YD --
On 2/23/22 15:32, Mario Vano wrote:
Hi, I'm the designer of a new transceiver module for the raspberry pi called "RadioHat". I've got some preliminary information about it including gerbers, documentations, schematics and test software at? |
Re: Adding a new kind of radio transceiver
Hello Mario,
It always makes me happy that other people want to use Quisk as a component of their own projects! Lets look at the first issue, adding more configure items to the hardware screen.? You should see RadioHat as an option in the list of radio types. Your hardware file starts like this: ## hardware_file_name Hardware file path, rfile
# This is the file that contains the control logic for each radio.
#hardware_file_name = 'radiohatpkg/quisk_hardware.py'
The ## starts a new configure option with fields: quisk_name? ?text_to_display,? ?format. That is why there is an entry field for hardware_file_name. You need to identify any Quisk configure options you may need (if any) in quisk_conf_defaults.py and add them. For example, this will add options for amplitude and phase adjustments if you put it after hardware_file_name: ?
## rx_max_amplitude_correct Max ampl correct, number
# If you get your I/Q samples from a sound card, you will need to correct the
# amplitude and phase for inaccuracies in the analog hardware.? The correction is
# entered using the controls from the "Rx Phase" button on the config screen.
# No correction is 1.00.? This controls the range of the control.
rx_max_amplitude_correct = 0.2
?
## rx_max_phase_correct Max phase correct, number
# If you get your I/Q samples from a sound card, you will need to correct the
# amplitude and phase for inaccuracies in the analog hardware.? The correction is
# entered using the controls from the "Rx Phase" button on the config screen.
# No correction is 0.00.? This controls the range of the control in degrees.
rx_max_phase_correct = 10.0
The "# "? (a sharp and a blank) starts a multi-line text help. The final "quisk_name = value" is a list of possible values for the item. All start with # and no blank except the default value if any. Note the need to repeat the Quisk name. Look for examples in quisk_conf_defaults.py and try a few even if you don't need them. The quisk_names don't need to already exist. You can add new ones and they will appear in conf.my_new_quisk_name. I need to look at how to capture the key down, so I will answer later. Jim N2ADR |
Re: Quisk conf.py Si570 QRP2000
Hi everybody, thanks for the inputs. Reading the following link things are a little bit clearer: SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="05dc", MODE="0666", GROUP="dialout" and checked for the the generated frequency typing: rigctl -vvvvv -m 2509 get_freq Now I know that I can change the frequency via Quisk configuration menu: the only problem is the frequency is multiplied by 4: eg. 3.600Mhz is 14.400Mhz and using the Xverter offset (for my intermediate frequency) in the menu it becomes messy as the offset is also multiplied by 4. However after some math I was able to tune to the 80m band. So what I only need is to divide the frequency by 4 and setting a correct frequency offset for my intermediate frequency. I still think that adding a few lines in the .quisk_conf.py lines would be the easiest way.? Franco iz2oos
Il luned¨¬ 21 febbraio 2022, 22:35:07 CET, roschi_ch <yves@...> ha scritto:
Ciao Franco from Rotary.rotary_class import RotaryEncoder ??? self.tune_freq = 0??? ??? # keep track of tune frequency by rotary encoder *** ??? # Make instance for si570 ? def ChangeFrequency(self, tx_freq, vfo_freq, source='', band='', event=None): ? ?def ReturnFrequency(self):??? # Return the current tuning and VFO frequency vy 73 de Yves, hb9ewy |
Adding a new kind of radio transceiver
Hi, I'm the designer of a new transceiver module for the raspberry pi called "RadioHat". I've got some preliminary information about it including gerbers, documentations, schematics and test software at?
and a mailing list on this server called "RadioHat". I have a hardware design that works well with my test software and has been in the field for a year. Now I'd like to operate it using quisk instead and see how that works. This is a zero IF receiver and transmitter operating on the raspberry pi (it's a "hat"). It has 48khz alsa input and output devices working for the radio IQ signals in and out. It has I2C control of the si5351 quadrature VFO directly from the pi I2C It has two GPIO bits, one enables the transmitter mixer and another enables the receiver mixer Typical transceivers I've built control the rest of the radio via I2C and GPIO, but I'm not concerned about getting that working with quisk yet - just the basic receiver and transmitter functionality. That's all most of them need. My shared library derives the rest of the information from the VFO and mode settings.. I have a dynamic library to control everything I believe quisk needs to do. I have had no problem calling my library functions from python code by placing calls in quisk's examples, but I'm having trouble figuring out where some of my code needs to go, since I can't figure out from the documentation or examples how to do some simple things like respond to requests to switch my hardware from receive to transmit. I've tried waiting for OnButton, but it never seems to be called, and I can't find any information on how to tell what the callback's arguments mean or how to decide when or how to call my changeover functions. I've tried adding the ? OnChangeRxTx(self, is_tx) method I found in another example - which seems to ?make sense, but it never seems to be called - I'm guessing it requires other modifications to work. Another problem I'm having is that I'm only able to configure my audio devices if I tell quisk's configuration dialogs that the device is of type softrock fixed. It's not, but if I select anything else the lists of audio devices for the radio is completely empty. (the microphone and local audio lists are not empty however). If I do that, then I can receive and transmit and tune just fine, but I need to manually activate the changeover of my hardware from transmit to receive, since the "button" method never seems to be called. I placed a config file in a folder named "radiohatpkg" as described in the help file. I named the config file "quisk_hardware.py" The empty device lists appear when I select radiohat as the type of radio in quisk. I'm very confused by the explanation of how to define the comment header in the file. What parts of it are actually meaningful? can anyone help me get this thing keying up? (at least). That's mostly what I'm having trouble with at the moment. I'm working with quisk 4.1.77 from the bullseye repository, I release it's out of date, but realistically, it's what most people will try to use with my hardware. thanks in advance, Mario Vano Here's my hardware file It contains the following which is more or less what I learned it should from the documentation: # Define the name of the hardware and the items on the hardware screen (see quisk_conf_defaults.py):
################ Receivers RadioHat, Pi HF transceiver hat
## hardware_file_name Hardware file path, rfile
# This is the file that contains the control logic for each radio.
#hardware_file_name = 'radiohatpkg/quisk_hardware.py'
?
from __future__ import print_function
from __future__ import absolute_import
from __future__ import division
?
import _quisk as QS
?
from ctypes import *
?
from quisk_hardware_model import Hardware as BaseHardware
?
?
class Hardware(BaseHardware):
? ? def __init__(self, app, conf):
? ? ? ? BaseHardware.__init__(self, app, conf)
?
? ? def pre_open(self): ?# Quisk calls this once before open() is called
? ? ? ? pass
?
? ? def open(self): ?# Quisk calls this once to open the Hardware
? ? ? ? self.libradiohat = CDLL("/home/pi/dvl/libradiohat/libradiohat.so")
? ? ? ? if self.libradiohat == 0:
? ? ? ? ? ? t = "Can't find LibRadiohat!!"
? ? ? ? else:
? ? ? ? ? ? self.libradiohat.initVFO(21800,7074000,12288000)
? ? ? ? ? ? self.libradiohat.setVFO(707400)
? ? ? ? ? ? self.libradiohat.initCodec()
? ? ? ? ? ? t = "Found RadioHat extension."
? ? ? ? return t
?
? ? def post_open(
? ? ? ? self,
? ? ): ?# Quisk calls this once after open() and after sound is started
? ? ? ? pass
?
? ? def close(self): ?# Quisk calls this once to close the Hardware
? ? ? ? pass
?
? ? def ChangeFrequency(self, tune, vfo, source="", band="", event=None):
? ? ? ? # Change and return the tuning and VFO frequency in Hertz. ?The VFO frequency is the
? ? ? ? # frequency in the center of the display; that is, the RF frequency corresponding to an
? ? ? ? # audio frequency of zero Hertz. ?The tuning frequency is the RF frequency indicated by
? ? ? ? # the tuning line on the display, and is equivalent to the transmit frequency. ?The quisk
? ? ? ? # receive frequency is the tuning frequency plus the RIT (receive incremental tuning).
? ? ? ? # If your hardware will not change to the requested frequencies, return different
? ? ? ? # frequencies.
? ? ? ? # The source is a string indicating the source of the change:
? ? ? ? # ? BtnBand ? ? ? A band button
? ? ? ? # ? BtnUpDown ? ? The band Up/Down buttons
? ? ? ? # ? FreqEntry ? ? The user entered a frequency in the box
? ? ? ? # ? MouseBtn1 ? ? Left mouse button press
? ? ? ? # ? MouseBtn3 ? ? Right mouse button press
? ? ? ? # ? MouseMotion ? The user is dragging with the left button
? ? ? ? # ? MouseWheel ? ?The mouse wheel up/down
? ? ? ? # ? NewDecim ? ? ?The decimation changed
? ? ? ? # For "BtnBand", the string band is in the band argument.
? ? ? ? # For the mouse events, the handler event is in the event argument.
? ? ? ? set
? ? ? ? self.libradiohat.setVFO(tune)
? ? ? ? return vfo, vfo
?
? ? def ReturnFrequency(self):
? ? ? ? # Return the current tuning and VFO frequency. ?If neither have changed,
? ? ? ? # you can return (None, None). ?This is called at about 10 Hz by the main.
? ? ? ? # return (tune, vfo) # return changed frequencies
? ? ? ? t = self.libradiohat.getVFO()
? ? ? ? return t, t ?# frequencies have not changed
?
? ? def ReturnVfoFloat(self):
? ? ? ? # Return the accurate VFO frequency as a floating point number.
? ? ? ? # You can return None to indicate that the integer VFO frequency is valid.
? ? ? ? return None
?
? ? def ChangeMode(self, mode): ?# Change the tx/rx mode
? ? ? ? # mode is a string: "USB", "AM", etc.
? ? ? ? pass
?
? ? def ChangeBand(self, band):
? ? ? ? # band is a string: "60", "40", "WWV", etc.
? ? ? ? try:
? ? ? ? ? ? self.transverter_offset = self.conf.bandTransverterOffset[band]
? ? ? ? except:
? ? ? ? ? ? self.transverter_offset = 0
?
? ? def OnButtonPTT(self, event):
? ? ? ? pass
?
? ? def OnBtnFDX(self, is_fdx): ?# Status of FDX button, 0 or 1
? ? ? ? pass
?
? ? def HeartBeat(self): ?# Called at about 10 Hz by the main
? ? ? ? pass
?
?
? ? def OnChangeRxTx(self, is_tx): # Called by Quisk when changing between Rx and Tx. "is_tx" is 0 or 1
? ? ?self.libradiohat.enableTX(is_tx, 0);
'''
?
? ? def PollCwKey(self): ?# Called frequently by Quisk to check the CW key status
? ? ? ? if self.mode not in ('CWU', 'CWL'):
? ? ? ? ? ? return
? ? ? ? if self.libradiohat.checkKeydown():
? ? ? ? ? ? QS.set_cwkey(1)
? ? ? ? else: # key is up
? ? ? ? ? ? QS.set_cwkey(0)
'''
? |
Re: Quisk conf.py Si570 QRP2000
Ciao Franco from Rotary.rotary_class import RotaryEncoder ??? self.tune_freq = 0??? ??? # keep track of tune frequency by rotary encoder *** ??? # Make instance for si570 ? def ChangeFrequency(self, tx_freq, vfo_freq, source='', band='', event=None): ? ?def ReturnFrequency(self):??? # Return the current tuning and VFO frequency vy 73 de Yves, hb9ewy |
Re: Quisk conf.py Si570 QRP2000
Hi Yves, Do you want to tune the SI570 VFO from Quisk, with a certain IF frequency offset? Yes, exacty, eg 3.650(frequency to display on Quisk)+10.712 (IF)=14.362 (frequency of the QRP2000 signal generator) Do you want to tune the SI570 via USB or via I2C? In the QRP2000 (SI570) signal generator an Atmel ATTiny85 Micro-ControllerATMEL connects to the PC via the USB port. I have checked the ?hardware_usb.py in the configuration menu and set the IF in Bands as if the IF were a transverter but no luck. In Softrocks I believe the frequency is multiplied by 4 to tune, here I would just need a simple VFO (I don't even need I and Q), something that is more basic. Franco iz2oos
Il luned¨¬ 21 febbraio 2022, 04:29:18 CET, roschi_ch <yves@...> ha scritto:
Hi Franco, I'm not sure to understand the problem, could you explain a bit more what you want to achieve?? vy 73 de Yves, hb9ewy |
Re: Quisk conf.py Si570 QRP2000
Hi Franco, I'm not sure to understand the problem, could you explain a bit more what you want to achieve?? vy 73 de Yves, hb9ewy |
Quisk conf.py Si570 QRP2000
Hello everybody, I need to modify the .quisk_conf.py file in order to control the Si570BBB of my QRP2000 generator by sdr-kits.net https://www.sdr-kits.net/QRP2000-kits I want to use the QRP2000 generator for a simple downconversion receiver with a 10.712 intermediate frequency (no quadrature). Which lines should I add before the usual soundcards lines in the .quisk_conf.py file ? Franco iz2oos |
Re: quisk_conf.py SI570 QRP2000
So your looking to use an offset On Sat, Feb 19, 2022, 6:03 AM Iz Oos via <iz2oos=[email protected]> wrote: Hello everybody, |
quisk_conf.py SI570 QRP2000
Hello everybody,
I need to modify the .quisk_conf.py file in order to control the Si570BBB of my QRP2000 generator by sdr-kits.net https://www.sdr-kits.net/QRP2000-kits I want to use the QRP2000 generator for a simple downconversion receiver with a 10.712 intermediate frequency (no quadrature). Which lines should I add before the usual soundcards lines in the .quisk_conf.py file ? Franco iz2oos |
Re: quisk and cw sending via CAT/Hamlib
Hi,
I got CW sending working with little modified cwdaemon. I configured virtual midi raw device with snd-virmidi kernel device. With aconnect connected it with itself. In quisk I configured MIDI CW keying with note 60. In cwdaemon I open /dev/midi and write this note on on/off at the time of keying. I tested with xlog and tlf it works. 73 Rolandas LY0NAS P.S. After I got DJ2GO2 MIDI keyboard and found that quisk sees only the first MIDI device in system. I have to unload virtual MIDI to recognize this keyboard. |
Re: Adding P25 TX & RX to Quisk
Hi Jim
Mike G4ABP tried out the P25 code with Hermes Lite 2 and found a rather nasty bug in the P25 code. I'd based the code on my G7LHS ADT SDR which streams audio via the OS sound subsystem so was a bit cavalier about how I treated buffers. The effect was to cause significant dropouts in the RF carrier. I've corrected it - new files and new notes attached.? There are still some HL2 funnies - Mike and I will try to get to the bottom of them but I don't think they are caused by the P25 code itself (but time will tell) and don't stop it running on the Hermes. I'll document all that we found separately in a longer email. Regards Dave Adding P25 to quisk 11-2-22.pdf
Adding P25 to quisk 11-2-22.pdf
quisk-P25-11-02-22.zip
quisk-P25-11-02-22.zip
|