NinoTNC N9600A History
page modified October 26, 2020
Nino (KK4HEJ) started working on a project to interface a single-chip-radio as a KISS serial port TNC in 2015.
In 2018 he had a working prototype and brought it to the attention of TARPN.
This has been an on-going project since then.
While a couple of hams are working on the RF side of this system, Nino did a new project using some of the same code, and the same CPU to make a 9600 baud modem which could drive a data radio.
The TARPN radio is not dead, but has been ignored and restored several times in the past couple of years.
Nino's TNC, announced on the TARPN groups-io, was delivered as a 9600 baud TNC in August 2019.
He sold the unnamed TNC as a full kit for $26 and sold out in a day.
Only 10 were made.
This first model was TTL serial in and out and had screw terminals for serial i/o, power, and radio connections.
Nino coded and built the TNC as an experiment and was not planning on taking it further himself.
NCPACKET had its first site to site 9600 baud packet link using the first TNC model on October 1, 2019.
A1 prototype - getting ready for general release
Starting in early September 2019 and running until late November 2019 Nino worked with me, Tadd (KA2DEW), on the idea that the TNC would be used by the various TARPN projects and especially NCPACKET, eventually to be sold publicly.
In all cases we desired that the unit not be burdened with a profit motive because that would break the community experimental atmosphere.
The TNC was branded NinoTNC.
Nino and I hashed out a bunch of improvements to the TNC to make it easier for the TARPN participants to use.
- It was configured as a USB TNC through the addition of a genuine FTDI add-on module with integrated USB-micro socket as daughter card to the A1 board.
- A DE-9 female connector was added to make the wiring of the TNC comfortable to KPC-3 and TNC-PI users.
The board was designed so all of the LEDs and the test switch would all face off one end of the board, and the cables would come off the other.
This makes it very easy to place in a stack of boards, or in a 3d housing.
- A couple of more LEDs were added to provide more information.
- A hardware feature was added which would let the TNCs synchronize at a single site, so adjacent frequencies could be used with minimal interference.
This feature was abandoned before we got to testing due to many impositions on the firmware and a general incompatability with other TNCs.
- The screw hole placement was made compatible with Raspberry PI to permit stacking, and to permit mounting in the same cabinets we'd been using for TNC-PI.
At this time it was a 9600 baud G3RUH USB KISS TNC, ready for plug and play operation with the Tait TM8105 transceiver.
10 of the A1 board were made and 6 were put into full time operation using the Tait TM8105 radio in the NCPACKET network.
I had purchased 20 of the Tait TM8105 radios to help the local networkers in rolling out 9600.
I wrote full build instructions
and Nino, myself, and many from the TARPN group were pondering how to distribute and fund the boards or kits.
Coastal Chipworks closing its business
Just after we got the first run boards of the A1 boards built, and instructions written, at the beginning of December 2019, Coastal Chipworks announced that it was closing its doors and that the $43 TNC-PI, mainstay of the NCPACKET network and other TARPN projects, would no longer be available.
Every other 1200 baud TNC out there was either considerably more expensive than the TNC-PI, or considerably more difficult to get running than the TNC-PI.
The TARPN project was suddenly at risk for lack of easy to use inexpensive 1200 baud TNC hardware!
But, we had the solution in our hands. So... a bit more work was needed.
A2 prototype - reworked with 1200 baud
Nino reworked the design to include 1200 baud capability.
There was some consideration for having the operator of the TNC send configuration to the TNC via USB KISS commands allowing selection of the different radio bit-rates.
We decided instead to put a 2 bit DIP-switch on the NinoTNC giving access to the different features.
Still more changes to improve the NinoTNC:
- We replaced separate resistors with resistor packs in some places to reduce the parts count.
- The TX-DELAY potentiometer was added to give the operator more control over this setting.
Otherwise the TX-DELAY setting would be the province of whatever software was running the KISS TNC and some of that sofware was really slow in affecting a TX-DELAY change.
- The TX-LEVEL potentiometer and TX-DELAY potentiometer were both moved to the end of the board next to the LEDs so they could be accessed after the NinoTNC was mounted or packaged.
- We added scope clip loops for ground, TXA (transmit audio signal), and RXA (receive audio signal).
- We added component spaces for in circuit ferrite beads.
December 31st 2019 we had our first prototypes of the A2 design.
Here is our first assembled, first prototype, A2 board.
Note the individual resistors near the LEDs.
This would be a resistor pack but Nino didn't have the proper pack on hand to test with so this worked for the first board.
After the first prototype we replaced the two big electrolytic capacitors in the power supply circuit with two 10uF Tantalum capacitors, so now there would be 3 identical Tantalum capacitors instead of 3 different capacitors.
This would make parts acquisition and placement slightly easier, and solves a minor problem where eletrolytic capacitors die of old age sooner than most of the components.
A2 release version -- first ETSY sale
January 27th 2020 we ordered 200 of this board, with only minor modifications, and changed the board color to black.
Delivery expected February 12th (slightly slower than before because of Chinese New Year).
Then COVID19 happened.
In the mean time Nino continued developement, releasing a first cut of his IL2P specification, and tweaking 1200 baud.
NinoTNC 1200 baud surpassed TNC-PI performance according to the test CD.
The production board finally arrived in the USA Marth 5th.
3 weeks delayed.
It seemed like longer at the time.
Here's the production A2 board.
A2 boards are black.
This particular A2 board has the L2 resistor hack described under "A3 prototype", below.
Here are the assembly instructions for the A2 board
March 6th 2020 100 of the first 200 black A2 boards were put on sale on ETSY just before midnight.
64 were sold by 6am March 7th.
March 8th we shipped 105 A2 boards, to 16 USA customers and one Netherlands customer.
We had the remaining 95 boards up for sale on ETSY.
We ran into a problem where the FTDI modules we were using sold out and were back-ordered at Digikey.
The backorder of the FTDI module would put some kit assembly back to July!
We scrambled around trying to find another vendor of the FTDI module.
Every other vendor of the chips either wouldn't ship to the US, or sold a slightly different FTDI module.
Of the first 105 boards sold, we heard of several cases where the builders broke the FTDI boards because the USB-micro socket would peel back from the top of the FTDI module.
This was calamity after tragedy.
In the end we sold 150 of the A2 boards.
NCPACKET kept 50 of the boards for its own project (only 25 were built, the rest were starved for FTDI modules).
[qrz.com], one of the NCPACKET node ops, came up with a home-brew replacement of the FTDI module
[oshpark.com] which used a Microchip MCP2221 chip.
We also decided the USB micro socket had to go.
David put a USB-B socket on his little PCB.
The point was that if we did another run of the A2 boards, we'd substitute David's board for the FTDI.
In large quantity it was actually cheaper.
March 10th 2020 we started a redesign.
The A3 will have 4 switches instead of 2, and will have David's USB-B socket with Microchip MCP2221 USB/I2C/SPI/UART interface chip down on the A3 board instead of as a daughter board.
This will save the purchaser $3 per board and besides being cheaper, it will be easier to install, more robust, and easier to buy, than the FTDI board.
The 4 switches will support future firmware improvements.
We also reduced the size of, and included cuttable shorting wires supporting, in-line ferrite beads for each of the DE-9 radio signals, PTT, TXA, RXA.
A3 will use the same CPUs as the A2 board and any new firmware we come out with for the A3 will work on the A2 as well.
Parts from un-built A2 parts caches could be updated to build A3 boards as most of the parts were common.
A3 boards are blue.
We made 10 prototypes of the A3 and these were delivered March 28, 2020.
We have lots of documentation to do and firmwre needs to be written to support the new model (and the old model!)
Firmware for the A3, supporting 2400 baud and 4800 baud, was undergoing testing.
In addition, Nino published a specification for Improved Layer 2 Protocol, or IL2P, to be supported on the A3 NinoTNC.
We discovered a bug in the 1200 baud microphone+speaker voice-radio support in the NinoTNC.
The TX Audio output level was just too high and could not be turned down low enough to not overdrive the microphone input of some radios.
This problem would exist in all of the A2 units as well.
NCPACKET operators didn't detect this issue at first because most of the A2 units put into service were used with radios having a data input port.
Also, each A2 put in service freed up a 1200-baud TNC-PI so we didn't have much need for an A2 at 1200 baud, at the start.
New network participants eventually reached into the A2 and prototype A3 stock so we ran into the problem.
A cheap solution was implemented where a resistor would be placed in series with the TXA output to reduce the peak to peak voltage of the TXA signal.
A2 and prototype-A3 board operators would have to kludge a resistor into the circuit someplace.
In the production version A2 boards, and the prototype version of A3, a resistor could take the place of the L2 jumper wire.
A3 first shipping version (r2)
Resistor R3 is the in-circuit TXA audio reducer.
April 21 2020 - we ordered 200 boards to be sold on ETSY.
May 3, 2020 - A3 production boards arrived and one was built and tested.
187 of this board were shipped for ETSY orders on May 20, 2020.
An additional 10 of these boards went to NCPACKET.
Notice resistor R3 near the DE9 radio connector.
A bug in our kludge solution was found where the linearity of the TX audio path is messed up slightly because of R3.
R3 would have to be shorted out for use in a data-radio installation.
R3 is important in bringing the TX audio level of the TNC down to microphone-input voltages but having it in-line when used in data-radio service messed up the high speed data.
The instructions were modified to require installation of R3, but then shorting it out on the bottom of the board if the NinoTNC is used in data-radio service.
A3 second shipping version (r3)
We added a 2-pin jumper to bypass R3 as a fix for the TXA audio R3 resistor problem.
Notice the 2-pin jumper pins J6 just above and to the right of the USB connector.
Insertion of the 2-pin jumper onto J6 pins would bring the TXA voltage to data-radio levels.
Removal of the jumper would put R3 in circuit, letting the TNC drive microphone inputs.
There is a tiny "r3" silkscreen designation near the lower left mounting hole.
175 of this board were shipped for ETSY orders between June 13 and July 2, 2020.
An additional 25 of the first r3 order went to NCPACKET.
200 boards were ordered by TARPN for sale at ETSY and are expected by the 15th of July 2020.
All 200 sold out by middle of August.
200 boards were ordered by TARPN for sale at ETSY and started shipping in the first week of September 2020.
For those playing at home, this is 200 A2r2 boards, 200 A3r2 boards, and 600 A3r3 boards.
Here are the assembly instructions for the A3 board
A4 board process beings
The A4 board moves the TXA adjustment range control to a switch instead of a 2-pin jumper.
The TXA filter circuit changes, and the RXA filter circuit changes.
All of this will make an improvement in the quality and versatility of the packet transmission and reception,
The reference designators and parts labels change in a couple of places.
Bootloader applications released for TARPN nodes, Raspberry PI without TARPN, MSWIndows and other Linux.
To be continued!
NinoTNC Firmware history
updated October 13, 2020
// 1.40 : 09-Nov-19 : add support for N9600A1 LEDS
// 1.41 : 24-Nov-19 : fix FTDI chip held in reset bug on N9600A1
// 1.42 : 29-Nov-19 : add AFSK transmit, streamline receive buffer usage
// 1.60 : 08-Dec-19 : add I2C KISS interface
// 2.00 : 24-Dec-19 : first N9600A2 version. Add IL2P, AFSK receive. Put preamble bits in their own buffer. Remove CTS pin. Add pin state detect. Add TXDELAY analog sampling.
// 2.01 : 05-Jan-20 : Added stand-alone AX.25 ID packet generator for IL2P modes.
// 2.10 : 10-Jan-20 : Added energy DCD, improved AFSK receive with higher sampling rate
// 2.11 : 14-Jan-20 : Improved DCD timing, deleted transmit inhibit logic
2.11 shipped with NinoTNC A1
// 2.12 : 23-Jan-20 : Equalized AFSK demodulator
// 2.20 : 17-Feb-20 : Add bootloader, keep OC1 operating at half scale to reduce TX skew, add old-style DCD detection (CrossingsInSync)
// : Added TX/RX inversion option to A2 boards, increased DCD break to 100ms, changed min TXDELAY
2.20 shipped with NinoTNC A2 r2 starting March 6th, 2020
// 2.22 : 21-Mar-20 : Fixed inverted transmit data bug on AFSK (inverted GFSK transmit filter table)
// 2.30 : 21-Mar-20 : Added 2400 DPSK mode, 4800 GFSK mode, support for N9600A3, KISS commands GETALL, GETVER, SETSERNO.
// 2.31 : 11-Apr-20 : Added PTT loopback test & test packet, boot packet.
// 2.32 : 25-Apr-20 : Fixed AFSK IL2P Sync DCD hang bug.
// 2.33 : 26-Apr-20 : Additional fix for AFSK IL2P Sync DCD hang. Also changed IL2P SYNCTOL to 0.
// 2.34 : 26-Apr-20 : Fixed IL2P Supervisory frame bit translations (chasing spurious REJ). Changed IL2P SYNCTOL back to 1.
// 2.35 : 27-Apr-20 : Removed ID packet SSID, fixed ID packet protocol bug.
2.35 shipped with NinoTNC A3 r2 starting May 3, 2020
// 2.36 : 27-Apr-20 : Put DAPSK transmit waveform in lookup table.
// 2.37 : 09-May-20 : Special unreleased version (beta test at NCPACKET) to map all 3 fast bit rates to A2 dip switch in IL2P mode.
// : 00 - 1200 AFSK AX.25
// : 01 - 2400 DAPSK IL2P
// : 10 - 4800 GFSK IL2P
// : 11 - 9600 GFSK IL2P
// 2.38 : 10-May-20 : Merge 2.36 and 2.37
// 2.39 : 22-May-20 : Add WDT reset criteria for "aggressively safe" remote site. Fixed transmit hang bug (timer logic).
// 2.40 : 23-May-20 : Modifying timer management. Addressing additional transmit cycle bug that causes short transmits (about 5 ms) every 20,000 packets.)
// : Transitioned most TMR3 interrupts to main loop cycle.
// 2.41 : 31-May-20 : Re-mapped A2 functions:
// : 00 - 9600 GFSK AX.25
// : 01 - 9600 GFSK IL2P
// : 10 - 1200 AFSK AX.25
// : 11 - 2400 DAPSK IL2P
// : Adjusted preamble times for 2400 and 4800 baud modes
2.41 shipped with NinoTNC A3 r3 June 13
// 2.42 : 28-Jun-20 : Added N9600A4 support. Inverted DAC output for N9600A4.
// : Added IL2P receive inversion detection.
// : Added info dump to TEST_TX usb packet. -- note bug: Always 0 TxPktCnt figure.
// 2.44 : 5-Jul-20 : Added switch position to data dump.
// 2.45 : 5-Jul-20 : Moved modulation mode selection to transmit buffer to allow flexible transmit modulation.
// : Streamlined buffer memory.
// ; Changed the meaning of the orange LED from "stranger" to "pending".
// ; In 2.44 and before, the orange LED illuminated if a callsign other than the most recent from or to callsigns is heard on the channel.
// ; In 2.45 and later, the orange LED (Blue LED on the A4 board) illuminates if a TX message is ready to send but the NinoTNC has not yet sent it.
// 2.46 : 6-Jul-20 : Added mode ID beacon to all modes except AX.25 1200. Sent in AX.25 1200
// : Provided tuning tone selection based on mode switch settings. This allows the
// : user to chose the target deviation for the bessel null tuning procedure.
// : Notes:
// : - Deviation is set with the TX_DEV pot. Changing the operating mode switches
// : does not change deviation, but does change the tuning tone.
// : - The "best" deviation will be based on many factors, such as the specific
// : radios used in the link.
// : - 3kHz deviation should work for most setups.
// : - 2400 Baud mode does not REQUIRE 5kHz deviation (3kHz is fine).
// : - The tones selected in 4800 and 9600 mode provide Minimum Shift Keying,
// : but more deviation may work well too.
// : 1200 Baud - 1248 Hz (3kHz Dev)
// : 2400 Baud - 2079 Hz (5kHz Dev)
// : 4800 Baud - 500 Hz (1.2kHz Dev)
// : 9600 Baud - 999 Hz (2.4kHz Dev)
2.46 shipped with NinoTNC A3 r3 in July and August 2020
// 2.50 :26-Jul-20 : Experimental version to test an improvement to IL2P with more parity data.
// 2.51 :23-Aug-20 : Includes MAXFEC IL2P mode, and fixes the TxPktCnt bug. By default, this firmware sends IL2P using MAXFEC mode
// : with more parity bytes than old versions. IL2P packets sent with this firmware won’t be decoded by previous
// : firmware versions, though this will decode from previous versions.
// : This version decodes 948 packets on both test tracks on WA8LMF's test CD.
2.51 shipping with NinoTNC A3 in early September 2020
// 2.71 : 26-Sep-20 : A2 NinoTNC switch arrangement is shuffled. This is/will be fixed in 2.75.
// : This test-version turned off IL2P
// : Further AFSK receive improvement.
// : Added external INHIBIT input to RB4/Pin 11.
// : Added support for N9600A4r1.
// 2.73 : 03-Oct-20 : IL2P restored
// : A2 NinoTNC switch arrangement is shuffled. This is/will be fixed in 2.75.
// : Increased UART 1 receive queue to 2.1kB to support MAXFRAME 7.
// : Added RXA Clip indication to CRCBADLED (lights when receive signal at max ADC count).
// 2.74 : 07-Oct-20 : Allow reception of AX.25 packet without proper callsign field. This enables tncattach messages to be received.
// : A2 NinoTNC switch arrangement is shuffled. This is/will be fixed in 2.75.
// 2.75 : 09-Oct-20 : fixes A2 switches to match 2.41 through 2.51 versions.
// 2.76 : 12-Oct-20 : Add repetitive GETALL dump back to TARPN node.
// 2.77 : 13-Oct-20 : Fix bug in 2400 baud processing.
// 2.78 20-Oct-20 : Fix bug where GETALL dump sending was eratic. Now sent every minute for TARPN installations.
// 2.81 24-Oct-20 : Add 5 more figures to GETALL dump. Now it shows mS and bytes transmitted and received as well as count of corrected IL2P bytes.
// Fix ordering of GETALL switch-positions output.