搜索
bottom↓
回复: 35

PS2手柄的STM32驱动源代码(亲测可用)

[复制链接]

出0入0汤圆

发表于 2014-4-4 20:35:34 | 显示全部楼层 |阅读模式
最经做国创买了一对32的舵机控制板  正好顺便买了一个PS2的手柄  当然是中国山寨的sony的   你懂得    早就想玩玩这个东西 用它来控制四轴省买遥控了   可是PS2的通信协议传输数据的时序是啥   自己对这个原来还真没有研究过   这下我可犯难了
之后当然是去谷歌百度搜了   结果是搜到一些资料  也哟一些是讲PS2鼠标键盘的   和手柄完全不一样   将PS2手柄的有一个帖子不错
http://hellorobot.blog.163.com/blog/static/185444129201362084945855/
淡然还有别的   你上谷歌一搜就有了    不过讲的都只是泛泛的一讲  看完差不多就能明白   可是要写程序时还是有困难通信时的时序咋整  ?  难道让我买个逻辑分析仪来弄?
我一看没有源代码也就没往下看   总想找到一个有源代码的帖子  自己改革IO口i就行的那种帖子   可是我基本上没哟找到   回过头来就直接看协议吧   有些不懂的地方
后来又去谷歌   结果谷歌没有找到  要不上一下百度   我有这儿几次经历  谷歌找不到的资料百度竟然找到了 呵呵   你别说  好真哟一个大发现   一个论坛上有人说2003年的某一期的电子世界杂志上有过一篇关于该方面的文章
我就马上找来看了一下  他说有源代码   没找到   自己凭着理解写了一份驱动   结果不行   后来又是在百度上找到了那份代码是51上的  和自己的比对了一下  就是时序没弄好不知道该延迟多长时间的高低电平自己有修改了一番  结果好了成功了  
最后还是有一个bug  协议上说传输数据时是先传低位再传高位  可是我先接收低位后    最终得出来的那个字节刚好和协议上相反也就是说我应该先接受高位   但是我把程序改成先接受高位的了  收到的数据却不对了
也不知道咋回事   估计是国产山寨的原因吧  还有按键不是特别灵敏 遥感很坑  划几下就满量程了  离边界还有一般距离呢  也是山寨的原因吧  但是山寨的便宜啊  还能用吧
总结出了几点教训   不要想着天上掉馅饼的事对不起一般是没有的 No pain  No gain!!
                            我写驱动到最后弄好一共也就一天左右的时间   之前算是找过资料但是没有咋看  基本上没有实际进展  所以要学会坚持   才有可能有成绩  搞硬件软件都是这样  不坚持啥都做不成
                            我昨天下午写好第一份后  晚上调试到1点  竟然有一个不可思议的错  就是初始化IO口的时候  没有起作用  后来把led的IO初始化复制过来竟然可以了   两段代码都是一样的啊  奇怪啊

之前在坛子里以及其他网站 论坛呢都没有找到PS2的驱动代码   在此我特地上传  发扬开源精神  据说这个协议值几十万美金呢   希望的挂昂达朋友都发扬开源精神  共同促进共同提高


有几点要说明  我只是用到了6跟线   ACK没哟用到  没什么用也
工程的板子是 STM32F103VET6 开发环境是开源的COIDE 谷歌一下就有了 自己安装一个吧  很好使的   还能单步调试呢   keil可不行  所以说开源很强大啊   
没有做过多的数据处理  只是采集数据  进行了简单的处理  大家可以根据自己的需要来移植修改
没有遥控的孩子们可以用游戏的手柄来玩了   最后祝大家用的愉快  不懂得可以来问我

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2014-4-4 20:48:32 | 显示全部楼层
传错了  那个不是51的例程是杂志内容  再传一遍

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-4-4 21:02:09 | 显示全部楼层
支持 有木有PS3的,我对那个比例的油门感兴趣。。

出0入0汤圆

发表于 2014-4-5 12:50:03 | 显示全部楼层
谢谢楼主的共享

出0入0汤圆

发表于 2014-4-5 12:51:40 | 显示全部楼层
很犀利啊~!!!支持~!!

出0入0汤圆

 楼主| 发表于 2014-4-8 21:54:44 | 显示全部楼层
majianjia1991 发表于 2014-4-4 21:02
支持 有木有PS3的,我对那个比例的油门感兴趣。。

只有2的   没买3  以后买了的话会开源出来的

出0入46汤圆

发表于 2014-4-8 23:13:00 来自手机 | 显示全部楼层
顶楼主!楼主的精神值得学习

出0入0汤圆

发表于 2014-4-8 23:27:23 | 显示全部楼层
sony PS2 手柄
还是
PC的ps2接口手柄

出0入0汤圆

发表于 2014-4-8 23:40:40 来自手机 | 显示全部楼层
是不是可以随意放大招了

