GM (160)23262 A to D chip
Ludis Langens
ludis at cruzers.com
Fri Jun 5 20:37:46 GMT 1998
Has anyone figured out all the registers/bits of the A to D chip used in
most (all?) GM C3 ECMs? This 28 pin DIP is usually marked with the part
number 23262. I have a question about one control bit. First, here's
what I've figured out:
\/\/\/
Offset 0 - read (only) : A2D conversion result register
bit 15 : conversion complete (1)
bits 14-8 : 0
bits 7-0 : conversion result (0 to 255)
Offset 2 - write : A2D Control/Status register
bits 15-9 : unused, written as 0
bit 8 : start conversion (1)
bit 7 : unknown
bits 6-4 : unused, written as 0
bits 3-0 : mux selector (0 to 15)
Offset 2 - read : A2D Control/Status register
bit 15 : analog channel 15 > ~1.4 volts
bit 14 : analog channel 14 > ~1.4 volts
bit 13 : analog channel 13 > ~1.4 volts
bit 12 : analog channel 12 > ~1.4 volts
bit 11 : analog channel 11 > ~1.4 volts
bit 10 : analog channel 10 > ~1.4 volts
bits 9-6 : mux selector (0 to 15)
bits 5-0 : 0
Only analog channels 0, 2 to 5, and 10 to 15 are implemented/bounded
out. Channel 1 appears to be internally connected to VCC. Channels 6
to 9 are not connected and float at random intermediate voltages.
All writes need to be performed as a 16 bit write, single byte writes
are ignored. An 8 bit read will transfer the upper byte (bits 15-8) of
the selected register.
A hardware reset clears the conversion complete flag, clears the
conversion result to 0, and switches the mux to channel 0.
A (word) write to the Control/Status register clears the conversion
complete flag, even if the start conversion bit was not set. The
conversion result byte retains a previous value until a new value is
loaded (and the conversion complete flag is set.) The following code
fragment demonstrates the earliest cycle in which the conversion
complete flag will be set.
LDD #$0100
STD $1002
MUL ; waste 10 E cycles
MUL ; waste 10 E cycles
NOP ; waste 2 E cycles
LDD $1000 ; burn 3 E cycles, then read $1000
BPL HardwareError
STAB ChannelZeroResult
/\/\/\
What does bit 7 of control register writes do? I have been unable to
observe any effects of this bit.
Several ECMs always write a zero into this bit. Several other ECMs
always write a one. This is done in the A2D subroutine by ORing the mux
selector with a RAM variable. This variable is initialized to 0x80 and
never changed.
Bit 7 does not: Alter the conversion time. Cause any change in the
conversion results. Cause anything to appear in the "0" read bits.
This chip has two VCC and two GND connections. The GNDs are both wired
together. The VCCs are both connected to the VCC supply, though with
seperate circuit board traces (double sided board.) Perhaps bit 7
switches the full scale reference voltage between the two VCCs.
Perhaps bit 7 turns on/off a high impedance pull-up on the analog
inputs. This might simplify using channels 10 to 15 as digital inputs.
However, the pull-up would have to be a very high impedance. (Most
inputs to the A to D chip are from high impedance sources. See two
paragraphs back.)
The ECMs which clear bit 7 have at least one digital input via the A to
D chip. ECMs which set bit 7 don't. However, the clearing ECMs also
have serious code space limitations.
The bit 7 ORing might be left over from prototype and or special
calibrator hardware. This is consistent with the initialized but never
changed RAM variable.
Does anyone have any other ideas/information?
unsigned long BinToBCD(unsigned long i) {unsigned long t;
Ludis Langens return i ? (t = BinToBCD(i >> 1), (t << 1) + (i & 1) +
ludis at cruzers.com (t + 858993459 >> 2 & 572662306) * 3) : 0;}
More information about the Diy_efi
mailing list