一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3616|回复: 8

[其他综合] 尝试用PC主板自带的串口驱动IO

[复制链接]
发表于 2013-1-18 19:28 | 显示全部楼层 |阅读模式
用PC主板自带的串口,指的是电脑主板上面的串口,RS232接口,输出正负12V,据说工业标准有输出正负24V的....不过工业使用RS232接口,拉几十米的线,感应电压
也有可能超过36V。
USB转串口的不可以用这个思路,因为不能响应10us的电平转换,usb串口会卡死掉。
用主板并口也可以用这个思路,并口输出是0-5V电平,不过数据线太粗,我不考虑使用。
主板串口输出的电压实际有正负12V到正负8V,1-2ma的电流,不怕烧主板的,可以适当使用。
串口的7,8脚。6,4脚可以当独立的IO输出/输入使用。
2,3脚也可以当独立的IO输出/输入使用,只是用了,就不能当平时的rs232通讯。
9脚,1脚可以当输入使用,1脚我没有用过,9脚我有时候接入外部5V电源,给单片机供电使用。

电脑端的程序,可以识别串口输入in功能的脚的状态,也可以设定输出out功能的脚的状态,也可以接收电平状态的中断触发。
如果一个in脚跟【一个out脚串联4.7K电阻】并联,就可以当作单片机的一个双向IO口。
这样串口可以模拟出【spi串行,74hc595芯片格式】【I2C格式,24CXX储存芯片】【1-Wire接口,DS18B20】【红外接收芯片】【旋转编码器,接收触发中断】。
速度快的话,弄PWM也可以,win97,98时代,就有dos下的程序,用PC串口模拟声卡的。
思路来源,参考了PonyProg下载器,发现人家可以用串口驱动SPI,下载AVR芯片,也可以驱动I2C,写入24Cxx芯片。
按照这个思路,先是弄了个串口红外接收的电路,计算出串口能识别多少时间间隔的状态,识别红外接收还是足够的,
后来弄DS18B20,花了点功夫。最后需要效验才能成功运用,因为PC的干扰很大,平时串口自身的干扰很大,运行程序也会另外干扰到。
最后实验做出的结论是,用串口供电,读取18b20,三线驱动是可以的,两线驱动识别不出来,串口设置IO状态的速度不够,18b20发送指令后不能立刻得到供电。
ds18b20 1.PNG
ds18b20 2.PNG
LED.png
PonyProg_DHT11.PNG
测试旋转编码器,只能用在电脑主板自带的串口.PNG
红外接收1.PNG
红外接收2.png
 楼主| 发表于 2013-1-18 19:29 | 显示全部楼层
本帖最后由 狗狗百里游 于 2013-1-18 19:55 编辑

程序是用Delphi编写的,用了Comport411f控件,Comport控件封装了串口的各种功能,用来搞串口通信很方便。
如果要用来控制10us级别的状态,就得注意一下。里面有TComLed控件,显示串口各个状态,用亮灯显示高低电平,
procedure TForm1.ComLed2Change(Sender: TObject; AState: TLedState);
begin
//  ComLed2.Invalidate;   //YUKI少了这行,就不能刷新 TComLed变化的图像
end;
但刷新图像会影响,判断时间的速度跟结果!!!

另一个编程的关键就是us级别的延时函数了。
function RDTSC: Int64; assembler;
asm                               //RDTSC是计算机硬件中的运行周期寄存器,不依赖系统,除非硬件出错
                                   //所以我打算RDTSC用来计算代码实际运行时间,
                                   //来优化代码实际能精确延时计时到多少us
    db $0F, $31  // opcode for RDTSC
end;

function RDQPC: Int64;
begin
  QueryPerformanceCounter(result); //QueryPerformanceCounter是取系统计算出来的。
                                        //是个固定值
                                        //所以可以推算出,在当前系统下,多核单核多线程的cpu实际用多少频率运行
end;
现在的PC系统不是win97时代了,cpu也是多核自动降频的,延时函数需要变通。

Yuki_RDTSC.pas代码里面有说明。

现在搭电路运行通过的有,红外接收电路,24Cxx,ds18b20,国产dht11(温度可以精确到个位数,湿度不准,乱跳),旋转编码器,可以识别正反步进。
SHT10传感器,人懒到现在还没有编写。
想通过LED发光管在负电压充电,然后在有光线环境中自放电的时间,当光敏管使用,用单片机可以识别,
但是用PC串口实际没有检测到LED的电容放电,估计是串口识别不出来微弱的电平。
电脑主板的串口估计是用RS232类型的芯片输出正负电平的,输入状态的电平识别,跟电平正负的设置,估计依赖芯片响应速度的。
现在没有办法测试用RDTSC延时函数在设置10us秒以下的时间,串口实际响应的时间是多少,有示波器条件的可以测试一下。
发这个帖子只是给大家一个思路,让大家平时在测试点小东西的时候,提供一点方便,这个是赶稿发布,一锅熟就行....
cportu(Rs232串口)_2013-1-18.rar (3.63 MB, 下载次数: 361)
回复

使用道具 举报

发表于 2013-1-18 19:42 | 显示全部楼层
有点意思!
只不过,“现在”的电脑,基本上没有自带串口了。
回复

使用道具 举报

 楼主| 发表于 2013-1-18 20:03 | 显示全部楼层
本帖最后由 狗狗百里游 于 2013-1-18 20:07 编辑

忘记说了,程序上的串口设置有,硬件串口,跟其他什么规格的串口,
只有硬件串口才能响应10us级别,跟电平中断触发。


如果是读取18B20的数据,1000ms处理一次数据,cpu其实不占多少,平均1%都不到。
但是打开主板串口,整个电脑会额外耗电多3W以上,用PC串口做数据收集,不太环保
回复

使用道具 举报

发表于 2013-1-18 21:17 | 显示全部楼层
顶一下,再看
回复

使用道具 举报

发表于 2013-1-18 22:00 | 显示全部楼层
commport控件底层方面的实现到什么程度,比如说能代理出中断么?我一般用moxa的Pcomm
SF现在打不开是正常啊,打的开是人品好
原来还有个镜像访问不受管制,现在也歇了
麻烦楼主简要说说
回复

使用道具 举报

 楼主| 发表于 2013-1-18 22:25 | 显示全部楼层
我用的是win系统的哦,
commport控件封装了串口操作,win系统串口操作很简单的,
串口一,串口二接口,win系统只当是一个文件,直接Write,ReadFile操作,
如果不计rs232芯片响应速度,只依赖cpu速度。

你要发送脉冲电平信号,延时函数才是关键。
回复

使用道具 举报

发表于 2013-1-19 13:48 | 显示全部楼层
嗯,确实想到了更小的延时使用嵌入汇编处理,可惜当年研究串口通讯的时候,汇编能力几乎为0
现在也不涉及这方面工作了,有空一定践行一下
BTW,你提到发光二极管的信息也很有用哦,现在有些低成本的学习型遥控器就是利用这个效应实现了红外接收,可能换成红外二极管电平水平会高一点。
回复

使用道具 举报

发表于 2013-1-20 05:56 | 显示全部楼层
思路很好,老式pc串口又有新作用
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-3 11:17 , Processed in 0.034133 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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