搜索
bottom↓
回复: 40

求救:关于PS2鼠标方面的-kvm切换器

[复制链接]

出0入0汤圆

发表于 2011-4-19 14:48:59 | 显示全部楼层 |阅读模式
请问下有哪位高手研究过KVM切换器的!本人用M16跟几个74系列的开关IC做了个切换器!目前已经可以实现切换!我现在做的是4路切1路的产品,这个切换器的作用就是把4台主机的图象共用一个显示器,这样就节省了3个显示器和3套键盘鼠标,作用还是比较明显,方便特殊工作和测试!
但是有个问题就是:在windows系统中,PS2鼠标在电脑开机时要进行上电检测!如果检测不到,就不能使用该鼠标!所以目前我做的切换器中,只能先切换,再开机!故想请教,怎么可以先开机,然后再切换呢??不然测试时可以节约很多时间。

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

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

出0入0汤圆

 楼主| 发表于 2011-4-19 14:51:41 | 显示全部楼层
目前,我已经在程序里面加了KVM启动时进行各主机信号里的PS2鼠标上电检测,循环的!但是还是不行!可能延时没有处理好~

出0入0汤圆

发表于 2011-4-19 14:56:51 | 显示全部楼层
每台连接的电脑在上电时都需要MCU模拟键盘鼠标与电脑通信.这样电脑才会认为已经连接了键盘鼠标.
也就是说,在M16晨随时都需要监测每台电脑的PS/2信息.PC有请求就得回应

出0入0汤圆

发表于 2011-4-19 14:59:12 | 显示全部楼层
另外,如果你是在做产品,推荐你使用pericom的PI5C系列的信号切换IC.比74的好.

出0入0汤圆

 楼主| 发表于 2011-4-19 15:01:23 | 显示全部楼层
哦!谢谢2楼啊。请问下你的意思是不是要用单片机进行PC机与PS2键盘鼠标通信吗??目前我的MCU是用来控制模拟开关跟数字开关来进行按键切换用的!

出0入0汤圆

 楼主| 发表于 2011-4-19 15:02:06 | 显示全部楼层
我不是在做产品,只是公司内部测试用的  呵呵

出0入0汤圆

 楼主| 发表于 2011-4-19 15:06:47 | 显示全部楼层
下面是程序:
#include  "iom16v.h"
#define  XTAL   8
//8M晶振
unsigned char n=1;
int i;
unsigned int x=0;
void port_init(void)  //单片机初始化
{

PORTA = 0xFF;
DDRA  = 0xF0;//键盘鼠标时钟数据信号设置为输入,带上拉;HC244使能端全设置为输出,设置为高电平。
PORTB = 0xFF;//主机的PS2信号传送方向设置为输入,带上拉
DDRB  = 0x00;
PORTC = 0x00; //
DDRC  = 0x00;
DDRD=0XC6;   
PORTD=0XC6;//中断设置为输出;蜂鸣器设置为高电平输出。4053使能端设置为高电平输出。主机PS2信号
}

void delay1ms(void) //1ms 延时函数
{
unsigned int i;
for (i=0;i<(unsigned int)(XTAL*143-2);i++);
}
/*******************************************/
void delaynms(unsigned int n) //N ms 延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay1ms();
}
void BUZZER(void)   //蜂鸣器工作函数
{
   PORTD&=0xFD; //拉低蜂鸣器,使其工作;
   delaynms(200);
  // for(i=0;i<80000;i++);//延时0.5S,蜂鸣器响0.5S
   DDRD&=0XFD;
   PORTD|=0x02;//蜂鸣器停止工作。
   
}
void main(void)
{
    port_init();//BUZZER();  //cpu初始化
  while(1)
                {
                  if((PIND&0X20)==0X20) //检测第一路ps2信号
               {              
                PORTA&=0X7F;PORTD&=0X7F; delaynms(500);//选通第一路主机信号
                    port_init();//x++;  //选通第一路0.1S  然后关闭,统计次数x
               }
                             
                 if((PIND&0X10)==0X10)
                                 //检测第2路ps2信号            
                                 {              
                PORTA&=0XBF; PORTD&=0X7F; delaynms(500);
                     port_init();
               }
                             
             if((PIND&0X08)==0X08)   //检测第3路ps2信号
                    {              
                   PORTA&=0XEF;  PORTD&=0XBF; delaynms(500);
                         port_init();
                    }
                               
              if((PIND&0X01)==0X01)   //检测第4路ps2信号
                  {              
                  PORTA&=0XDF;   PORTD&=0XBF; delaynms(500);
                        port_init();
                  }
                                 x++;
                if(x>50) break;   //循环检测30次后  停止
                               
            }



  while(1)
  {
    if((PIND&0X04)==0)    //检查按钮是否按下
          {
           for(i=0;i<400;i++);   //延时
                 if((PIND&0X04)==0)   //检查按钮是否按下
                 {
                        n=(n+1)%4;     
                 }
      while(!(PIND&0X04));    //等待按钮弹上
          }
                 
           switch(n)
           {
            case 1: PORTA&=0X7F;PORTD&=0X7F;      //选通并显示第一个主机信号
                    PORTA|=0X7F;PORTD|=0X7F;break;
            case 2: PORTA&=0XBF;PORTD&=0X7F;
                            PORTA|=0XBF;PORTD|=0X7F;break;//选通并显示第2个主机信号
            case 3: PORTA&=0XEF;PORTD&=0XBF;
                            PORTA|=0XEF;PORTD|=0XBF;break; //选通并显示第3个主机信号      
            case 0: PORTA&=0XDF;PORTD&=0XBF;
                            PORTA|=0XDF;PORTD|=0XBF;break;//选通并显示第4个主机信号
           }
  }
   //*/
}



//主函数里面的第一个while是用来循环检测PS2鼠标键盘信号的,可是不起作用  呵呵

出0入0汤圆

发表于 2011-4-19 15:25:16 | 显示全部楼层
可能你的SCH设计的时候就没有考虑到可以单独对每一台PC进行通信.这样内部测试用用还可以.

出0入0汤圆

 楼主| 发表于 2011-4-19 15:43:05 | 显示全部楼层
麻烦楼上讲详细点咯!我原理图上面为了保险,我把PS2键盘鼠标的时钟线跟数据线都接了I/O口的

出0入0汤圆

发表于 2011-4-20 08:31:43 | 显示全部楼层
方不方便把SCH贴上来看看呢,从你的Code来看,好像MCU没有做与PC沟通的动作.全部靠键盘鼠标与PC沟通.
比如,主机发0xff的时候.你的MCU并没有回复0xfa,0xaa,而是键盘或鼠标在回复.

出0入0汤圆

 楼主| 发表于 2011-4-20 17:45:55 | 显示全部楼层
回复【9楼】cody
-----------------------------------------------------------------------
好的啊!!呵呵

出0入0汤圆

发表于 2011-4-20 19:17:39 | 显示全部楼层
Oh,No.ddb文件.公司現在已經禁止使用Protel.請轉成PDF吧.

出0入0汤圆

 楼主| 发表于 2011-4-20 23:35:26 | 显示全部楼层
回复【12楼】cody
-----------------------------------------------------------------------

原理图ourdev_632446M0XRWB.pdf(文件大小:51K) (原文件名:Protel Schematic.pdf)

出0入228汤圆

发表于 2011-4-21 05:46:30 | 显示全部楼层
这东西我用得多
用M16感觉是浪费了
一颗M8都大材小用

说穿了 就是  MCU要随时模拟出I2C通讯 给另外三台电脑,不能让电脑感觉到没有联键鼠。 联机那一台就靠鼠标键盘自已通讯

市面上的KVM 还能在键盘上 切换联机的电脑。

出0入0汤圆

发表于 2011-4-21 08:16:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-21 08:30:31 | 显示全部楼层
不好意思,不经常上网,所以回复得有点慢.

从SCH来看.每选中一台PC与KB,MC连接,其它三台就是完全断开的,这就导致问题了.
有一点很关键,PC在上电直到进入桌面,都随时会请求与KB,MC通信(接收数据,回复响应).如果通信Timeout,PC就有可能认为KB或MC是不存在的,并diasble相应的模块.一旦相应的模块被Disable,这时KBorMC再发任何信息都是无效的.

所以从你现在的SCH来看,只有一个办法:切换到相应的PC再开机(废话),因为你的MCU无法脱离KB,MC直接与PC通信.

个人观点,小心参考!

出0入0汤圆

 楼主| 发表于 2011-4-21 09:15:43 | 显示全部楼层
回复【16楼】cody
-----------------------------------------------------------------------

我现在做出来的产品就是只能先切换按键后再开那一路的主机啊!这样鼠标才能用啊!这2天试了下这种方法,请教下看能否行得通啊!就是说在切换的时候(按键按一下),用中断,在中断处理函数里面加(激活鼠标与单片机通信的程序(reset鼠标)),不知道行不行!我试了下,好像不行!

出0入0汤圆

 楼主| 发表于 2011-4-21 09:19:03 | 显示全部楼层
回复【14楼】wxws
-----------------------------------------------------------------------
用键盘切换的我也上网看到过,呵呵。我先按照你的思路去分析下哈  呵呵。
如果那样的话  岂不是要换个PCB板了啊

出0入228汤圆

发表于 2011-4-21 20:03:12 | 显示全部楼层
每个 键盘鼠标口的SCL与 DATA 在不激活时,应该由MCU接管

激活就直接连键盘鼠标

出0入0汤圆

 楼主| 发表于 2011-4-21 20:16:43 | 显示全部楼层
回复【19楼】wxws
-----------------------------------------------------------------------
谢谢你了
你的意思是PC端出来的PS2接口的SCL跟DATA接IO口吗??这样不是很浪费IO口啊??
或许还没有明白你的意思  呵呵

出0入0汤圆

发表于 2011-4-21 20:27:53 | 显示全部楼层
想请教一下市面的KVM切换器能把视频信号和鼠标、键盘信号通过网线传输出,这是什么原理呢?主要是VGA信号怎么转换再解调出来的?是用的专用芯片吗?

出0入0汤圆

发表于 2011-4-22 08:55:09 | 显示全部楼层
楼主的问题和我遇到的相似。

我的要求非常简单,三台电脑,平常时全部不供电,那台电脑先上电,就用那一台。但市售的 KVM 把我气得半死!
三台电脑,通过 KVM unit 连接。

如 KVM unit 由另外电源长期供电,如所有电脑都关上,它便会自动选中 #1路 PC。这时如我选任何非 #1路 PC 上电,它都不会自动转到刚上电的电脑。

如 KVM unit 平时不供电,它便会自动转到刚上电的电脑。但电脑进入 Windows 后,鼠标不动。所以每一次电脑上电数秒时,都需要人手重启电脑一次,鼠标才正常。

KMV unit 内有 PIC,所以我认为 PIC 的程式是写得太差劲了,在 PC BIOS 检查鼠标时,未能及时作出回应。

出0入0汤圆

 楼主| 发表于 2011-4-22 09:15:19 | 显示全部楼层
回复【21楼】srygg
-----------------------------------------------------------------------
呵呵,我也是第一次接触此类产品。用网线连接的没有接触过,呵呵  不好意思哦!!

出0入0汤圆

 楼主| 发表于 2011-4-22 09:18:26 | 显示全部楼层
回复【22楼】eblc1388
-----------------------------------------------------------------------
是啊!呵呵,我的也是这类杯具!不知道你有没有什么高招解决此类问题呢??就是在切换时进行电脑与鼠标通信吗??

出0入0汤圆

发表于 2011-4-22 09:31:45 | 显示全部楼层
>> 不知道你有没有什么高招解决此类问题呢?

没有呀。不过我在常用的 PC 内安装了一个自动重启电路,在上电后8秒自动重启电脑一次。 但并不是什么解决辨法,因为其中的一部 IBM ThinkCentre S50 PC,底板上的 Reset 接点我都找不到。

出0入0汤圆

 楼主| 发表于 2011-4-22 09:38:43 | 显示全部楼层
回复【25楼】eblc1388
-----------------------------------------------------------------------
哦  这样啊!  呵呵  我这个是要用来测试的,一般四台机器一起用的 ,所以要求能够随时任意切换啊!如果用在DOS下的话就足够了,但是在windows系统下,这样是不行的,切换后PC机联系不到鼠标跟键盘!!杯具啊

出0入228汤圆

发表于 2011-4-22 21:13:56 | 显示全部楼层
用网线的就高级了,有VGA捕捉功能 ,你想想吧,什么能实现就好。

市 面上只有老外的卖,国产的好象没见到。死贵



电路上想想办法,并不一定全部鼠标键盘IO都要连到MCU.我看LZ的原理图 器件用得很老道呀,想想办法。

出0入0汤圆

 楼主| 发表于 2011-4-26 09:26:10 | 显示全部楼层
回复【27楼】wxws
-----------------------------------------------------------------------
恩  好的  再想想办法吧  呵呵  谢谢了!

出0入0汤圆

 楼主| 发表于 2011-4-28 15:10:08 | 显示全部楼层
郁闷呢  还是不行啊!!

出0入0汤圆

 楼主| 发表于 2011-4-29 17:13:32 | 显示全部楼层
回复【2楼】cody
每台连接的电脑在上电时都需要mcu模拟键盘鼠标与电脑通信.这样电脑才会认为已经连接了键盘鼠标.
也就是说,在m16晨随时都需要监测每台电脑的ps/2信息.pc有请求就得回应
-----------------------------------------------------------------------
你好,请问下一个问题啊:就是说如果按照现在的接法。在程序里面加个中断,就是在切换的时候用MCU激活鼠标(发命令使其复位),鼠标给予应答后  这样能否用呢??
这样会不会把主机箱的PS2接口烧掉啊??

出0入0汤圆

 楼主| 发表于 2011-4-29 17:13:59 | 显示全部楼层
回复【27楼】wxws
用网线的就高级了,有vga捕捉功能 ,你想想吧,什么能实现就好。
市 面上只有老外的卖,国产的好象没见到。死贵
电路上想想办法,并不一定全部鼠标键盘io都要连到mcu.我看lz的原理图 器件用得很老道呀,想想办法。
-----------------------------------------------------------------------

你好,请问下一个问题啊:就是说如果按照现在的接法。在程序里面加个中断,就是在切换的时候用MCU激活鼠标(发命令使其复位),鼠标给予应答后  这样能否用呢??
这样会不会把主机箱的PS2接口烧掉啊??

出0入0汤圆

 楼主| 发表于 2011-4-29 17:14:18 | 显示全部楼层
回复【14楼】wxws
这东西我用得多
用m16感觉是浪费了
一颗m8都大材小用
说穿了 就是  mcu要随时模拟出i2c通讯 给另外三台电脑,不能让电脑感觉到没有联键鼠。 联机那一台就靠鼠标键盘自已通讯
市面上的kvm 还能在键盘上 切换联机的电脑。
-----------------------------------------------------------------------
你好,请问下一个问题啊:就是说如果按照现在的接法。在程序里面加个中断,就是在切换的时候用MCU激活鼠标(发命令使其复位),鼠标给予应答后  这样能否用呢??
这样会不会把主机箱的PS2接口烧掉啊??

出0入0汤圆

 楼主| 发表于 2011-4-29 17:14:54 | 显示全部楼层