出0入0汤圆

发表于 2014-4-9 08:24:00 | 显示全部楼层
呵呵这个不错,收藏了,感谢楼主

出0入0汤圆

发表于 2014-4-9 08:26:08 | 显示全部楼层

出0入0汤圆

发表于 2014-4-16 00:35:35 | 显示全部楼层
谢谢了,明天看看好不好用吧!!!!!!!

出0入0汤圆

发表于 2014-4-16 08:23:31 | 显示全部楼层
看看这个东西http://www.hezimm.com/?p=912

出0入0汤圆

发表于 2014-4-16 09:49:29 | 显示全部楼层
楼主,单片机移植后有问题啊!!

出0入0汤圆

发表于 2014-4-16 17:03:10 | 显示全部楼层
楼主看看有什么问题吧:
#include<reg52.h>
#define  uchar unsigned char
#define  uint  unsigned int
#define  time  100

uchar  HAND;                       
uchar  keybuf0;  //手柄按键编码存储单元
uchar  keybuf1;
uchar  RES[8];               
uchar   t=0;

sbit  DAT=P3^0;
sbit  CMND=P3^1;
sbit  ATT=P3^2;   //手柄控制信号   
sbit  CLK=P3^3;                  
                 
                    


void delay_1ms(uchar k);
void key_scan();
void psout();
void psinout();
void delay(uchar k) ;
void key_function();


void main()
{
    while(1)
    {
   
                delay_1ms(1);
    key_scan();
                delay_1ms(1);
                                
               
    key_function();    //各个按键对应的功能
    }
}

void key_function()

{
               
                        
P0=keybuf0;                                                //RES[3]%256;
P1=keybuf1;                                                //RES[4]%256;

delay(5);
}


    void key_scan()//键扫描
{
    t=0;
    ATT=0;         //主机读手柄先拉低ATT
    HAND=0x01;     //主机发送开始命令
    psinout();     //0xff
    delay(5);
               
    HAND=0x42;     //主机发送请求数据命令
    psinout();     //0x41:手柄返回请求应答信号
    delay(25);
               
    /*psout();       //0x5A
    delay(25);
               
    psout(); //keybuf0(空0xff)  //手柄返回按键编码第一字节
    delay(25);
               
    psout(); //keybuf1(空0xff)  //手柄返回按键编码第二字节*/
               
                HAND=0x00;     //主机发送请求数据命令
    psinout();     //0x41:手柄返回请求应答信号
    delay(25);
               
                HAND=0x00;     //主机发送请求数据命令
    psinout();     //0x41:手柄返回请求应答信号
    delay(25);
               
                HAND=0x00;     //主机发送请求数据命令
    psinout();     //0x41:手柄返回请求应答信号
    //delay(25);
               
    keybuf0=RES[3];              
    keybuf1=RES[4];
    delay(10);
               
    ATT=1;
}


    void psout()//主机接收子程序            
{
    int j,k;
    unsigned char duf=0;
    j=1;
    for(k=0;k<=7;k++)       //逐位发送
    {
       CLK=1;
       delay(5);
       CLK=0;
       delay(5);
       if(DAT==1)
          duf=duf+j;
       j=j*2;
       CLK=1;
       delay(5);
     }
    RES[t++]=duf;
                //if(t==6)t=0;
}

  void psinout()//手柄发送子程序
{
    uchar buf,duf=0;
    uchar i,j=1;
    buf=HAND;
    for(i=0;i<=7;i++)     //逐位接收     
    {
     CLK=1;
     delay(5);
     if(buf&0x01)
        CMND=1;
     else
        CMND=0;
     buf=buf>>1;
     CLK=0;
     delay(5);
     if(DAT==1)
        duf=duf+j;
     j=j*2;
     CLK=1;
     delay(5);
    }
    RES[t++]=duf;
}


    void delay(uchar k)         
{
   uchar i;
   for(i=0;i<k;i++);
}




void delay_1ms(uchar k)
{
   do
   {
    TMOD=0x01;
    TH0=-(300/256);
    TL0=-(300%256);
    TR0=1;
    while(!TF0);
    TF0=0;
   }while (k--);
         TR0=0;
         TMOD=0x00;
}


出0入0汤圆

发表于 2014-4-16 17:04:26 | 显示全部楼层
数据偶尔能够成功,大部分是不成功的,而且必须复位,很奇怪。

出0入0汤圆

发表于 2014-4-16 17:04:59 | 显示全部楼层
用的单片机是AT89S52
麻烦帮忙看看,谢谢了

出0入0汤圆

发表于 2014-4-16 17:05:41 | 显示全部楼层
hemeizhi 发表于 2014-4-16 08:23
看看这个东西http://www.hezimm.com/?p=912

这个东西看了就很贵。。。。。买不起啊!!!

出0入0汤圆

