极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 50028|回复: 18

【Arduino】108种传感器模块系列实验(124)---PS2接口模块

[复制链接]
发表于 2019-9-24 19:44:18 | 显示全部楼层 |阅读模式
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验一百二十四: PS2鼠标 键盘插座接口 PS2模块


本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2019-9-24 20:04:50 | 显示全部楼层
本帖最后由 eagler8 于 2019-9-24 20:22 编辑



PS/2接口
上古接口之一,PS/2接口曾经是最常见的鼠标接口,最初是IBM公司的专利,俗称“小口”。这是一种鼠标和键盘的专用接口,一种6针的圆型接口。但鼠标只使用其中的4针传输数据和供电,其余2个为空脚。PS/2接口的传输速率比COM接口稍快一些,而且是ATX主板的标准接口,当时应用最为广泛的鼠标接口之一,但仍然不能使高档鼠标完全发挥其性能,而且不支持热插拔。在BTX主板规范中,这也是即将被淘汰掉的接口。需要注意的是,在连接PS/2接口鼠标时不能错误地插入键盘PS/2接口(当然,也不能把PS/2键盘插入鼠标PS/2接口)。一般情况下,符合PC99规范的主板,其鼠标的接口为绿色、键盘的接口为紫色,另外也可以从PS/2接口的相对位置来判断:靠近主板PCB的是键盘接口,其上方的是鼠标接口。



根据维基百科的资料,1987年,IBM推出第三代PC:Personal System/2(即PS/2),虽然不是很成功,但它的许多创新(如1440KB的3.5英寸软盘格式、VGA的视频标准、PS/2键盘和鼠标接口)后来成为PC市场的标准。所谓的“PS/2接口”,其实就是山寨IBM的Personal System/2的接口,主要用于连接键盘和鼠标。和IDE接口一样,PS/2接口也快被淘汰了。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-24 21:13:07 | 显示全部楼层
PS/2通讯协议
PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。在相互传输中,主机拥有总线控制权,即它可以在任何时候抑制鼠标的发送。方法是把时钟线一直拉低,鼠标就不能产生时钟信号和发送数据。在两个方向的传输中,时钟信号都是由鼠标产生,即主机不产生通信时钟信号。 如果主机要发送数据,它必须控制鼠标产生时钟信号。方法如下:主机首先下拉时钟线至少100μs抑制通信,然后再下拉数据线,最后释放时钟线。通过这一时序控制鼠标产生时钟信号。当鼠标检测到这个时序状态,会在10ms内产生时钟信号。如图3中 A 时序段。主机和鼠标之间,传输数据帧的时序如图2、图3所示。2.2 数据包结构在主机程序中,利用每个数据位的时钟脉冲触发中断,在中断例程中实现数据位的判断和接收。在实验过程中,通过合适的编程,能够正确控制并接收鼠标数据。但该方案有一点不足,由于每个CLOCK都要产生一次中断,中断频繁,需要耗用大量的主机资源。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-24 21:26:11 | 显示全部楼层

PS/2接口的引脚定义
是第1针传数据,第2针闲置,第3针接地(负极),第4针接+5V电源,第5针是时钟,第6针也是闲置的。拆开PS/2接口的键盘,你会发现除了一张‘电路图’外,还有一块比豆腐大不了多少的PCB板。这块电路板上标有V、G、C、D四个焊点——V是Vcc电源,就是接电源正极,多数是接红线;G是地线,就是电源负极,多数是接黑线;C是时钟,有的接黄线,有的是绿线;D是数据,多数是绿线或者蓝线,也有黄线。颜色不靠谱,建议你先把负极和正极接好,然后把剩下的C、D两根线随便接上试试,不行再对调就好了。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 07:14:12 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 07:24:00 | 显示全部楼层


PS/2接口和USB接口的区别

PS2接口的特性:
1.物理连接:一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-DIN连接器的键盘则称之为PS/2键盘。其实这两种连接器都只有四个脚有意义。它们分别是Clock、Data、+5V和Ground。在PS/2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。PS/2键盘靠PC的PS/2端口提供+5V电源,另外两个脚Clock和Data都是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。
2.电气特性:PS/2通讯协议是一种双向同步串行通讯协议。
通讯的两端通过Clock同步,并通过Data交换数据。任何一方如果想抑制另外一方通讯时,只需要把Clock拉到低电平。如果是PC机和PS/2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS/2键盘发送数据,而PS/2键盘则不会抑制PC机发送数据。一般两设备间传输数据的最大时钟频率是33kHz,大多数PS/2设备工作在10~20kHz。推荐值在15kHz左右,也就是说,Clock高、低电平的持续时间都为40μs。

USB接口的优势:
1.可以热插拔。就是用户在使用外接设备时,不需要关机再开机等动作,而是在电脑工作时,直接将USB插上使用。
2.携带方便。USB设备大多以“小、轻、薄”见长,对用户来说,随身携带大量数据时,很方便。当然USB硬盘是首要之选了。
3.标准统一。大家常见的是IDE接口的硬盘,串口的鼠标键盘,并口的打印机扫描仪,可是有了USB之后,这些应用外设统统可以用同样的标准与个人电脑连接,这时就有了USB硬盘、USB鼠标、USB打印机等等。
4.可以连接多个设备。USB在个人电脑上往往具有多个接口,可以同时连接几个设备,如果接上一个有四个端口的USB HUB时,就可以再连上;四个USB设备,以此类推,尽可以连下去,将你家的设备都同时连在一台个人电脑上而不会有任何问题。

