IC22S Arduinoized?


Staff member
The updated front TinkerCAD link...

And the .stl file so you can 3D print one.

(The booby near the RH button is from a flaw in the glass sheet I print on, not a file fault.)
This front has a couple of push buttons. These are wired as per the updated circuit in post #36.
Detail pictures in the zip file.
Code to follow.



Active member
NOTE! Not all OLEDs are created equal. The pin-out is not the same across them all so make sure you check the connections!.
I just got trapped myself (again)!
Especially the Vcc and Gnd pins as they can be swapped around


Active member
Found a way that does not require the bypass of the Duplex circuit on the 22S
Unfortunately the radio I recently purchased has a faulty divide by N chip "TC5080P"
The manner in which the PLL PCB on the icom is laid out lends itself to splitting the 9 Volt rails feeding the PLL and the Duplex logic sections
Lowering the voltage to 5Volts on the Duplex logic chips makes them compatible with the Arduino 5 V logic.
Looking at the PLL board from the front of the radio the the 9 volt rail feeds the right most 4011 Pin 14, The track is cut here. Using an 78L05 with the output connected to pin 14, the input to the 9 Volt rail and the ground to pin 8 of the left most 4011, a 0.1 mF ceramic cap across the regulator output and the ground. Now the Duplex logic will reliably work with the arduino logic levels.

In the process of fault finding the problem with my PLL I found that the N divider and the rest of the PLL other two chips are happy to run at a lower voltage, the PLL chips are decoupled by a resistor R25 (15 Ohms) by placing a forward biased Red led is series with the resistor lowers the voltage to 7 Volts, in my case it was lower as the 9 volt rail measures 8.6 Volts so it lowered to 6.6 Volts, the PLL was happy at this level, I am sure that this can be further lowered to 5 volts if so required, however at this time it does not seem to be an issue by feeding the divide by N chip with 5 Volt level logic..

My N divider chip has a faulty input and I don't have the 100 KHz steps only when I heat the chip this becomes functional.
New chip coming from the UK (Hard to find, and costly SOB), the positive is that now minimal modification are requires emulating exactly what the original matrix board did and the Duplex +/- are retained and no need to have this implemented in the code.

My thanks to Denys for his code and help in navigating the hard to read diagrams.

Images show work done to tidy work done by others, the tantalum capacitor moved to the underside of the board
Cleaned many overheated solder joints, removed some excess flux.
View attachment 1505View attachment 1506
View attachment 1507View attachment 1508View attachment 1509View attachment 1510
Last edited:


Active member
Acknowledging all the hard work done on the IC- 22S by Denys VK3ZYZ however the amount of modifications to the radio done to mitigate the Duplex issues was something that I wanted to overcome to keep all modifications to the radio to a bare minimum, in that the reversal to original form required as little to no work, simply fitting the matrix board and switch would return the radio to original condition.

The first challenge was that the Arduino processor works on a 5 Volt logic level, this presented the issue that the radio Duplex logic IC’s run on a 9 volt rail so that the 0 to 5 was not sufficient to cause the circuit to work, fortunately in the manner that the voltage rail to the Duplex logic had been done made it possible to introduce a 5 V regulator to just run the Duplex circuit, now the Arduino could control the Duplex IC’s.
The radio control code was written from scratch but included some of the routines written by Denys namely the Rotary Encoder The CTCSS tone generation routines and some of the OLED Display structures.
The first issue I was presented with is that one of the Arduino analogue pins is used for the Duplex switch ( A7) and assigned to be a digital pin, normally this is proper however on the Nano pins A6 and A7 are analogue only and not able to be reassigned.

The problem was solved by converting the switch analogue voltages on pin A7 to three logic states.

Duplex switch Voltage values returned in bit form (A/D conversion)

RX Duplex A Count 1023
TX Duplex A Count 12 to 14
Simplex A or B Count 0
RX Duplex B Count 160 to 161
TX Duplex B Count 1023

From the above values the three positions of the switch could be established.
Caveat – As much as I have provided for variations in radios that could have different values the above table it should cater for 99% of units by utilising value limits by testing if the value is between two limits, then the result is true.

The CTCSS code is selected by pushing the encoder knob, this changes the program to use the alternate mode in the void loop ()

The CTCSS frequency is selected with a push of the encoder knob the “No Tone” indication will appear and the tone is off, turning the encoder knob clockwise selects the required CTCSS, pushing the encoder knob again returns to the frequency mode.

The activation of the Duplex switch will cause the frequency display to show what frequency the radio is receiving on.
The goal to be able to return the radio to stock condition is achieved even if the 5 Volt regulator is left in the radio.

Was a fun project, took many hours and presented several issues to overcome, doing so gave lots of gratification, no such thing as a problem only a solution.

Software releases
V2.2 Beta first release
V2.3 Fixes to CTCSS Logic, CTCSS only in TX mode, CTCSS Transmit only when when in Frequency mode


78L05 fitted to the PLL board to make the Logic compatible with the Arduino

Link to videos



Last edited: