kopia lustrzana https://github.com/ArjanteMarvelde/uSDR-pico
Merge branch 'main' of https://github.com/ArjanteMarvelde/uSDR-pico
commit
99f35f9c1d
34
README.md
34
README.md
|
@ -5,8 +5,8 @@ Furthermore, the repository contains the electronic design of some modules that
|
|||
Please see the doc folder for a full description.
|
||||
|
||||
The platform used is a Pi Pico module with an RP2040 processor. This processor has dual cores, running at 125MHz each and very configurable I/O, which eases the HW design.
|
||||
The software is distributed over the two cores: core-0 takes care of all user I/O and control functions, while core-1 performs all of the signal processing. The core-1 functionality consists of a TX-branch and an RX-branch, each called from a function that waits for inter-core FIFO words popping out. This happens every 16usec, because on core-0 a 16usec timer callback ISR pushes the RX/TX status into that FIFO. Hence the signal processing rythm on core-1 effectively is 62.5kHz.
|
||||
On core-1 the three ADC channels are continuously sampled at maximum speed in round-robin mode. Samples are therefore taken every 6usec for each channel, maximum jitter between I and Q channels is 4usec, which has a negligible effect in the audio domain.
|
||||
The software is distributed over the two cores: *core0* takes care of all user I/O and control functions, while *core1* performs all of the signal processing. The *core1* functionality consists of a TX-branch and an RX-branch, each called from a function that waits for inter-core FIFO words popping out. This happens every 16usec, because on *core0* a 16usec timer callback ISR pushes the RX/TX status into that FIFO. Hence the signal processing rythm on *core1* effectively is 62.5kHz.
|
||||
On *core1* the three ADC channels are continuously sampled at maximum speed in round-robin mode. Samples are therefore taken every 6usec for each channel, maximum jitter between I and Q channels is 4usec, which has a negligible effect in the audio domain.
|
||||
|
||||
The TX-branch
|
||||
- takes latest audio audio sample input from ADC2 (rate = 62.5 kHz),
|
||||
|
@ -16,18 +16,18 @@ The TX-branch
|
|||
- scales, filters and outputs I and Q samples on PWM based DACs, towards QSE output
|
||||
|
||||
The RX-branch
|
||||
- takes latest I and Q samples from QSD on ADC0 and ADC1 (rate = 62.5 kHz)
|
||||
- takes latest Q and I samples from QSD on ADC0 and ADC1 (rate = 62.5 kHz)
|
||||
- applies a low-pass filter at Fc=3kHz,
|
||||
- reduces sampling by 4 to get better low frequency response Hilbert xform (rate = 15.625 kHz),
|
||||
- demodulates:
|
||||
- demodulates, e.g. SSB:
|
||||
-- applies 15-tap DHT on Q channel and 7 sample delay on I channel
|
||||
-- subtracts I and Q samples
|
||||
- scales, filters and outputs audio on an PWM based DAC, towards audio output
|
||||
|
||||
On core0 the main loop takes care of user I/O, all other controls and the monitor port. There is also a LED flashing timer callback functioning as a heartbeat.
|
||||
On *core0* the main loop takes care of user I/O, all other controls and the monitor port. There is also a LED flashing timer callback functioning as a heartbeat.
|
||||
|
||||
The Pico controls an Si5351A clock module to obtain the switching clock for the QSE and QSD. The module outputs two synchronous square wave clocks on ch 0 and 1, whith selectable phase difference (0, 90, 180 or 270 degrees). The clock on ch2 is free to be used for other goals. The module is controlled over the **i2c1** channel.
|
||||
The display is a standard 16x2 LCD, but with an I2C interface. The display is connected through the **i2c0** channel.
|
||||
The Pico controls an Si5351A clock module to obtain the switching clock for the QSE and QSD. The module outputs two synchronous square wave clocks on ch 0 and 1, whith selectable phase difference (0, 90, 180 or 270 degrees). The clock on ch2 is free to be used for other goals. The module is controlled over the **i2c0** channel.
|
||||
The display is a standard 16x2 LCD, but with an I2C interface. The display is connected through the **i2c1** channel, as well as the bus expanders for controlling the various relays.
|
||||
|
||||
## Open issues:
|
||||
- [x] take care of processing cycles, by moving signal processing parts to the second core
|
||||
|
@ -39,23 +39,23 @@ The display is a standard 16x2 LCD, but with an I2C interface. The display is co
|
|||
- [x] SW based VOX
|
||||
- [ ] implement RSSI
|
||||
- [x] design a set of PCBs
|
||||
- [ ] sort out the new HW modules
|
||||
- [x] sort out the new HW modules
|
||||
- [ ] improve speed: better dual-core management for memory and timer
|
||||
- [ ] add control for new HW: BPF and pre-amp/attenuator switching
|
||||
- [x] add control for new HW: BPF and pre-amp/attenuator switching
|
||||
|
||||
## Installing and using the SDK for Windows:
|
||||
Please refer to https://github.com/ndabas/pico-setup-windows/releases where the latest installer can be downloaded (e.g. **pico-setup-windows-0.3-x64.exe**).
|
||||
Execute the installer to set up the SDK environment, e.g. in **~/Documents/Pico** (let's call this folder $PICO).
|
||||
Execute the installer to set up the SDK environment, e.g. in **~/Documents/Pico** (let's call this folder **$PICO**).
|
||||
|
||||
## Building uSDR-pico:
|
||||
Clone/copy the uSDR-pico code files into a subdirectory, e.g. **$PICO/uSDR-pico**
|
||||
Create the build folder: **$PICO/uSDR-pico/build**
|
||||
|
||||
Before doing any building you need to adapt the file **$PICO/uSDR-pico/CMakeLists.txt**, using your favourite browser, to reflect your own directory structure. Also, select whether you want **stdio** to use the UART on pins 1 and 2 or the USB serial port. The monitor terminal is on **stdio**.
|
||||
In **$PICO/** you will find a command to start a Developer Command Prompt window. Within this DCP all environment settings are initialized to enable building.
|
||||
In the DCP window, chdir to the build folder and execute: **cmake -G "NMake Makefiles" ..**
|
||||
Now you have initialized the make environment, and by executing **nmake** in that same build folder, the Pi Pico loadable file **uSDR.uf2** is created.
|
||||
Rebooting the Pico while the bootsel button is pressed will open a file explorer window with the Pico as a Mass Storage Device. Moving the binary to the Pico is as easy as dragging and dropping this uf2 file into that MSD.
|
||||
Before doing any building you need to adapt the file **$PICO/uSDR-pico/CMakeLists.txt**, using your favourite editor, to reflect your own directory structure. Also, select whether you want **stdio** to use the UART on pins 1 and 2 or the USB serial port. The monitor terminal is on **stdio**.
|
||||
In **$PICO/** you will find a command to start a Developer Command Prompt (*DCP*, like a "DOS box"), make sure to use this one instead of any other DOS box. Within this *DCP* all environment settings have been properly pre-set to enable building.
|
||||
In the *DCP* window, chdir to the **build** folder and execute: **cmake -G "NMake Makefiles" ..** (do not forget the trailing dots).
|
||||
Now you have initialized the make environment (for *nmake*) and by executing **nmake** in that same **build** folder, all SDK libraries and finally the Pi Pico loadable file **uSDR.uf2** will be created.
|
||||
Rebooting the Pico while the bootsel button is pressed will open a file explorer window with the Pico shown as a Mass Storage Device (e.g. drive E:). Moving the binary to the Pico is as easy as dragging and dropping this uf2 file into that MSD.
|
||||
|
||||
# Background
|
||||
The folder **$PICO/docs** also contains some manuals, of which the *C-SDK description*, the *RP2040 datasheet* and the *Pico Pinout* are absolute must-reads when you start writing software.
|
||||
|
@ -63,7 +63,7 @@ For calculating filters I have used the free software from Iowa Hills (http://ww
|
|||
I also used the online FIR filter calculator T-Filter (http://t-filter.engineerjs.com/)
|
||||
|
||||
# Copyright notice
|
||||
The code and electronic designs as well as the implementations presented in this reposiory can be copied and modified freely, for non-commercial use.
|
||||
Use for commercial purposes is allowed as well, as long as a reference to this repository is included in the product.
|
||||
**The code and electronic designs as well as the implementations presented in this repository can be copied and modified freely, for non-commercial use.
|
||||
Use for commercial purposes is allowed as well, as long as a reference to this repository is included in the product.**
|
||||
|
||||
|
||||
|
|
Plik binarny nie jest wyświetlany.
Ładowanie…
Reference in New Issue