Back Home

Navigation

Home
Back to Projects

Fluke 8010/8012
Important Notes
Introduction
SB-Bus Control
SB-Bus Commands
SB-Bus Errors
Circuit Description
The Hardware
Download


Circuit Description

The Fluke interface diagram is an example of a typical microcontroller circuit. There is not really much to see, apart from the microcontroller itself. Nevertheless I'll try to explain what's happening here, because not everything is as obvious as it may seem at first glance.

The CCU3000

I chose the CCU3000 microcontroller from Intermetall/Micronas for this project for a few important reasons. First of all it has more than the required number of I/O lines. All the input pins are really floating, which is also one of the requirements (I'll explain why later). And last, but not least, it has a quite modest current consumption, which is important because the power supply of the Fluke 8010/8012 is quite small and may not be loaded to heavily. By running the CCU3000 at 1MHz I could reduce the current consumption of the total circuit down to about 3 mA.

The Microcontroller In Detail

The CCU3000 operates on a 4 MHz crystal oscillator, which is connected between the pins 3 and 4. Internally this frequency can be divided down to an appropriate value. I chose a division factor of 4 to reduce the power consumption, resulting in an internal clock frequency of 1 MHz, which is more than sufficient for our application.

The reset circuit is also an example of simplicity. A simple RC network connected to pin 6 will do the trick. A diode is added across the resistor to achieve a fast discharge of the capacitor when the power fails, which will guarantee a proper restart if the power supply is interrupted only briefly. The diode will start conducting as soon as the power supply voltage drops below the charge level of the capacitor, effectively discharging the capacitor.

It is important to pull pin 17 high with a resistor to make the CCU3000 fetch its mode control byte from external memory, for there is no internal memory to fetch it from.

I do admit that the EPROM is a bit over sized with its 32 kb, for the program is just about 6 kb long. I had ample 32 kb EEPROMs in stock, and they are almost always made in CMOS technology, which is a requirement ta achieve low power consumption. It is hardly possible to reveal any more secrets about the connection of the EPROM in this circuit. Except that the OE line of the device is permanently tied to ground, making it active all the time. This is no problem because the EPROM is the only device connected externally to the address/data bus of the CCU3000. The address bus is ignored by the CCU3000 when addressing internal memory or I/O peripherals.

The Power Supply

Again nothing special here. The power supply consist mainly of the linear regulator LM2936-5, which excels in a very low quiescent current which also contributes to the low overall power consumption. You may also use a normal 78L05 if you can't get the LM2936-5, at the expense of a slightly increased consumption.
It is very important to de-couple the input and the output of the LM2936-5 with capacitors of at least 22µF, otherwise you risk a heavily oscillating power supply! It goes without saying that the connection between these capacitors to the LM2936-5 must be as short as possible.
Apart from these capacitors I advice you to add 100nF capacitors as close as possible to the power supply connections of all the ICs.

The EEPROM As Non Volatile Memory

The X24C02 is an I²C controlled NVM, with a data capacity of 256 bytes. Many different manufacturers exist on the NVM market, so there should be plenty compatible ICs to choose from. It is even possible to put in a larger memory, eg the X24C16.
This little EEPROM is a bit over sized for it has only 2 things to remember, the SB-Bus address and the meter model. The SB-Address is only 7 bits wide, and the meter model can be represented by only 1 bit. I've added 2 identification bytes to verify the validity of the data, which adds up to a total of 3 bytes used of the available 256.

The SB-Bus

The SB-Bus connection shown in the upper right hand corner of the diagram shows all that is needed to make the interface connect to the outside world. The two opto-couplers take care of the necessary galvanic insulation between the SB-Bus and the meter.
Please bear in mind that the ground level of the meter may be raised up to 500V above the normal ground level. I guess that I don't have to emphasize that this would be very unhealthy without these opto-couplers!

The open drain output of the CCU pin 14 can pull the base of the PNP transistor low, which makes it conduct, which makes the opto-coupler to start conducting as well.
The receiving opto-coupler can pull input pin 13 of the CCU low. Normally this input is held high by a 1kΩ resistor.
Pins 13 and 14 are connected internally to 2 of the 3 available timer circuits in the CCU. These versatile timers can be programmed to perform like a normal serial interface.

The two 100kΩ resistors speed up the transitions of opto-couplers, making the ramps somewhat steeper.

The Used I/O Lines

Now we come to the most important property of the CCU3000, which makes it so suitable for this project. Most of the available I/O lines are needed to connect to the segment information of the display. But this is not always as easy as it may seem.

The segments of an LCD are controlled by a 50 Hz square wave (or 60 Hz in the US), with an amplitude switching between +3V and -3V. The inputs of the CCU3000 aren't allowed to be taken lower than -0.3V. A series resistor of 100 k should actually be enough, because the internal substrate diodes will limit the voltage automatically.
I wasn't too satisfied about this idea, not knowing what the long term effect would be on the chip. So I decided to take a somewhat different approach. I took a load of diodes, which all should limit the lowest voltage to about 0V. To achieve this I had to raise the common anodes to approximately +0.6V The 100k resistors are large enough to limit the consequences for the voltage levels of the LCD to a minimum.

According to the specifications of the CCU3000 a voltage on an input above +3.6V is considered 'high' level. Lucky for us this is a very pessimistic value, for it appears that the CCU3000 is perfectly happy with voltage levels of only +3V on its inputs. Because of this relatively low voltage, and the fact that this voltage may not be influenced by the interface, it is inevitable that the input lines of the microcontroller really must be floating. Internal pull-up resistors can not be allowed here, for they will raise the LCD voltage, resulting in an added DC component to the LCD which could kill it. The CCU3000 is quite unique in this very important property.

In order to read the display we have to read a total of 20 segments. Per 7-segment digit we need only 5 segments to find out what digit is shown. Furthermore we have to read the status of the left most 1, the - sign, and the 3 decimal points.
The segments of the 3 complete digits are connected in a neatly ordered way to minimize software overhead to decode them. One of the decimal points has gone astray, while the others are connected to the remaining pins of P6. The third decimal point could have been connected to P6 too (pin 68), but I deliberately connected it to P8 bit 7 instead because this pin can also serve as an interrupt input. This way it is very easy to synchronize the interface with the meter.
The meter takes 2.5 readings per second, and the display is clocked with exactly 50 Hz. We may safely assume that a reading is completed every 20 clock pulses. In order to use such a signal successfully we have to use the most stable signal. The most stable signal is the Back Plane, but that is not connected to the circuit. The next best thing is one of the decimal points, for they will remain stable for as long as we don't switch to a different range. And if we do switch to a different range, we may safely say that the first reading won't be valid anyway.
Not connecting the Back Plane will present us with another problem. How do we know what segments are on, and what segments are off? Remember that all signals constantly show a 50 Hz square wave, whether the segment is on or off. It's the phase of this square wave in respect to the Back Plane which tells us what segments are on or off. But as we can see in the diagram, the Back Plane is not connected to the interface.
The solution is very simple: The software checks the phase of all 3 decimal points. If it finds that only one of them is different, it knows that that one should be on, and so are all the other segments with the same phase. If it finds that 2 or more decimal points are on, it knows that this can not be true and that they are actually off, and so are all the other segments with the same phase. A simple, yet effective, solution to save one input pin.

Remark: Digit 1 is the left most complete digit, while digit 3 is the right most digit. The corresponding decimal points are always located left of these digits.

Controlling the BT Indicator

There's only one thing left to be mentioned, and that is pin 56 of the CCU. The transistor connected to this pin is used to drive the BT indicator on the display. The 6k8 resistor together with the on-board 20kΩ resistor form a voltage divider. This will prevent the voltage on pin 8 of U6 on the main board from raising above +3V.

Bill Of Materials
PartQuantityRemarks
CCU30001
27C2561Programmed with software
X24C021Or equivalent
LM2936-51Or 78L05
4N352Safety part!
Crystal 4MHz1
Resistor 390Ω2
Resistor 1kΩ1
Resistor 4k71
Resistor 6k81
Resistor 22kΩ6
Resistor 100kΩ22
Capacitor 100µ/16V1
Capacitor 22µ/10V1
Capacitor 10µ/10V1
Capacitor 100n3
Capacitor 22p2
Diode 1N414826
Transistor BC5582Or any other PNP transistor
4 way mini-DIN connector2
Socket PLCC681
Socket 40 pin2Twisted contacts!
Socket 28 pin1
Socket 8 pin1
20 pin boxed header1
20 way connector1
20 way flat cable1About 15cm long
3 pin header1
3 pin connector1
 

© 2002, San Bergmans, Oisterwijk, The Netherlands
http://www.sbprojects.com