» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 17 12
发新话题
打印

[硬件改造] (二楼更新)分享我的怀旧打机环境和一个我做的手柄转接器

15年的时候在家里做了一个怀旧游戏角,把吃灰的NGC/XBOX/PS2和在论坛收的14寸彩监都摆了出来,打算随时都可以坐下来上一发。



后来又陆续添了RGB-FC/FC/SS/SFC,上图是现在的样子。

当时把各类模拟器包括Mame/FC/SFC/MD等等都在XBOX和NGC上装了一遍,但是手柄实在给不了我当初的感觉,更找不回当年用MD6键手柄玩街霸2的回忆。于是就想着做个转接器把SFC手柄和SS手柄接在NGC和XBOX上玩。

经过一番研究和动手,最后居然都实现了。把Arduino和两个开源的项目结合起来,设计了自己的方案,在利用了开源代码的基础上完成了开发。

下面是在调试阶段自己做的试验板子。



功能调试都完成后,在TB打样做了10块PCB,又手工改造了一个SFC的PC转接器的外壳,让它和我的转接器完美匹配。



实际运行的效果,手柄和主机连接上后LED会点亮。



两年前这个转接器就做出来了,但通常像我这样的人都特不爱写文档,直到最近我才把整个项目放到Github上。

大家可以去这个地址参观,里面包含了电路设计和固件的源码,还有些进一步的项目描述:https://github.com/maximaas/RetroPad2Console

手头上现在还有8个当时打样出来的板子(项目主页里有图片),有谁需要我可以免费送。

[ 本帖最后由 only1onely 于 2017-8-16 14:35 编辑 ]
附件: 您所在的用户组无法下载或查看附件


本帖最近评分记录
  • KONAMIX 激骚 +10 最骚 Rated by wap 2017-9-3 11:29
  • yuhui 激骚 +4 最骚 Rated by wap 2017-8-16 15:31
  • rogerwaters 激骚 +3 最骚 Rated by wap 2017-8-16 13:29
  • 就一中年人 激骚 +2 威武! 2017-8-16 10:34
  • SONIC3D 发贴积分 +200 原创内容 2017-8-16 00:43

TOP

另外,最近几个月都在玩FC卡带的改造,做了很多卡带,收获很大,学到了很多的知识。

针对FC的DIY我也单独开了一个项目,把相关的内容都分享了出来。并且把改造的过程和方法都做成了博客,内容我也正在不断更新。

希望这些内容能给感兴趣但之前又没太多知识基础的DIY玩家提供足够的信息,而不用像我一开始一样到处查找和搜集各类资料。

项目地址:https://github.com/maximaas/Famicom-DIY

博客地址:https://maximaas.github.io/blog


说下自己DIY的过程=============================

一、13年的时候知道了Arduino这个东西,然后就买来玩了一下,发现很容易上手,于是就做了遥控小车、监控摄像头、温度探测器等等小项目。在这过程中把Arduino的基本硬件知识、软件编程、常用类库和Eagle电路设计工具都熟悉会用了。

二、而之所以得知然后折腾Arduino却是因为玩百万城的火车模型而起的。入门级的火车是通过轨道电压来调整车速,并且无法实现一个轨道上多辆车的运行和调度。高级的玩法叫DCC,是一套标准规范,定义了各类驱动火车的信号格式,然后通过支持DCC标准的控制器和车头来实现各类复杂的控制。

DCC控制器每个厂家都有相应的产品(百万城也有但是功能简陋),价格也很昂贵。而我等DIY玩家只在乎折腾过程的乐趣,并不在乎最终玩的乐趣,于是我就买了支持DCC的车头,然后自己用Arduino写了一套基于DCC标准的控制逻辑。

入门级火车控制器在铁轨上加载的是恒压的直流电源,而DCC控制器实质是向铁轨输出电压极性不断翻转的交流电,这样就形成了一个方波信号吗,而电压翻转的不同的频率和长度就构成了控制信号,这个交流电首先被送入车头的DCC接收器,将控制信号解析出来形成指令,同时将交流电过滤为直流电驱动车头。我在这个过程中的收获是进一步学习了Arduino的PWM信号及控制、LED屏幕显示、自制电路板的方法、二进制位操作等等,还买了UNO/MEGA/PRO Mini/Micro等多种Arduino板子。

三、现成的Arduino无法满足我了,于是买了ATMEGA8芯片自己做最小Arduino,刷bootloader写firmware。刚好这个时候论坛里有个兄弟改造出了NGC的SDL,我找他改完机就开始在家搞怀旧角,并且开始在家搞怀旧主机,装各种模拟器。然后就想到能不能用Arduino做一个转接器,因为这个时候基于掌握的知识已经知道了以arduino的特性和手柄的原理,我知道想法是肯定可以实现的,问题在于手柄的控制协议。

