Do you like my hacking? If so, please consider leaving something in the
Fediverse (Mastodon etc): @Sprite_tm@social. spritesmods.com
So, how to convince the CCD to do my bidding and tell me what it saw? My first guess was that I probably could find out something by dismantling the scanning element. After some cutting, off came the long PCB that was in the base of it. I was very glad I'd been careful while taking it off: on the top of the PCB were a few SMD-capacitors and a complete line made out of eight long, small line sensors. These sensors didn't had any casing or other protection around them: I could actually see the gold bonding wires going to them, and snap them off too if I were not careful. Dismantling the PCB was useful, though: I noticed that of the 12 connections going to it, 4 ran straight to the RGB-led, 2 were connected to the ground-plane and one had such a large capacitor on it that it had to be the power supply for the ICs.
So, when I put the device together again, I only had five connections to figure out. As I said before: I had a rough idea what three of the waveforms on the lines should look like. I actually had some luck: while the controller-PCB that used to be in the multifunctional printer was broken, it still was alive enough to try and calibrate the scanner, in the process reading out the PCB. Putting a scope to the connector was enough to find out where the signals I needed were; the two other lines had a steady DC voltage.
Fast-forward through some judicious programming and breadboarding and I had an ATMega88 programmed to spit out the same signals as the original controller. It actually worked: on my scope was a line which went up and down in places when I waved my hand over the CCD, casting a shadow over parts of it. I could actually distinguish the individual pixels: the line-CCD seemed to have 2500 or so of them. Mind you, the ATMega didn't read in the analog signal yet, but the setup proved that I could read out the CCD successfully. I also managed to find out the meaning of the other two pins: one is a digital one selecting the output voltage, the other one is an analog input pin which modifies the sensitivity of the CCD. I tied a 2K5 variable resistor to it to be able to tweak the sensitivity manually.
Ok, now I had a working line-CCD. What to do with it?
The fact that I could actually cast shadows whose positions could immediately be measured reminded me of an other idea I once had. What if I put the CCD under a computer monitor, and place a few IR-LEDs on top of it? That could work as a touchscreen: when a finger is placed on the display, it would cast a shadow from the IR-LED on the CCD, which could then detect it. With multiple LEDs, all controlled by software, some maths ought to be enough to reproduce the original touch coordinates from the shadow data.
So, the idea was set. Get the CCD data into a PC, do some maths and then reproduce the coordinates the screen was touched at.