So we have the amplitude conquered, next up in the time dimension: what form of line code is used? Figuring this out just boils down to trying to apply the different schemes and seeing if they add up.
This particular case looks like very regular unipolar non-return-to-zero. At this point, it’s not clear whether the 12V corresponds to a binary 1 or 0.
One can also see (after staring at the bit sequence for long enough) that bit 0 mod 11 is low; and bit 10 mod 11 is high. This looks very familiar to the bitstream produced by UARTs: a start bit, 8 data bits, a parity bit (odd even in this case) and a stop bit.
Since the protocol resembles RS-232 a bit, I figured it should be easy to convert from/to RS-232 and do the rest of the processing in software on bits instead of on voltages.
So in order to have the bytes correctly recognized, we need to map +12V -> -3~15V and 0V -> +3~15V.
This causes the idle, start, data and stop-bits to match, but inverts the data-bits and hence the parity...
The above content was licensed from Niobos: https://blog.dest-unreach.be - under the CC-BY-NC-SA - https://creativecommons.org/licenses/by-nc-sa/2.0/be/deed.en_US license.
🔗 External reference