于是就开始上网各种找资料,SFC和SS手柄的协议有现成的文章,也有很多现成开源的代码,我拿来在Arduino上重构了一下。有难度的是NGC,因为它只用一根数据线实现了类似DCC的方波信号来实现手柄指令的传输,并且在这之前还有手柄握手和配对的过程,其信号的频率是微秒级(同时DCC信号是毫秒级),这就是为什么我找到的开源代码是用汇编实现的,因为必须要做到cycle级的程序控制。为了看懂别人的代码,我就学习了一些汇编,然后边看边查手册的方式来读代码,并移植到我的Arduino代码中进行调试,还买了逻辑分析仪来查看和验证指令信号的对错,最后又对汇编代码做了些改动(我在我的源码里留了必要的注释),然后就成功了。

对XBOX的支持反而来得轻松,因为Usb RetroPad Adapter是支持XBOX的USB的,我把其中XBOX接收信号的代码拿过来修改了一下对应的IO口,然后居然一次调试就成功了。

总结一下,就是需要在动手的过程中才能不断学习到和理解新知识,然后慢慢的做到举一反三。

更新两张当时做的DCC控制器的图片,有点吓人,凑合看。。。



[ 本帖最后由 only1onely 于 2017-8-17 23:45 编辑 ]
附件: 您所在的用户组无法下载或查看附件



TOP

引用:
原帖由 VODKA 于 2017-8-15 23:15 发表
posted by wap, platform: Firefox
炸裂了,俺最近正在研究MD6键手柄的USB转接器(因为之前买的转接器坏掉了),目前还没折腾出来,LZ能给点启发不。。。。。
有任何问题可以随时交流呀,貌似我之前回过你的帖子还给了两个MD手柄协议的链接。

转接器比较难的是目标端,但是MD转USB应该有很多现成的案例。


TOP

引用:
原帖由 咖啡殉 于 2017-8-15 23:12 发表
膜拜,好奇楼主从哪搞到的手柄接口焊到板上?外壳也很有感觉
万能的马云家

TOP

引用:
原帖由 成成 于 2017-8-15 23:18 发表
淘宝同款置物架,这小身板你竟然还敢放一台彩监在最上面,我把PS34和360放进去都觉得怕头重脚轻了
XBOX这个大砖头和PS2在下方当秤砣呢,这架子扛了两年多没任何事,中间还搬过一次家。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @VODKA  于 2017-8-15 23:34 发表
协议清楚了,不过感觉还是复杂,主要是不知道怎么搞出一个hid手柄设备。。。。。

现在准备退一万步,直接用arduino micro把md手柄的输入转换成键盘输出。这样硬件上就不用动脑筋,直接把针脚接入arduinomicro即可。。。。

不过6键手柄的按键扫描比较复杂,暂时还想不出合适的方法,有没有类似的开源项目可以参考的?
用V-USB就可以实现。

Usb Retropad Adapter这个项目可以参考,去看我的项目Readme,References的第四个链接。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @VODKA  于 2017-8-15 23:53 发表
多谢了,俺之前也知道这个vusb,不过micro既然自带键盘功能,俺也不想搞那么复杂,准备先弄个简单的出来,再慢慢优化。。。。。

主要还是俺c语言基础几乎为零,只能边翻书边弄,好多程序都看不懂。。。。。

话说你第四个链接点进去貌似没有源代码。。。。。
我刚把电脑关了,有源码的,你再仔细找找,我就用了这个项目的xbox usb接口的代码。

另外,c语法本身不难,你如果用arduino来写的话包括编译环境、底层支持、库文件等等都大大简化了编程工作。我当时为了写ngc的接口还自学了一点汇编,在arduino的c代码里嵌asm,只不过不用的时候很快就忘了。

本帖最后由 only1onely 于 2017-8-16 00:09 通过手机版编辑

TOP

引用:
原帖由 VODKA 于 2017-8-16 08:53 发表
posted by wap, platform: Firefox
是这个链接吗?

http://www.brunofreitas.com/node/41


页面最后有一段话。。。。。

This project is Opensource/Openhardware. Anyone can download the sources and s ...
刚看了下,发现移到github了:https://github.com/bootsector/usb-retropad-adapter

ATMEGA8-16PU是比较常见的AVR/Arduino方案,特点就是便宜易用,网上能搜到的最小Arduino方案都是基于它。同时缺点也很明显,就是只有6KB的可用代码空间,所以我的代码已经无法再增加新的特性了,除非换成328p,但成本就高了,不值当。

TOP