回复【22楼】eblc1388
楼主的问题和我遇到的相似。
我的要求非常简单,三台电脑,平常时全部不供电,那台电脑先上电,就用那一台。但市售的 kvm 把我气得半死!
三台电脑,通过 kvm unit 连接。
如 kvm unit 由另外电源长期供电,如所有电脑都关上,它便会自动选中 #1路 pc。这时如我选任何非 #1路 pc 上电,它都不会自动转到刚上电的电脑。
如 kvm unit 平时不供电,它便会自动转到刚上电的电脑。但电脑进入 windows 后,鼠标不动。所以每一次电脑上电数秒时,都需要人手重启电脑一次,鼠标才正常。
kmv unit 内有 pic,所以我认为 pic 的程式是写得太差劲了,在 pc bios 检查鼠标时,未能及时作出回应。
   

-----------------------------------------------------------------------
你好,请问下一个问题啊:就是说如果按照现在的接法。在程序里面加个中断,就是在切换的时候用MCU激活鼠标(发命令使其复位),鼠标给予应答后  这样能否用呢??
这样会不会把主机箱的PS2接口烧掉啊??

出0入0汤圆

发表于 2011-4-30 09:39:34 | 显示全部楼层
楼主的不是切换出问题,而是第二部PC上电时看不见键盘及鼠标。这问题不难解决,很多贵一点的KVM 都能做到,方法就如【16楼】cody 所说一样。如果不是产品,买一个市售的便成。

但4部PC一同上电均能正常进入Windows桌面,而鼠标都正常的 KVM unit,我未遇上过,或者其它朋友的 KVM unit 可以做得到。

出0入0汤圆

 楼主| 发表于 2011-5-1 21:32:59 | 显示全部楼层
回复【34楼】eblc1388
楼主的不是切换出问题,而是第二部pc上电时看不见键盘及鼠标。这问题不难解决,很多贵一点的kvm 都能做到,方法就如【16楼】cody 所说一样。如果不是产品,买一个市售的便成。
但4部pc一同上电均能正常进入windows桌面,而鼠标都正常的 kvm unit,我未遇上过,或者其它朋友的 kvm unit 可以做得到。
-----------------------------------------------------------------------

恩 是的啊  不是切换的问题  而是切换后鼠标识别不了啊  呵呵

出0入228汤圆

发表于 2011-5-1 23:02:29 | 显示全部楼层
回复【34楼】eblc1388
楼主的不是切换出问题,而是第二部pc上电时看不见键盘及鼠标。这问题不难解决,很多贵一点的kvm 都能做到,方法就如【16楼】cody 所说一样。如果不是产品,买一个市售的便成。
但4部pc一同上电均能正常进入windows桌面,而鼠标都正常的 kvm unit,我未遇上过,或者其它朋友的 kvm unit 可以做得到。
-----------------------------------------------------------------------

市 面上一直就有。
你TB搜:CKL-84A

出0入0汤圆

 楼主| 发表于 2011-5-3 08:49:25 | 显示全部楼层
回复【36楼】wxws
回复【34楼】eblc1388  
楼主的不是切换出问题,而是第二部pc上电时看不见键盘及鼠标。这问题不难解决,很多贵一点的kvm 都能做到,方法就如【16楼】cody 所说一样。如果不是产品,买一个市售的便成。  
但4部pc一同上电均能正常进入windows桌面,而鼠标都正常的 kvm unit,我未遇上过,或者其它朋友的 kvm unit 可以做得到。
-----------------------------------------------------------------------
市 面上一直就有。
你tb搜:ckl-84a

-----------------------------------------------------------------------
谢谢  呵呵  但是还是想自己弄出来好些  现在尝试一下  单片机与鼠标通信  然后单片机与主机通信   看能否成功

出50入4汤圆

发表于 2011-5-24 21:57:14 | 显示全部楼层
解决没,这东西我也在做

出0入0汤圆

 楼主| 发表于 2011-5-25 10:44:46 | 显示全部楼层
回复【38楼】zhuyi25762
解决没,这东西我也在做
-----------------------------------------------------------------------
还没有解决PS2通信。现在只能将就着用,机械地按那个按钮!如果用Windows的话就先切换再开机!dos系统下的话可以随意切换的。如果你解决了指点下我啊  呵呵

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-15 22:47

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

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