May 13, 2023 Update
Using the Teensy 4.1 for DSP functions and general transceiver functions causes audio to be interrupted when transceiver functions such as volume control and tuning are used. To eliminate this problem, I reverted to using the standard Arduino & I2C Relay Control Board from the 2020 Transceiver for all general transceiver functions. I revised the Teensy 4.1 Transmit and Receive Audio Board to remove unnecessary bus connections and associated level conversions, and also took the opportunity to replace the SGTL5000 codec, used for transmit audio, with a PCM1808 ADC / PCM5102 DAC pair, same as used for receiver audio. The Teensy 4.1software is a version of Jack & Al’s code stripped down to the bare essentials for audio DSP functions.
Communication from the Arduino & I2C Relay Control Board to the Teensy 4.1 Transmit and Receive Audio Board is via I2C_0 and I2C_1 buses. I2C_0 is the general I2C bus controlling most of the I2C functions in the transceiver. The I2C_0 bus connects to the PCF8575C on the Teensy Board providing 8 inputs to digital pins on the Teensy 4.1. These 8 inputs are used to notify the Teensy 4.1 of state changes and that settings data is ready to be sent over the I2C_1 bus which connects to the Teensy 4.1. The state and settings data are as follows:
- RX – TX State
- USB – LSB State
- TX AF Gain Data
- RX IF Gain Data
- RX IQ Amplitude Calibration Data
- RX IQ Phase Calibration Data
- TX IQ Amplitude Calibration Data
- TX IQ Phase Calibration Data
To avoid I2C hangs on the Arduino (I2C_1 bus master), audio interrupts are disabled on the Teensy 4.1 (I2C_1 bus slave) when settings data is to be sent. The I2C_1 bus is only connected to the Teensy 4.1, via the I2C bus switch on the Arduino board, when there is settings data to be sent.
To avoid the problem of keeping settings data synchronized between the Arduino board controlling the transceiver front panel and the Teensy board, no settings data is stored in non-volatile memory on the Teensy board. The settings data is stored in EEPROM on the Arduino board and uploaded to the Teensy board at power on.
Version 1 Teensy 4.1 Transmit and Receive Audio Board schematic.
October 2022 Original Post
This board contains the Teensy 4.1, SGTL5000 transmit codec, PCM1808 & PCM5102 receive ADC and DAC, respectively, and the audio chain providing speaker and Line Out audio. On the transmit side, the board takes Line In audio and produces quadrature audio output for the transmitter Quadrature Sampling Exciter (QSE), and on the receive side takes 48-KHz quadrature receiver IF from the Quadrature Sampling Detector (QSD) and produces audio output.
The receiver audio chain circuitry is the same as that used in the 2020 Transceiver.
I extracted the core DSP transmit and receive routines from Jack and Al’s code, and refactored the code into a single file with function calls to access DSP functions from my main transceiver code. I initially got the existing transceiver code running on the Teensy, then the DSP transmit code, and finally the DSP receive code.
The biggest challenge with this board was hand soldering the SGTL5000 in a QFN-20 package. I succeeded on my second attempt by first hand soldering the 20 contacts, and then soldering the concealed ground pad using vias from the backside of the board. In hindsight, a way to avoid this would be to use a second PCM1808/PCM5102 pair on the transmit side rather than the SGTL5000.
In the picture above, the SGTL5000 is in the upper left of the board, and the PCM1808, PCM5102, and audio stages in the upper right. As my transceiver front panel and backplane use 5V logic, I level shifted all interfaces (except one!) from the 3.3v tolerant Teensy to the backplane. With the exception of the 5V regulator on the front side of the board, power regulation is done on the backside of the board.