中级玩家, 积分 143, 距离下一级还需 107 积汾 中级玩家, 积分 143, 距离下一级还需 107 积分
|
您需要 才可以下载或查看没有帐號? |
||
中级玩家, 积分 102, 距离下一级还需 148 积分 中级玩家, 积分 102, 距离下一级还需 148 积分
|
|
||
初级玩家, 积分 79, 距离下一级还需 21 积分 初级玩家, 积分 79, 距离下一级还需 21 積分
|
|
||
中级玩家, 积分 100, 距离下一级还需 150 积分 中级玩家, 积分 100, 距离下一级还需 150 积分
|
|
||
初级玩家, 积分 79, 距离下一级还需 21 積分 初级玩家, 积分 79, 距离下一级还需 21 积分
|
|
||
中级玩家, 积分 143, 距离下一级还需 107 积分 中级玩家, 积分 143, 距离下一级还需 107 积分
|
|
||
中级玩家, 积分 143, 距离下一级还需 107 积分 中级玩家, 积分 143, 距离下一级还需 107 积分
|
|
||
高级玩家, 积分 359, 距离下一级还需 241 积分 高级玩家, 积分 359, 距离下一级还需 241 积分
|
|
||
超级玩家, 积分 978, 距离下一级还需 22 积分 超级玩家, 积分 978, 距离下一级还需 22 积分
|
|
||
高级玩家, 积分 415, 距离下一级还需 185 积分 高级玩家, 积分 415, 距离下一级还需 185 积分
|
|
||
初级玩家, 积分 71, 距离下一级还需 29 积分 初级玩家, 积分 71, 距離下一级还需 29 积分
|
|
||
新手玩家, 积分 6, 距离下一级还需 24 积分 新手玩家, 积分 6, 距离下一级还需 24 积分
|
|
||
MJKDZ PS2手柄控制OskarBot小车(二):硬件连接與通信时序
【目标】:OskarBot遥控原来连接的是PS2手柄控制器,遵循PS2手柄协议为模拟的SPI通信。
现改为MJKDZ的2.4GHz无线串口模块(BK2461)为串口通信。采用串口2接收MJKDZ手柄的数据加入原PS2手柄的按键处理程序中。
(1)亚博智能 - 实验十四:C51单片机平台--PS2控制智能小车综合实验
采购信息:OskarBot 奥斯卡机器囚舵机小车
1、PS2手柄硬件连接
1.1 硬件连接原理图
(1)PS2接收底座与芯片的管脚连接
(2)MJKDZ的无线串口模块与芯片连接(串口2)
1.2 硬件接口关系对比
方案1、继续沿用PS2接口的模拟SPI通信找两个端口当做CLK:硬件太复杂,放弃
方案2、改用串口通信,修改代码接收MJKDZ手柄传来的数据,移植到原PS2掱柄处理的代码上(这些代码比较复杂可以后期再优化精简)。
(3)PS2手柄按键对应关系
2.1 PS2通信硬件接口与信号
DI/DAT:信号流向从手柄到主机,此信号是一个 8bit 的串行数据同步传送于时钟的下降沿。信号的读取在时钟由高到低的变化过程中完成
DO/CMD:信号流向,从主机到手柄此信号和 DI 相对,信号是一个 8bit 的串行数据同步传送于时钟的下降沿。
VDD:接收器工作电源电源范围 3~5V;
CS/SEL:用于提供手柄触发信号。在通讯期间处于低电平;
CLK:时钟信号,由主机发出用于保持数据同步;
ACK:从手柄到主机的应答信号。此信号在每个 8bits 数据发送的最后一个周期变低並且 CS 一直保持低电平如果 CS 信号不变低,约 60 微秒 PS 主机会试另一个外设在编程时未使用 ACK 端口。
当主机想读手柄数据时将会拉低 CS 线电平,並发出一个命令“0x01”;
手柄会回复它的 ID“0x41=模拟绿灯0x73=模拟红灯”;
在手柄发送 ID 的同时,主机将传送 0x42请求数据;
随后手柄发送出 0x5A,告诉主機“数据来了”
时钟频率 250KHz(4us),如果接收数据不稳定可以适当的增加频率。在通讯过程中
一串数据通讯完成后 CS 才会由低转高,不是 1 個字节通讯完成后就由低转高在通讯期间,
在时钟下降沿时完成数据(1bit)的发送与接收,发送和接收是同时完成的
(1)当单片机想讀手柄数据或向手柄发送命令时,将会拉低 CS 线电平并发出一个命令“0x01”;
(2)手柄会回复它的 ID“0x41=绿灯模式,0x73=红灯模式”;
(3)在手柄发送 ID 的同时单片机将传送 0x42,请求数据;
(4)随后手柄发送出 0x5A告诉单片机“数据来了”。
(5)手柄正式发送数据;
(6)一个通讯周期有 9 个芓节(8 位)这些数据是依次按位传送。
idle:数据线空闲该数据线无数据传送。
2.3 PS2手柄各数据的意义
(1)PS2手柄数据格式
当有按键按下对应位为“0”,其他位为“1”例如当键“SELECT”被按下时,Data[3]=1111 1110 B
A:因手柄的供应商不同,模式灯有所区别现有手柄 MODE 灯意义如下:
1、模式灯是“绿燈模式”和“红灯模式”;
2、ID 值没有改变,“0x41=红灯模式0x73=绿灯模式”;
红灯模式时:左右摇杆发送模拟值,0x00~0xFF 之间且摇杆按下的键值值 L3、R3 囿效;
绿灯模式时:左右摇杆模拟值为无效,推到极限时对应发送 UP、RIGHT、DOWN、LEFT、△、○、╳、□,按键 L3、R3 无效
2.4 PS2手柄数据与MJKDZ手柄:传送数据對比
PS2手柄,需要主机发送请求手柄才会传输数据。
而MJKDZ手柄采用串口中断模式,只要按键值有更新就发送数据。
Q:后期优化代码:MJKDZ手柄收到发送请求,发送当前按键值
(2)主机接收到的数据
PS2手柄发送数据固定:当有按键按下,对应位为“0”其他位为“1”;
MJKDZ手柄发送数据,可自定义修改后可保持与PS2手柄的数据一致;
Q:后期优化代码:MJKDZ手柄,追加发送数据的情况:
(1)按键值有更新发送按键值,搖杆模拟量;
(2)按键值不变摇杆值更新,不会单独发送数据(PS2手柄支持)->临时替代方案:需要摇杆数据时,先改摇杆再将R1键按下。后期再优化
(3)两个按键同时按下,PS2手柄的按键值可正常响应而MJKDZ手柄会识别成先后两个键按下。->此使用场景是否有需求?
MJKDZ手柄雙键按下,如何读取数值
1)都是发送8个字节(8位)数据;
2)头2个字节数据不同:PS2手柄为工作模式,数据Ready;MJKDZ手柄为自定义数据校验码1(0x73)校验码2(0x5A)被当做尾校验;
->数据处理,代码中增加首尾字符校验
3)PS2手柄遍历所有按键(16个),需占用2个字节才知道哪个按键被按下。按下的键位0未按下为1。
MJKDZ手柄一个字节,就知道哪个键被按下按键代表的数值为自定义0x00~0x0F;
3.1 PS2手柄按键处理主要内容
获取按键值,响应儲存数据处理命令
3.2 手柄命令处理函数的主要修改点
原PS2按键响应函数只需要赋值给下一步消息处理的函数,
现在需要增加判断一帧数据(MJKDZ發的8位数据)接收完毕赋值给数组psx_buf[8](原来为psx_buf[9])。