登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

(DIY)AVR 90S2313制作PDA游戏手柄全过程!

作者:janeslee 栏目:单片机
(DIY)AVR 90S2313制作PDA游戏手柄全过程!
周六闲了一点,拿PDA玩了一阵傲气雄鹰,NND,破方向键实在是恼人,一气之下想自己DIY一个手柄玩玩。
搞了一下午,到晚上终于成功了。下面把详细制作过程汇报一下,也让AVR刚入门的或尚未入门的同学参考参考,老TX就不要踢了。
1、参考资料:
串口游戏手柄,顾名思义就是通过串口把按键数据发送到PDA,PDA上需要一个驻留的DRIVER,随时监控串口,与键盘同步及接收按键数据,并把按键数据映射产生按键键码。由于没有PDA上的CE编程经验,也觉得没必要搞那么复杂,就想利用现成的游戏手柄驱动,但找了半天,对于成品的游戏手柄无法获知其通讯协议,无从下手。后来搜到ThinkOutside公司的通用键盘驱动,并发现了一份技术资料,找到了突破口,参考资料如下:
a)http://www.splorp.com/pdf/stowawayhwref.pdf
  这篇文档为在IPAQ上移植LINUX时与stowaway键盘接口的驱动程序源代码,值得参考。

2、制作过程:
a) 在ThinkOutside公司网站下载驱动程序,在Microsoft WM2003模拟器上装,并将COM1仿真成WM2003设备串口,按stowaway接口方式把COM2接到COM1上,COM2用SSCOM32来驱动,通过在COM2发送HEX键码测试,成功的在WM2003仿真器中收到键码。
注:COM2的RTS到COM1的DCD,以模拟DCD同步脉冲

b) 通过模拟看到胜利的曙光,还磨蹭啥?动手呗,选型?当然再熟悉不过的AVR啦,焊板子啦!
。。。。。。。。。。。。。。。。折腾1小时左右
本来想找个现成手柄改的,可惜以前一个红白机手柄咋也找不到了:(

焊好的板子背面:

焊好的板子正面:

我的是dopod686,就直接焊了个22PIN插头。

c) 在PDA上装驱动,ThinkOutside通用驱动中文3.11版:

插上键盘,找到了!!!

打开wold,按键,出现A、S、D等我映射的FIRE1/2/3键码,OK,测试成功,下一步,开玩了!

在傲气雄鹰option中将开火、暂停等键映射到A/S/D即可,方向键本身就是映射为方向,无需修改。

3、DIY资源:
a)原理图:

图上的串口接口是5根线,已标注其含义,不同的PDA只需要将每根线接到对应的接口上即可,附DOPOD686接口:
------------------------------------
22PIN管脚  含义 对应JP1管脚
6                  DCD    3
9                  RTS     4
10                RXD    2
11                DTR    1
16               GND    5

b)程序,源代码,可扩展更多按键甚至制作完整的QWERTY键盘
(注:未经作者允许请勿用于商业应用)
// PPC2003 GamePad or KEYBOARD
// date: 06-7-8 17:46:41
// Target: AT90S2313
// Author: LayzerLee  MSN:janesleecn@hotmail.com

// HEADER file
#include <io2313.h>
#include <inavr.h>

// Definition & Macro
#define FALSE           0
#define TRUE            1
#define BTUP            PB7         // 上
#define BTRIGHT         PB6         // 右
#define BTLEFT          PB5         // 左
#define BTDOWN          PB4         // 下
#define BTF1            PD5         // Fire 1
#define BTF2            PD4         // Fire 2
#define BTF3            PD3         // Fire 3
#define DCD             PD2         // UART DCD 输出
#define TXD             PD1         // UART TXD 输出
#define RTS             PD0         // UART RTS 输入

#define BUP             0x80
#define BRIGHT          0x40
#define BLEFT           0x20
#define BDOWN           0x10
#define BF1             0x08
#define BF2             0x04
#define BF3             0x02
#define BRTS            0x01

#define FOSC            3579545L    // 晶振频率
#define BAUDRATE        9600L       // 波特率
#define TMR0FREQ        1000L       // Timer0 中断频率 1000Hz
#define TMR0CLKDIV      64L         // Timer0 分频比
#define KEYDEBOUNCE     30L         // 键盘去抖 30ms

#define SETB(p,b)       (p |= (1 << b))
#define CLRB(p,b)       (p &= ~(1 << b))
#define CHKB(p,b)       (p & (1 << b))

// GLOBAL variables
unsigned CHAR   gbSyncFlag,         // 已同步标志
                gbSync_Req,         // 同步请求标志
                gbKeyRefresh,       // 键码变化标志
                gBKeyDebounce,      // 去抖寄存器
                gBKeyCode,          // 键码
                gBKeyCode_Old,      // 主程序中存储的以前键码
                gBKeyCode_Save;     // 用于中断判
2楼: >>参与讨论
笑苍天
强人强文啊
抢个沙发,学习ing。

3楼: >>参与讨论
sballbobo
楼主,虚心的向你请教
楼主,我有几个虚心的问题想先您请教啊。怎样与你取得联系啊?

参与讨论
昵称:
讨论内容:
 
 
相关帖子
定点算术操作C函数库哪里找?
求助:我要测15~1500HZ的频率用什么方法好啊?
哪位大哥给个Atmega8的程序学习下??
DMX512的愚惑!下面是DMX512的协议
avr-gcc使用外部ram过程中的一些疑问?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号