John AD0RW who has studied the CW keying issue has determined that the primary problem is that the analogue to digital conversion in the µBitx was having trouble distinguishing between “manual key down” and “dit”. This causes keying errors. For example, an ‘I’ becomes an ‘N’ when the dit paddle is held closed.
John incorporated the keyer code from W0EB and W2CTX into his personal software build, but he was determined to save the last analog input for S/power metering. So he kept the single input that detects four different levels. Actually, he doesn’t care much about straight keying so he left out the manual key resistor.
When looking at the nominal voltage levels with the provided resistors, he observed that there was only around 0.22 volts between the “dit” and “manual key” levels (1.60 vs 1.38 V). On the other hand, there is 1.8 volts between “dit” and “dah”. Errors due to fluctuations would be much more likely between “dit” and “manual key” levels.
He investigated options for resistor replacement, and in the end, replaced the 2.2k resistor with a 5.1k one. Now the nominal levels are 3.4 V for “dah”, 2.6 V for “dit”, and 2.1 V for “both”. The boundary ADC values were adjusted in the software.
He has found the results to be favourable so far in his testing, including sending a fair amount of practice code at speeds up to 25 wpm. The iambic action seems flawless and smooth.
He notes that “I might actually get good at sending iambic style someday…”. Some of us need to try this solution. Saving ports is a good idea on an Arduino Nano! It would also be helpful to know what values folk are using for the thresholds for the boundary points in the sketch.