3

I have a central heating system that displays it's info and error codes on 4 7-segment displays. These displays are driven by a SAA1064, like so: SAA1064 application

This SAA1064 (datasheet here) receives it's information through I2C from the main computer, and the displays are multiplexed.

Here's my problem: I have a raspberry pi (whose I2C bus is already in use, at 100KHz) and I want to use it to read the values being displayed. I would prefer not using an extra microcontroller just to parse what's being displayed or to sniff the I2C bus inside the central heating system (as I have little-to-no-experience in programming those). Would using I2C IO expanders be an idea? If so, how would this be wired?

Nick Alexeev
  • 37,739
  • 17
  • 97
  • 230
KJdev
  • 319
  • 1
  • 2
  • 8
  • 1
    Quick hack: use one of those cheap "security camera" CCD modules, a video input to the Pi, and a Python script to take a picture of the display every so often, do a bit of processing and finally OCR the image to spit out a number. – MattyZ May 29 '14 at 04:49
  • If adding electronics to the circuit doesn't work, I will certainly have a look at this. I already though of using a camera, but more as a joke, because I hadn't considered OCR, so thanks! – KJdev May 29 '14 at 11:06

1 Answers1

1

SAA1064 provides commands for writing display values, but they are write-only and they can not be read back via I2C **. Even if reading back through I2C were possible, you would have to implement a milti-master such that it doesn't interfere with the original I2C activity inside the heating system. That may or may not be straightforward.

So, what can possibly done?

The O.P. mentions adding a microcontroller (μC), which would listen on the I2C bus. There are existing products for doing this; they are already programmed to sniff and shouldn't require programming the μC.

However, I don't know how easy or challenging it would be to interface them to a Raspberry Pi.

Another approach would be to collect the number at the output of the SAA1064, which goes to the LED characters. SAA1064 multiplexes between characters and that presents a certain challenge, because you need to know which character you are reading. Ideally, you would use MX1 and MX2 as triggers and latch the values on the digital bus. Then you could read them through an I/O expander.

** Details on pp. 5-6 in the datasheet. In addition to the datasheet, I've got first had experience with SAA1064. I've designed it into 2 commercial instruments. To me, this lack of read back capability is a lack of feature. But then, SAA1064 was an old (1991) part.
By the way, SAA1064 has been discontinued.

Nick Alexeev
  • 37,739
  • 17
  • 97
  • 230
  • That last part was my idea as well, but how would I latch the values? Does something like a buffer IC exist? Or would I have to resort to a uC? (I would really like to avoid the latter) I will probably be using MCP23017's, these have an interrupt for each 8bit port they have. Can this be used in conjunction with a register- or buffer-IC? – KJdev May 29 '14 at 11:10