As previously mentioned (in Part 1: USB Mouse For The ZX81 And ZXpand), the USB mouse interface relies on normal Atari digital joystick inputs as found on the ZXpand. Since that time, Charlie Robson unleashed the new ZXpand+ into the ZX81 world. With this comes some potential options, in particular a TTL serial port has been included on the ZXpand+ IDC header, this may be of use for sending proportional mouse data, promising true mouse functionality.
For now though, the Mouse interface maintains full compatibility with the original ZXpand while also making allowances for serial connection to the ZXpand+, connections that will be used at a later date. Of note for those intending to use the interface on other Micro computers, the serial tracks on the ZeaMouse interfaces IDC header may need to be cut (or removed) in order to avoid potential damage to that Micro or the Interface itself.
ZeaMouse Firmware
There is nothing overly complex in the code. Mouse movement tracked by time, if XY mouse movement is detected the appropriate joystick pin is set to OUTPUT, a debounce timeout then set to 15, milliseconds providing enough time for a 'button press' to be registered by the ZXpand. While mouse movement continues in the same direction the debounce timings are updated. Mouse button 1 and 2 are both setup to work as a standard joystick button press.
A regular Atari Joystick can be attached to the semi-pass-though port. Joystick movement is given priority and should override incidental mouse movements while using a joystick. The exception to this is where a mouse button is pressed as tracking mouse presses relies on the button being released again to clear the OUTPUT.
A large scope exists for future additions to the code. Provisions for USB joysticks and keyboards (with limited functionality) could also be added with some extra effort. As it is possible to attach the USB shield to a USB hub, allowances for multiple devices to be connected at the same time could also be made. Depending on updates to the ZXpand+ itself, and how the TTL serial lines are read, all manner of interfacing options could become available.
The Arduino Code Files can be found here: ZeaMouse_Arduino.tar.gz
ZeaMouse plugged into the ZXpand+ using a (delightful rainbow (thanks Charlie)) IDC cable, with USB mouse and Digital Joystick connected. |
Programing the ATmega328P / Arduino
Ideally it's easiest to purchase an ATmega328P IC with the Arduino boot loader pre-installed, these can be sourced quite easily. I recommend purchasing a kit that comes with the required crystal, such as this kit from Jaycar: ATMEGA328P MCU IC with Arduino UNO Bootloader and 16MHz Crystal (or a cheaper version from your favourite Chinese supplier).
The ATmega328P chip (with boot loader) will require sketch / code / firmware, this must be programmed outside of the USB joystick interface. To do this an Arduino UNO can be used, simply swap out the existing IC in the UNO, insert and program the new one, then transferring that to the interface.
Required Components
IDC Cables: Top Cable for ZXpand+, Bottom Cable for ZXpand. |
You may be able to purchase IDC cables pre-made, however if manufacturing at home there is a nice video on how to make IDC (ribbon) cables over on YouTube thanks to The University of Manchester. The main thing to remember when building a cable is that pin 1 on 1 socket should always go to pin 1 on socket 2.
All parts required to build the actual ZeaMouse interface are listed in the table below.
Main Contruction Shopping List (Excluding the PCB & USB Shield)
Amount | Part Type | Properties |
---|---|---|
2 | Capacitor | variant pth2; package cap-pth-small2 |
1 | Ceramic Capacitor | package 200 mil [THT, multilayer]; capacitance 100nF; voltage 6.3V |
1 | Capacitor Polarized | variant pth2; package cpol-radial-10uf-25v |
1 | Capacitor Polarized | variant pth1; package cpol-radial-100uf-25v |
5 | Diode | variant pth; package diode-1n4001 |
1 | MICROCONTROLLER | variant kit; package dil28-3-simon-kit; chip atmega8 |
1 | AVR ISP 6 Pin | variant pth; package 2x3; pins 6 |
1 | 10 Pin IDC Header | variant variant 2; row double; package THT; pins 10; form ♂ (shrouded male); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
1 | Ardunio_Power_Header_8_Pins | variant variant 3; row single; package THT; pins 8; form ♀ (female); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
1 | Ardunio_Analog_Header_6_Pins | variant variant 4; row single; package THT; pins 6; form ♀ (female); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
1 | Ardunio_Digital_Header_10_Pins | variant variant 5; row single; package THT; pins 10; form ♀ (female); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
1 | Ardunio_Digital_Header_8_Pins | variant variant 6; row single; package THT; pins 8; form ♀ (female); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
1 | Bucket DB9 | Solder Bucket DB9 |
1 | Red (633nm) LED | package 3 mm [THT]; color Red (633nm); leg yes |
1 | 10kΩ Resistor | package THT; tolerance ±5%; bands 4; pin spacing 400 mil; resistance 10kΩ |
1 | 220Ω Resistor | package THT; tolerance ±5%; bands 4; pin spacing 400 mil; resistance 220Ω |
1 | Voltage Regulator - 3.3V | package TO220 [THT]; voltage 3.3V; part # LM2936 |
1 | Crystal | package THT; frequency 16 Mhz; pin spacing 5.08mm; type crystal |
1 | Crystal | package THT; frequency 16 Mhz; pin spacing 5.08mm; type crystal |
ZeaMouse Board Assembly
ZeaMouse PCB Layout |
As mentioned in Part 1 of the USB Mouse For The ZX81 And ZXpand blog post, the mouse interface PCB is designed to allow easy one sided home fabrication, as well as double sided construction for the more adventurous, or ordering from fabrication houses.
The underside of the PCB is all that needs to be printed, with the top side consisting of only straight tracks and vias that can be linked with copper wire if you choose the one sided method. Linking wires are highlighted in red on the PCB layout figure / image.
Assembly List
Label | Part Type | Properties |
---|---|---|
C1 | Capacitor | variant pth2; package cap-pth-small2 |
C2 | Capacitor | variant pth2; package cap-pth-small2 |
C3 | Ceramic Capacitor | package 200 mil [THT, multilayer]; capacitance 100nF; voltage 6.3V |
C4 | Capacitor Polarized | variant pth2; package cpol-radial-10uf-25v |
C5 | Capacitor Polarized | variant pth1; package cpol-radial-100uf-25v |
D1 | Diode | variant pth; package diode-1n4001 |
D2 | Diode | variant pth; package diode-1n4001 |
D3 | Diode | variant pth; package diode-1n4001 |
D4 | Diode | variant pth; package diode-1n4001 |
D5 | Diode | variant pth; package diode-1n4001 |
IC1 | MICROCONTROLLER | variant kit; package dil28-3-simon-kit; chip atmega8 |
J1 | AVR ISP 6 Pin | variant pth; package 2x3; pins 6 |
J2 | Atari Joystick IDC | variant variant 2; row double; package THT; pins 10; form ♂ (shrouded male); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
J3 | Ardunio_Power_Header_8_Pins | variant variant 3; row single; package THT; pins 8; form ♀ (female); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
J5 | Ardunio_Analog_Header_6_Pins | variant variant 4; row single; package THT; pins 6; form ♀ (female); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
J6 | Ardunio_Digital_Header_10_Pins | variant variant 5; row single; package THT; pins 10; form ♀ (female); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
J7 | Ardunio_Digital_Header_8_Pins | variant variant 6; row single; package THT; pins 8; form ♀ (female); pin spacing 0.1in (2.54mm); hole size 1.0mm,0.508mm |
J8 | Generic male header - 5 pins | Solder Bucket DB9, top row: See article for attachment guide |
J9 | Generic male header - 4 pins | Solder Bucket DB9, bottom row: See article for attachment guide |
LED1 | Red (633nm) LED | package 3 mm [THT]; color Red (633nm); leg yes |
R1 | 10kΩ Resistor | package THT; tolerance ±5%; bands 4; pin spacing 400 mil; resistance 10kΩ |
R2 | 220Ω Resistor | package THT; tolerance ±5%; bands 4; pin spacing 400 mil; resistance 220Ω |
U1 | Voltage Regulator - 3.3V | package TO220 [THT]; voltage 3.3V; part # LM2936 |
XTAL1 | Crystal | package THT; frequency 16 Mhz; pin spacing 5.08mm; type crystal |
Go Forth and Build
That's it for the moment, so go forth and build the ZeaMouse. I'll be updating and adding features to the firmware over the coming months, and hopefully some specifically ZXpand+ only enhancements that take advantage of the new hardware, so come back every now and again to check for that. As always feedback and suggestions are more than welcomed.
0 comments:
Post a Comment