After recoding my EP102 printer emulation to send a stream of print drum sector numbers into the print buffer FIFO, I needed to develop some sort of translator to take those sector numbers and convert them to M-32TL print wheel sector numbers that the M-32TL printer driver could swallow.
This turned out to be harder than I expected.
Showing posts with label M-32TL. Show all posts
Showing posts with label M-32TL. Show all posts
Friday, June 26, 2020
Wednesday, April 8, 2020
Load testing the AC Mains supply
In the previous post AC Mains power supply I asked, "I wonder what will happen when I fire up the VFD filament and +30V supplies, plus a complex FPGA design?" Well, there's no time like the present to find out.
What I did was to take the printer test I described in the post Testing the printer interface and added the VFD display test I described in the post Proof of Life. The two don't interact so this was easy to do.
With the bench output supply set to 7.5VDC, the board draws about 124mA. This varies depending on how many digits and segments of digits are illuminated.
What I did was to take the printer test I described in the post Testing the printer interface and added the VFD display test I described in the post Proof of Life. The two don't interact so this was easy to do.
With the bench output supply set to 7.5VDC, the board draws about 124mA. This varies depending on how many digits and segments of digits are illuminated.Monday, April 6, 2020
AC Mains power supply
This morning I wondered what the output of the AC Mains power supply would look like while the printer was running. I hate leaving questions unanswered, so I took a look:
This is a screen capture from my oscilloscope connected across the unregulated DC supply. The vertical scale is 2.00 volts per division, DC coupled, and the horizontal is 100 milliseconds per division. The single-sweep trigger is set for the negative edge at 8V DC.
With the AC power applied and the regulators turned off, the unregulated output of the bridge rectifier is 10.5 volts. Turning on the regulators drops this to about 10.1V. Printing the same eight-character pattern as before pulls this down to about 6.5V as the motor starts up before stabilizing at about 7.5V with a 0.75Vp-p, 120 Hz ripple. If you look closely you can pick out the seven small dips where the print hammer solenoid fires, with the big valley at the end occurring when the solenoid fires to print the eighth character and is held engaged to trigger the paper feed. Once the motor shuts off the big filter capacitor recharges with the classic RC charge curve.
With the AC power applied and the regulators turned off, the unregulated output of the bridge rectifier is 10.5 volts. Turning on the regulators drops this to about 10.1V. Printing the same eight-character pattern as before pulls this down to about 6.5V as the motor starts up before stabilizing at about 7.5V with a 0.75Vp-p, 120 Hz ripple. If you look closely you can pick out the seven small dips where the print hammer solenoid fires, with the big valley at the end occurring when the solenoid fires to print the eighth character and is held engaged to trigger the paper feed. Once the motor shuts off the big filter capacitor recharges with the classic RC charge curve.
Testing the printer interface
In November I tested a prototype of my FPGA interface to the M32-TL printer using the Lattice iCEblink40-HX1K and a circuit assembled on solderless breadboard, described here. Since this worked well I was pretty sure this would also work on the P170-DH replacement board. But there is always a chance something didn't get laid out correctly, or something I overlooked.When I put the replacement PCB into the P170-DH shell last month, I decided I really didn't want to be taking the board out again if I could help it. All the logic is on the exposed side of the board, and removing it requires removing 20 small screws. So I also connected the AC mains transformer and the printer. After proving out the keyclick sounder, the last untested subsystem was the printer interface.
Sunday, November 3, 2019
Video of the M-32TL printer in action
Here's a video of the M-32TL printer being driven by my Verilog driver module:
It's a hand-held cellphone video, and a bit unsteady. But you get the idea!
It's a hand-held cellphone video, and a bit unsteady. But you get the idea!
Printing using Verilog
After finishing coding and simulating the Verilog printer driver modules, it was time to test it with the real thing:
Even though I'm planning to use a Xilinx Spartan 6 on the replacement PCB in the Canon P170-DH calculator shell, I'm continuing to use the Lattice iCEblink40-HX1K development board for testing. One good reason for this is that I can buy a replacement iCEblink40 board for $40 (US) and have it delivered in a few days, while both of the Digilent reference boards I have are "retired" products and cost several hundreds of dollars each.
Even though I'm planning to use a Xilinx Spartan 6 on the replacement PCB in the Canon P170-DH calculator shell, I'm continuing to use the Lattice iCEblink40-HX1K development board for testing. One good reason for this is that I can buy a replacement iCEblink40 board for $40 (US) and have it delivered in a few days, while both of the Digilent reference boards I have are "retired" products and cost several hundreds of dollars each.
Friday, October 18, 2019
M-32TL Timing: Why three position sensors?
While reviewing my last post I realized that I'd left out an interesting behavior that happens after the printer hammer fires.
Let's look at a couple of waveforms captured using an intact P170-DH calculator. All of these are taken from the same capture, covering the printing of the first 6 characters on a line. The sensor signals are labeled based on the operation I expected when I started working with this printer rather than the nomenclature I use now. In each case I've placed cursors at the leading (falling) edges of the "Rotation Index" signal; these mark the start and end of one complete revolution of the print wheel.
Let's look at a couple of waveforms captured using an intact P170-DH calculator. All of these are taken from the same capture, covering the printing of the first 6 characters on a line. The sensor signals are labeled based on the operation I expected when I started working with this printer rather than the nomenclature I use now. In each case I've placed cursors at the leading (falling) edges of the "Rotation Index" signal; these mark the start and end of one complete revolution of the print wheel.
Monday, October 14, 2019
EP-102 to M-32TL Glue logic
The Busicom 141-PF calculator had a Shinshu Seiki (the predecessor of Epson) Model 102 drum printer. A drum printer has a cylinder (or drum) with rows of characters embossed across its width. The drum spins at relatively high speed, while a set of hammers on the other side of the paper presses the paper against the drum's surface at the right moment to print the desired characters. A full revolution of the drum is required to print all the characters on the line.
Here's a picture of a Shinshu Seiki Model 102 printer:
Since this printer can print 18 columns, it has 18 separate print hammers. Thus the i4004 software generates 18 signals in parallel using a pair of i4003 shift registers to activate the correct hammers at the correct time.
The Epson M-32TL printer, on the other hand, prints one character at a time by moving the print mechanism across the paper from right to left. Obviously some translation is required.
M-32TL Printer timing revisited
While browsing through my accumulated datasheets related to this project I found one for the Toshiba TC83230-0015 calculator chip. The information in it is sparse but it specifically mentions the Epson M31/M31A printer. The suggested system block diagram includes one tiny clue:
Tuesday, April 3, 2018
M-32TL Printer contact debouncing
I got to thinking about the interface to the M-32TL printer from my Canon P170-DH calculator. Now that I have an async serial interface I thought I'd plumb it into the printer.
Friday, March 3, 2017
Maximum M-32TL printer width
Over my lunch break I extended my printer test program to make it easier to specify the width of the printing. It prints a sequence of numbers that make it easy to tell how many characters have been printed:
Everything works fine through 17 numeric characters (20 characters total, including the three symbol characters on the far right edge). When it attempts to print 18 numeric characters the last (left-most) two characters over-print. Attempting 19 numeric characters causes the three left-most characters to over-print. This doesn't seem to cause any mechanical problems, but I'm not planning on stress-testing this.
Clearly the limit for the Epson M-32TL printer is a total of 20 characters, composed of up to 17 numeric characters and three symbols on the right edge.
Everything works fine through 17 numeric characters (20 characters total, including the three symbol characters on the far right edge). When it attempts to print 18 numeric characters the last (left-most) two characters over-print. Attempting 19 numeric characters causes the three left-most characters to over-print. This doesn't seem to cause any mechanical problems, but I'm not planning on stress-testing this.
Clearly the limit for the Epson M-32TL printer is a total of 20 characters, composed of up to 17 numeric characters and three symbols on the right edge.
The M-32TL printer works!
It took a couple evenings of work, but I have the M-32TL printer working!
I've only done some basic testing, but as you can see from the photo above it prints the intended test output (from right-to-left: delta, multiply, black space, decimal, zero).
I've only done some basic testing, but as you can see from the photo above it prints the intended test output (from right-to-left: delta, multiply, black space, decimal, zero).
Wednesday, March 1, 2017
New M-32TL printer testbed
I decided I'd learned enough about the M-32TL printer in my Canon P-170DH calculator, and it was time for surgery.
There are no screws holding the printer in the calculator shell, just careful design of the shell itself. So all that remained was disconnecting the wiring. For ease of assembly these wires are glued to a small piece of plastic which holds the wires at the proper (0.1" or 2.54mm) spacing. Unfortunately this had come loose during my handling. To make it easier to connect these wires to my solderless breadboard I assembled a plug of sorts from a small piece of pad-per-hole perf-board and an 8-position pin header.
There are no screws holding the printer in the calculator shell, just careful design of the shell itself. So all that remained was disconnecting the wiring. For ease of assembly these wires are glued to a small piece of plastic which holds the wires at the proper (0.1" or 2.54mm) spacing. Unfortunately this had come loose during my handling. To make it easier to connect these wires to my solderless breadboard I assembled a plug of sorts from a small piece of pad-per-hole perf-board and an 8-position pin header.
Monday, December 19, 2016
More on the M-32TL printer
The last couple of weekends I've stolen a few hours here and there to put my logic analyzer on the M-32TL printer in the Canon P170-DH calculator I've chosen as a keyboard and printer interface to my 4004 CPU reconstruction.
Here you can see the USB logic analyzer pod on the left, and the under side of the calculator on the right. The printer is visible in the upper right corner.
This printer can print in either black (blue-ish, anyway) or red. I previously linked to a web page by Arne Rossius with his analysis of the similar M-31A printer, but of course it gave no hints as to how the shift to red worked. By recording the signals received from the position sensor and the signals driving the motor and solenoid, I've been able to get a better idea how this printer works.
Although I found the pinout to be the same as described in the M-31A, I disagree with Arne's description of the function of the position sensor signals.
In the P170-DH, pins 2 (Solenoid +) and 3 (Motor +) are connected to the unregulated positive supply, which seems to provide a bit under 8 VDC. Pin 7 (Sensor common) is connected to ground, while pins 5, 6, and 8 are pulled to a logic "high" through resistors and debounced with an RC network. When a sensor contact connects with the conductive pattern etched on the sensor disc it pulls the logic input low.
Here's where my analysis differs: When pin 8 goes low, the printer wheels are approaching the next character. If pin 6 is also low it's the first character in the sequence given below, else it's the next one in the sequence. If this character is to be printed the solenoid is activated when pin 5 next goes low and remains activated until pin 5 goes low again.
Why not just use pin 5 to determine the character position? It appears from the signal recordings that while the character is being printed the wheels stop moving briefly. During this time pin 5 often generates several erratic low indications, while pin 8 never does. I suspect the contact for pin 5 is just on the edge of the conductor pattern on the sensor disc and any movement of the disc causes the contact to make and break. This would result in printing errors.
It also appears that this printer can print from the "Symbols" wheel in the right-most two columns, rather than only one. I haven't seen this calculator do it yet, but the second character printed thus far has always been index 10, which is a space. There's definitely enough of a gap between the right most symbol and the first number for one if not two more characters.
The third character appears to be the key to the color shift. If the number portion is to be printed in black, the third character is index 10 (a space). But if the number is to be printed in red, the third character is index 13; this also prints as a space, but all following characters are printed using the red number wheel.
Printing of a line is completed by activating the solenoid for much longer than a single character time while printing the final character. In my tests the P170-DH asserted the solenoid for just under 24ms.
At some point I'll want to disconnect this printer from the calculator board so I can test it with a PIC as a driver. The reason I haven't done so yet is I'm not sure I've learned all I can before I start disassembling it. I do have a second P170-DH, but I'd rather not have to open that one up unless I need to.
Here you can see the USB logic analyzer pod on the left, and the under side of the calculator on the right. The printer is visible in the upper right corner.
This printer can print in either black (blue-ish, anyway) or red. I previously linked to a web page by Arne Rossius with his analysis of the similar M-31A printer, but of course it gave no hints as to how the shift to red worked. By recording the signals received from the position sensor and the signals driving the motor and solenoid, I've been able to get a better idea how this printer works.
Although I found the pinout to be the same as described in the M-31A, I disagree with Arne's description of the function of the position sensor signals.
| Pin | Function |
|---|---|
| 1 | Solenoid - |
| 2 | Solenoid + |
| 3 | Motor + |
| 4 | Motor - |
| 5 | Solenoid index |
| 6 | Rotation index |
| 7 | Sensor common |
| 8 | Character index |
In the P170-DH, pins 2 (Solenoid +) and 3 (Motor +) are connected to the unregulated positive supply, which seems to provide a bit under 8 VDC. Pin 7 (Sensor common) is connected to ground, while pins 5, 6, and 8 are pulled to a logic "high" through resistors and debounced with an RC network. When a sensor contact connects with the conductive pattern etched on the sensor disc it pulls the logic input low.
Here's where my analysis differs: When pin 8 goes low, the printer wheels are approaching the next character. If pin 6 is also low it's the first character in the sequence given below, else it's the next one in the sequence. If this character is to be printed the solenoid is activated when pin 5 next goes low and remains activated until pin 5 goes low again.
Why not just use pin 5 to determine the character position? It appears from the signal recordings that while the character is being printed the wheels stop moving briefly. During this time pin 5 often generates several erratic low indications, while pin 8 never does. I suspect the contact for pin 5 is just on the edge of the conductor pattern on the sensor disc and any movement of the disc causes the contact to make and break. This would result in printing errors.
It also appears that this printer can print from the "Symbols" wheel in the right-most two columns, rather than only one. I haven't seen this calculator do it yet, but the second character printed thus far has always been index 10, which is a space. There's definitely enough of a gap between the right most symbol and the first number for one if not two more characters.
| Wheel | Character Printed | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Symbols | + | × | ÷ | ◊ | ∗ | Δ | G | M | C | = | (space) | − | % | (red) |
| Numbers | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | − | , | • | # |
The third character appears to be the key to the color shift. If the number portion is to be printed in black, the third character is index 10 (a space). But if the number is to be printed in red, the third character is index 13; this also prints as a space, but all following characters are printed using the red number wheel.
Printing of a line is completed by activating the solenoid for much longer than a single character time while printing the final character. In my tests the P170-DH asserted the solenoid for just under 24ms.
At some point I'll want to disconnect this printer from the calculator board so I can test it with a PIC as a driver. The reason I haven't done so yet is I'm not sure I've learned all I can before I start disassembling it. I do have a second P170-DH, but I'd rather not have to open that one up unless I need to.
Friday, April 15, 2016
M-32TL operation notes
I took a brief look at the M-32TL printer in my Canon P170-DH calculator. I haven't figured out all the details, but here's what I've learned so far.
Subscribe to:
Posts (Atom)