发表于 2014-4-16 17:06:57 | 显示全部楼层
楼主,要是有资料的话麻烦发一份行么?      1638574407@qq.com    谢谢了!!!!

出0入0汤圆

 楼主| 发表于 2014-4-17 15:44:02 | 显示全部楼层
1638574407 发表于 2014-4-16 17:03
楼主看看有什么问题吧:
#include
#define  uchar unsigned char

读取数据的时序按照我的那个   读取的周期不要太快  我的事隔50ms左右  太快太慢都不好  这个你可以自己试试

出0入0汤圆

发表于 2014-4-17 18:45:32 | 显示全部楼层
本帖最后由 1638574407 于 2014-4-17 19:05 编辑
孤单片机器人 发表于 2014-4-17 15:44
读取数据的时序按照我的那个   读取的周期不要太快  我的事隔50ms左右  太快太慢都不好  这个你可以自己 ...


好的,能加个好友吗??我的qq是,,这个东东我一直都没有弄好,我的是无线的,不知道有没有问题,还有通信这个东西好抽象啊!!有时候能够成功,有时候不行,需要不断地复位才能实现,好麻烦的!!而且发现大家用这个的很少的,不知道为什么,这个东西要是用好了的话其实挺方便的!!谢谢了!!!1638574407

出0入0汤圆

发表于 2014-4-17 19:57:23 | 显示全部楼层
孤单片机器人 发表于 2014-4-17 15:44
读取数据的时序按照我的那个   读取的周期不要太快  我的事隔50ms左右  太快太慢都不好  这个你可以自己 ...

你的pdf下载不了啊!!!

出0入0汤圆

 楼主| 发表于 2014-4-19 16:33:53 | 显示全部楼层
1638574407 发表于 2014-4-16 09:49
楼主,单片机移植后有问题啊!!

有什么问题??

出0入0汤圆

发表于 2014-4-19 17:25:51 | 显示全部楼层

按键后收不到数据,更新很慢啊!!!!

出0入0汤圆

 楼主| 发表于 2014-4-19 17:28:12 | 显示全部楼层
1638574407 发表于 2014-4-19 17:25
按键后收不到数据,更新很慢啊!!!!

不会吧  你隔50ms读一次   你是买的山寨的手柄吗  我的是山寨的  按键也有点小问题

出0入0汤圆

发表于 2014-4-19 17:32:50 | 显示全部楼层
是山寨的啊!!!才30

出0入0汤圆

发表于 2014-4-19 17:34:08 | 显示全部楼层
会不会是驱动电路的问题,我就加了几个上拉电阻!!!

出0入0汤圆

 楼主| 发表于 2014-4-21 16:49:34 | 显示全部楼层
1638574407 发表于 2014-4-19 17:34
会不会是驱动电路的问题,我就加了几个上拉电阻!!!

我没加  不过可以试试  我遇到的最大的问题就是  读取的频率问题  按一次键  会读出好几次都显示同一个按键按下

出0入0汤圆

发表于 2014-4-21 18:19:06 | 显示全部楼层
孤单片机器人 发表于 2014-4-21 16:49
我没加  不过可以试试  我遇到的最大的问题就是  读取的频率问题  按一次键  会读出好几次都显示同一个按 ...

我已经弄得差不多了,但是还是有问题,主要是反应不灵敏,好像原来的问题是没有读出所有的数据造成的额,我只是读了5个数据,读了9个后就没事了!!!

出0入0汤圆

发表于 2014-4-21 18:35:18 | 显示全部楼层
谢谢楼主的共享

出0入0汤圆

 楼主| 发表于 2014-4-24 13:17:37 | 显示全部楼层
1638574407 发表于 2014-4-21 18:19
我已经弄得差不多了,但是还是有问题,主要是反应不灵敏,好像原来的问题是没有读出所有的数据造成的额, ...

是不是也有反映慢的现象   我这个一直有 估计是山寨的原因吧  读取的间隔我控制在了10ms左右也可以了

出0入0汤圆

发表于 2014-4-24 14:12:18 | 显示全部楼层
孤单片机器人 发表于 2014-4-24 13:17
是不是也有反映慢的现象   我这个一直有 估计是山寨的原因吧  读取的间隔我控制在了10ms左右也可以了 ...

这个东西大家玩的很少啊!!!有点坑了!!!!

出0入0汤圆

发表于 2014-4-24 15:11:35 来自手机 | 显示全部楼层
支持一下

出0入0汤圆

发表于 2014-4-25 08:43:06 | 显示全部楼层
顶楼主!楼主的精神值得学习

出0入0汤圆

发表于 2014-4-25 09:30:47 | 显示全部楼层
好东西   支持一个

出0入0汤圆

发表于 2015-1-15 21:10:40 | 显示全部楼层
现在正在研究用FPGA读手柄,过来学习学习
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 10:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表