Sunday, March 25, 2018

Matrix keypad experiments, part 2

Ever heard the saying, "The cobbler's children go barefoot"?

One of problems with being everybody's go-to guy for home tech problems is that there isn't anyone to call when your own tech develops problems. This morning I woke up to find my main computer and home network was  completely locked up. Several frustrating hours later I finally got back to working on the keypad scanner.

The pic shows the iCEblink board with the PmodKYPD keypad plugged in, and my scope probes attached to the column 3 and 4 outputs.

Matrix keypad experiments, part 1

One of the tasks necessary to converting the Canon P170-DH calculator into a Busicom 141PF replica is to be able to scan the keypad. While I might have enough unused pins on the 144-pin Spartan-6 LX9 FPGA (max 102 I/Os) to connect each key to a pin, that's overkill for this requirement. Instead, I'll lay out the PCB to wire the keypad as a matrix.

Looking at the arrangement of keys, the obvious arrangement is 8 columns of 5 rows. This is different than the 8x4 arrangement of the 141PF, but then the two keypads don't have quite the same layout or keys:
Busicom 141-PF Keypad
Canon P170-DH Keypad
Since making a PCB just to experiment with the keypad is more expensive than I'd like (about $150 US), I thought I'd start small, primarily with the resources at hand.

Programming the iCEblink40-HX1K from a Windows VM

Running Linux on your desktop brings with it some challenges. I found I'd installed a number of Lattice packages that might have been able to program the iCEblink, but I don't think I ever got any of them to work. I found a set of Digilent utilities (dadutil, djtagcfg) that will identify the board on the bus but I didn't see a way to program this board.

I found a project called iceBurn on GitHub that claims to be able to do it. This looks promising but I didn't feel like experimenting last night.

Eventually I remembered (or figured out again) how to do it from my VMware Player virtual machine running Windows 7. Here's the majick incantation for that:
  1. Configure the VM so it has a USB controller. This will allow the VM to claim a USB device on the host.
  2. Boot the Windows virtual machine.
  3. Install iCEcube2 2014.08. Later versions lack the programmer needed to program the iCEblink40. Be sure to install the programmer, which may be an installation option. 
  4. Plug the iCEblink40 into the host using a USB-A to MiniUSB-B cable.
  5. Activate VMware Player's "Virtual Machine" menu and navigate through "Removable Devices" to the "Digilent Adept USB Device" menu. Click on "Connect (Disconnect from host)".

Don't forget to flick the tip of your wand at the proper moment. Le-ve-OH-sa!

With this set-up I can run the synthesis, place & route, and generate bitmap files under Linux, then switch over to the Windows VM and program the board.

Saturday, March 24, 2018

Using the Lattice iCEcube2 Software on Ubuntu 16.04

All you Windoze folk, go have coffee; this isn't for you.

Still here? Okay. This is mostly for me, so I don't have to figure this out anew every time I come back to this project.

Thursday, March 15, 2018

Tick... tick... tick...

One of my goals in designing a new PCB for the Canon P170-DH calculator is to add a key-click sound to positively indicate that a valid key-press has been detected. This was more important before I decided to implement the fluorescent display, but I think it's still valid.

Some people have done this by taking a piezo-electric transducer and driving it with a single, narrow pulse. Apparently this gives a sharp "TICK" sound. But I want something longer. And probably louder.

Sunday, March 4, 2018

The more I think about it

The more I think about treating the rebuilt Canon P170-DH calculator purely as an I/O peripheral with a low-speed serial interface the more I like it. It would require far fewer signals than a parallel interface, while reducing the signal frequency from MHz to KHz. This reduces the risk level in completing the discrete-component i4004 CPU board set, which is far more critical now that the essential BSS83 transistor is no longer available. This will let me progress on the replacement PCB for the P170.