USB支持热插拨,而PS2接口不可以,所以论便捷性USB完胜PS2,其次就是鼠标USB接口的传输率比PS2要高一些,主要体现在游戏里的鼠标移动上,不过一般来说感觉不出来,至于键盘接口是USB或者是PS2那就没什么区别了,不过最主要还是USB支持热插拨,这点很重要,而且USB接口也是主流标准了,PS2已经完全失去意义了。包括价格上USB也比PS2贵不了多少钱,所以USB接口完胜。

但在键位组合上,PS/2可以实现全无冲突,USB下只能是最多6个可以同时按下。 USB键盘的一个数据包只有8个字节(为什么只有8个,这是因为协议规定,为什么协议这么规定,是因为早期的时候USB速度慢,使用中断传输一个包最大就8个字节),其中2个字节标记状态,其余6个字节用来记录当前按下或者弹起的按键的扫描码,所以,USB键盘最多同时描述6个按键的状态。

在稳定上,PS/2还是要好过USB的,当然USB的话虽没有PS/2的稳定,可有不错的扩展,如可以在USB的键盘中加入USB HUB。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 07:37:07 | 显示全部楼层

关于USB接口和PS/2接口转换
电脑中四根线USB接口,两边的两根是电源线,中间的两根是数据线。usb接口的4根线一般是下面这样分配的,需要注意的是千万不要把正负极弄反了,否则会烧掉usb设备或者电脑的南桥芯片:
黑线:gnd       电源负极
红线:vcc       电源正极
绿线:data+     信号正极
白线:data-     信号负极

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 07:53:34 | 显示全部楼层


此模块是由PS2接口转普通2.54MM接口,方便电脑键盘或鼠标与arduino连接。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 08:00:29 | 显示全部楼层

模块参数
工作电压:5V(DC)
接口:4PIN接口5V、GND、DAT、CLK
输出信号:数字信号
尺寸:21*17*17mm
重量:5.5g

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 08:06:35 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 08:08:25 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 10:33:08 | 显示全部楼层

根据图上的引脚把 PS/2 接口与 Arduino 连接起来,对应关系如下表。

5V :      - Arduino 5V out
Ground : - Arduino GND
Clock :    - Arduino Pin 3
Data :     - Arduino Pin 8

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 10:35:53 | 显示全部楼层
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百二十四: PS2鼠标 键盘插座接口 PS2模块
  4. 1、安装< PS2Keyboard.h>库
  5. (https://www.pjrc.com/teensy/arduino_libraries/PS2Keyboard.zip)
  6. 2、项目:在 Arduino 上使用 PS/2 键盘进行输入测试
  7. 3、PS/2 接口与 Arduino 接脚
  8. 5V :      - Arduino 5V out
  9. Ground : - Arduino GND
  10. Clock :    - Arduino Pin 3
  11. Data :     - Arduino Pin 8
  12. */
  13.    
  14. #include <PS2Keyboard.h>

  15. const int DataPin = 8;
  16. const int IRQpin =  3;

  17. PS2Keyboard keyboard;

  18. void setup() {
  19.   //keyboard.begin(DataPin, IRQpin, PS2Keymap_US);
  20.   keyboard.begin(DataPin, IRQpin, PS2Keymap_German);
  21.   //keyboard.begin(DataPin, IRQpin, PS2Keymap_French);
  22.   Serial.begin(9600);
  23.   Serial.println("International Keyboard Test:");
  24. }

  25. void loop() {
  26.   if (keyboard.available()) {
  27.     char c = keyboard.read();
  28.     Serial.println(c);
  29.   }
  30. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 10:37:46 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-25 10:46:41 | 显示全部楼层
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百二十四: PS2鼠标 键盘插座接口 PS2模块
  4. 1、安装< PS2Keyboard.h>库
  5. (https://www.pjrc.com/teensy/arduino_libraries/PS2Keyboard.zip)
  6. 2、项目:在 Arduino 上使用 PS/2 键盘进行输入测试(识别一些特殊按键)
  7. 3、PS/2 接口与 Arduino 接脚
  8. 5V :      - Arduino 5V out
  9. Ground : - Arduino GND
  10. Clock :    - Arduino Pin 3
  11. Data :     - Arduino Pin 8
  12. */
  13.    
  14. #include <PS2Keyboard.h>

  15. const int DataPin = 8;
  16. const int IRQpin =  3;

  17. PS2Keyboard keyboard;

  18. void setup() {
  19.   delay(1000);
  20.   keyboard.begin(DataPin, IRQpin);
  21.   Serial.begin(9600);
  22.   Serial.println("Keyboard Test:");
  23. }

  24. void loop() {
  25.   if (keyboard.available()) {
  26.    
  27.     // read the next key
  28.     char c = keyboard.read();
  29.    
  30.     // check for some of the special keys
  31.     if (c == PS2_ENTER) {
  32.       Serial.println();
  33.     } else if (c == PS2_TAB) {
  34.       Serial.print("[Tab]");
  35.     } else if (c == PS2_ESC) {
  36.       Serial.print("[ESC]");
  37.     } else if (c == PS2_PAGEDOWN) {
  38.       Serial.print("[PgDn]");
  39.     } else if (c == PS2_PAGEUP) {
  40.       Serial.print("[PgUp]");
  41.     } else if (c == PS2_LEFTARROW) {
  42.       Serial.print("[Left]");
  43.     } else if (c == PS2_RIGHTARROW) {
  44.       Serial.print("[Right]");
  45.     } else if (c == PS2_UPARROW) {
  46.       Serial.print("[Up]");
  47.     } else if (c == PS2_DOWNARROW) {
  48.       Serial.print("[Down]");
  49.     } else if (c == PS2_DELETE) {
  50.       Serial.print("[Del]");
  51.     } else {
  52.       
  53.       // otherwise, just print all normal characters
  54.       Serial.print(c);
  55.     }
  56.   }
  57. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 22:10 , Processed in 0.044086 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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