引用:
原帖由 threek 于 2017-8-16 07:32 发表
posted by wap, platform: 小米
还有这样的转接器,延迟如何?我自己也非常想自学下如何用单片机做手柄转接器。毕竟DC的转接器很少见,且连大师都不做。
感觉不到延迟,单片机的频率是16Mhz,并且整个流程很简单没有复杂的处理,最大的瓶颈反倒可能是XBOX的USB接口。这方面我不专业,也可能说的不对。

我做这些纯粹是爱好驱动,所以至少现在不会考虑用这个牟利。我有8块多余的PCB,需要的话可以免费送,甚至我可以帮你焊上基础的元件,但我没有多余的芯片和手柄接口,这个得你自己想办法。

TOP

引用:
原帖由 VODKA 于 2017-8-16 09:14 发表
posted by wap, platform: Firefox
俺发现这个usb-retropad-adapter项目挺有想法的,先把其他主机的手柄统一转换成md手柄接口,然后再转到USB,这个方案很不错,两个原因:DB9接头最好买,DB9的端子足够多。。。。。 ...
这个项目以通用性优先,所以留给使用者的问题就是先要把所有手柄都转成DB9接头。

PCB打样10片起,价格看板子大小,我这个当时一共50不含邮费。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @一万个瓶盖  于 2017-8-16 11:22 发表
1、 换328或者168能玩的东西更多 要是换成贴片,便宜不少呢

2、你这个可能会碰了某人的面包。
第二条你还是编辑掉吧,别在这个帖子里引战了

TOP

posted by wap, platform: iPhone
引用:
原帖由 @VODKA  于 2017-8-16 10:46 发表
再请教下楼主,那个usb retropad adapter项目能不能直接用一块现成的arduino mini来实现?

另外C++的源代码怎么转换成arduino用的ino文件?

本帖最后由 VODKA 于 2017816 10:50 通过手机版编辑
可以先在面包板上用Arduino测试,哪种都行,只要io口足够。最后再根据自己的情况选择pcb如何设计。

那个项目我记得不是基于Arduino 的所以只能拷贝它的代码片段来用。

arduino用的是标准C的子集,c++我也不会啊。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @threek  于 2017-8-16 12:16 发表
如果要学会手柄转接制作,需要学习哪些东西?我只想自己diy出来一个手柄转接器。
我等下编辑下二楼吧,说说我自己的经历。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @RISC  于 2017-8-17 18:47 发表
看了楼主DIY的历程,很佩服!很激励!我决定把以前学得半途而废的AVR单片机继续学完。

楼主还是火车模型发烧友!我一个好友是火车爱好者,三年前我在嵌入式硬件设计的书上了解到DCC,遂打算和他一起把DCC的文档翻译成中文,后来他回老家去开淘宝店了,翻译计划就搁置了。楼主的DCC资料方便分享吗?
我在二楼更新了两张我做的dcc控制器的照片。14年初做的,还是冬天,用最土的感光蓝油法作的电路板,板子又大,光等着干透就用了三天。

资料我都是看的官方英文版的,没有做笔记,就一门心思制作了,为了验证整个流程。所以成果只有arduino代码和电路设计,dcc规范的实现都在代码里,只有一些注释。

你需要的话我可以打包发出来。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @RISC  于 2017-8-18 11:11 发表
楼主谦虚啦~你制作的DCC控制器,设计风格简练、布局工整、用料扎实、做工精湛,满满的工业极客范儿!我以前自制PCB是先在铜箔上铅笔画好线路,用透明胶带贴严实,美工刀刻线路,揭掉不要的透明胶,阳光下暴晒半小时以上,放到盐酸双氧水溶液里蚀刻(当年买不到三氯化铁)其实就是用那层胶来抗腐蚀,缺点是胶带重叠的地方不容易贴合紧密。后来在PCB厂看到可以用油性马克笔直接绘制线路然后蚀刻~这是我知道的最简便的方法了,画很细的线路可能有难度,比如贴片封装的IC。

楼主的DCC制作,建议投稿到《无线电》杂志,连载妥妥的。去年在杂志上看到 树莓派改造GB掌机的文章,不知是否本坛网友的大作~ DCC标准的文档我在这里看的 https://www.nmra.org/dccrpsstandards 有其他更简明的网络资料请交流~发现英文搜索太频繁了居然也会链接被重置

我在看AVR单片机的书是纯野生的C代码,比Arduino要低级一些;等把C语言温故一遍,再学arduino应该会容易。需要楼主的电路图和代码,请给百度盘链接,拜谢!
我下周要在广州待一礼拜,等我找时间整理下,回头通知你。

TOP

 17 12
发新话题
     
官方公众号及微博