Icom HM-151 Internals
This information comes from Joe, KE0FF. Thank you very much for the contribution :)
There are at least three different versions of the HM-151. The older version [GEN] looks more like a pseudo-clone of the HM-133 in that it seems to transmit the PTT status over the data line. The newer versions ([GEN-1] and [GEN-2]) connect the PTT to the RJ-45 connector and do NOT transmit PTT status over the data line. At least, this is true for [GEN-1], which is the mic that I have. The difference between [GEN-1] and [GEN-2] is a new PCB layout (and possibly changes to the MCU and/or MCU-SW). [GEN] and [GEN-1] share the same PCB, but have population options that separate the two (primarily in the way PTT is wired). I have no idea how these different models are deployed. The service manual does not address WHY there are different versions, it simply provides the data for them. I've also not done a critical BOM comparison... it just isn't on my radar.
[GEN] and [GEN-1] PCBs are identified as "B6347B" on the PCB silkscreen. The [GEN] implementation would likely see "W1" (a cut-jumper) cut, but this is a pure guess, I only have the [GEN-1] to go by. [GEN-2] PCBs are identified as "B7194"
The data line needs to have a known termination resistance. This is generally provided by the radio and applies to both the HM-133 and HM-151. However, anything that loads the data line will shift the voltage levels, and it would be helpful to note this (if you have noted this in the wiki, my apologies for not catching that). In my case, I intercepted the data and mic audio, and repeated them back out to the radio. This allows me to electronically switch the mic from the IC-7K to another destination. I was able to "tune" the load resistance on the data line to place the mid-point of the voltage shifts very near 2.5V, which allowed me to use a precision 2.5V reference on my comparator. I found that a 12.5K resistor got pretty close to the desired 2.5V mid-point (with no radio connected). My measurements with the IC-7K indicate that its load resistance is something like 6.5K, but this measurement has about +/-5% of uncertainty. I also had to use a lot of hysteresis (over 0.1V, which is a lot considering that the pk-pk swing for the data line is about 1V) for the comparator I used as it was oscillating at the Vref crossover point. I also added some SW countermeasures to ignore pulse-widths that are too short.
Unlike what you report for the HM-133, the HM-151 [GEN-1] does not appear to have any key-modes that modify the keycodes. The keys simply send their respective data code and I can find no combination that alters these codes. Since the IC-7K doesn't grok DTMF, that bit is always zero, as is the PTT and FUNC bits. My code extracts are listed below.
The same "1st key" bit is present as you described in the HM-131 format. The pair of data word bursts on my mic is a little slower than what you report on the wiki. I see more like 64 ms between bursts (this is end of one burst to end of next burst). The idle time between bursts is more like the 43 ms you noted for the rep-rate on the wiki.
I would argue that the data words for these microphones are actually 19 bits long with an additional stop-bit instead of 20 bits. To illustrate, if you look at the 20th bit of the 1st word on one of your data traces, it looks like a zero. However, the 20th bit of the 2nd word never has a falling edge to set the duration of the 2nd half of the bit cycle. The line is just high until the next data burst or key-press. Thus, this bit doesn't technically qualify as a zero, one, or even sync bit. I found this because I wasn't seeing the 2nd word of the burst in my SW, which was looking for 20 bits. On a lark, I shortened the bit count for the 2nd word to 19, and VOO-LOO!! I got data. This prompted me to look at the bitstream more closely. I'm not going to arm-wrestle anyone over this, but would welcome your feedback if you disagree.
The matrix below indicates the HM-151 key codes that are transferred on the microphone data output. The chart is arranged to approximate the actual key locations on the keypad. The text above each code is representative of the nomenclature on the keypad (tho, some keys have two or more functions, only the first function is listed below). Most key functions are the same as for the HM-133, but the differences are indicated by listing the HM-133 key function in brackets (such as “. [*]”, where the “*” indicates the HM-133 function). There are two instances where there is not a corresponding HM-133 keycode: HM-151 F1 and F2 do not match any of the HM-133 key codes.
The bit-maps are MSb on the left (this is the first bit that is transmitted), 20 bits total. The keys appear to be sent as 4, 4-bit values, each with a stop-bit (“0”). The first nibble holds the “1 st press” bit, which is a bit pattern of “0100”. The table below lists the bit-patterns for the keys with this bit clear.
LOCK [VFO] TUNER [MR] XFC [BAND] 0000-0-1000-0-0011-0-1000-0 0000-0-1000-0-0011-0-0100-0 0000-0-1000-0-0011-0-0010-0 UP V/M [F1] MW [F2] 0000-0-1000-0-0001-0-0010-0 0000-0-1000-0-0001-0-1000-0 0000-0-1000-0-0001-0-0100-0 DN F1 [no match] F2 [no match] 0000-0-1000-0-0000-0-0010-0 0000-0-1000-0-0000-0-0100-0 0000-0-1000-0-0000-0-1000-0 1 2 3 MODE [A] 0000-0-1000-0-0111-0-1000-0 0000-0-1000-0-0111-0-0100-0 0000-0-1000-0-0111-0-0010-0 0000-0-1000-0-0111-0-0001-0 4 5 6 FIL [B] 0000-0-1000-0-0110-0-1000-0 0000-0-1000-0-0110-0-0100-0 0000-0-1000-0-0110-0-0010-0 0000-0-1000-0-0110-0-0001-0 7 8 9 GENE [C] 0000-0-1000-0-0101-0-1000-0 0000-0-1000-0-0101-0-0100-0 0000-0-1000-0-0101-0-0010-0 0000-0-1000-0-0101-0-0001-0 . [*] 0 CE [#] ENT [D] 0000-0-1000-0-0100-0-1000-0 0000-0-1000-0-0100-0-0100-0 0000-0-1000-0-0100-0-0010-0 0000-0-1000-0-0100-0-0001-0
- HM-151 Service Manual (635 KB)