随PCE Mini的发售,八位堂也针对性的出了一款——PCE 2.4g 经典无线手柄。

这个手柄手感不错,自带连发键,关键用坏了不可惜。于是自然就产生了“要能把这个无线小手柄用在PCE主机上就好了!”这个想法。

image

USB手柄接入游戏主机,共有三个步骤组成:需要先读取和解析USB设备的输出指令,然后通过一个MCU转换为特定主机手柄的信号格式,最后再由IO口输出到主机。

作为我个人,最熟悉的当然是Arduino平台,但是Arduino的缺点是本身缺少usb host支持,需要叠加Usb Host Shield 2.0扩展板

扩展板的版型分为两种,标准版对应Uno,mini版对应Pro Mini。所以,转接器的方案要做到小巧便携当然首选mini扩展板。

image

硬件方案

接下来详细说一下方案的细节:

  • USBHostShield2.0 Mini扩展板:扩展板基于MAX3421E芯片方案,这个芯片是3.3v供电,而usb接口的输入电压是5v。因此需要对扩展板本身做一个简单的改造,如下图所示的位置断开连线,阻止芯片直接从usb口获取电流。 image

  • Arduino Pro Mini开发板:需要选择ATMega328 8MHz 3.3v版本,来对应MAX3421E的工作电压。MAX3421E从开发板的VCC口取电,而ProMini则通过Raw口从游戏主机获取供电。开发板的UART用于刷写程序,ICSP用于与扩展板通讯,其他可用自由使用的IO口一共有13个。 image

  • 手柄转接板:本质上是对主机手柄电路的复刻。早期游戏主机的手柄都是通过74系列逻辑芯片实现的,这些电路图在网上都可以找到,制作起来简单。如果用软件实现这些手柄逻辑难度和工作量都会更大。 image

  • 主机连接端口:PCE主机只有一个手柄接口,采用Mini DIN8标准。MiniDIN头的好处是接头和母座都足够小,轻便而且美观。但是缺点是我没有找到能够焊在PCB上的公焊接座,所以只能在主机和转接器之间用一根公对公的线来连接。实在是遗憾! image

将扩展板+开发板+转接板通过排针进行焊接。 image

这里有一个小的设计要说明,开发板在一侧预留了UART转TTL的针脚,分为是DTR/TX/RX/VCC/GND/GND。在这里焊上一排母座用于烧写程序,但其中VCC是NC的,因为3.3v驱动不了USB设备。取而代之的是把排母座最右侧的针脚剪短,焊上一根漆包线,穿过开发板直接连到转接板,而转接板是与开发板的Raw口连接的,这样就完成了供电的回路。

最终,转接器在运行时通过主机连接端口从主机获取电源,而在调试时则是通过UART转TTL工具获取电源。

软件方案

PCE手柄一共有8个按键(上下左右/Select/Run/I/II),对应到开发板的8个IO口,当按键没有按下的时候IO口为高电平,反之则为低电平。所以只需要输出一个单字节就可以控制手柄的动作。在制作转接板时需要将特定IO口对应到相应的按键上。

而在USB一端,usb host和usb device之间的传输会不断接收到一组输入信号,由若干个16位数字组成,当按键没有按下时,这些数字是固定值,当有按键按下时,特定的数字就会改变。

所以,软件部分的开发要先在输入信号和输出的IO口高低电平组合之间建立一个映射,这样就能够在捕捉到输入信号变化的时候从映射中找出对应的输出组合来实现手柄命令的输出。

image

上图列举出所有输入端的命令数据

image

上图列举出所有输出端的命令数据

测试过程略微有点凌乱,用这个测试版调试通过后就发给商家打样PCB了。

image

好事成双,一口气做了两个,但是Mini DIN8的焊接有一定难度,为了减少工作量,事先买来一根公对公线,两头分别剪断再分别焊上一个新头,这样就完工了。

image

image

上机之后的效果总之就是“长”,这是唯一不满意的地方。抱着折腾到底的心态,又对连接线做了缩短处理,并且给转接器本体套上了一层透明热缩管。从而来到了转接器的最终形态。

image

image

参考资料

http://archaicpixels.com/Controllers https://mmmonkey.co.uk/nes-to-pc-engine-controller-mod

- End -