搜索
bottom↓
回复: 9

[YJGQDD]原创:分享1个IO读取最多2个74HC165软硬件设计

[复制链接]

出70入145汤圆

发表于 2017-7-28 22:05:03 | 显示全部楼层 |阅读模式
       之前觉得可以实现,想了几天经历了想法,编程,飞线,重新设计PCB,SMT,调试,断断续续整了1个多月有了这个帖子。
       先直接原理图和代码
      
为了省打样费并且很多电路也就调试1次,所以10多个电路放一块10X20cm的板子上直接PCB+SMT。回来自己补器件和切割了。




上面的PL,CP,Q7按照NXP74HC165命名,每家都不一样。
1:一般都是上电时读1次拨码开关就可以了。所以读取时把中断关闭,防止处理完中断回来放电时间或充电时间长造成出错。
2:程序流程;改下Xbit816就是对应都8bit16bit
/**改为读32bit*/
u32 OneIO(void)
{
   u8 i;
   u32 dat;
   dat=0;
     //1IO默认输出高电平   
   SET_IO_OUT;
   IO_High;
   Delay100us();
   //2:长时间低电平,给PL一个低电平。
   IO_Low;
   Delay10ms();
   //3:IO输出1,短延时。这时PL为高电平,CP还是低电平,Q7输出数据
   IO_High;
   Delay10us();
   //4:IO设为输入,短延时后读IOIO的数据被Q7控制)
   SET_IO_IN;
   Delay10us();
   dat=Read_IO;
   //5:IO输出1,长延时,确保CP=1
   SET_IO_OUT;
   IO_High;
   Delay10ms();
   for(i=0;i<Xbit-1;i++)
    {
       //6:IO输出0,短延时
       IO_Low;
       Delay10us();
       //7:IO输出1,短延时
       IO_High;
       Delay10us();
       //8:IO设为输入,短延时下后读IOIO的数据被Q7控制)
       SET_IO_IN;
       Delay10us();
       dat=dat<<1;
       dat|=Read_IO;
       //9:IO输出1,长延时,确保CP=1
       SET_IO_OUT;
       IO_High;
       Delay10ms();
    }
   return dat;
}
示波器波形:



本帖子中包含更多资源

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

x

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出70入145汤圆

 楼主| 发表于 2017-7-28 22:08:27 | 显示全部楼层
1:可以保证读取1片,8bit  74HC165没问题
2:读取2片74HC165注意第二片的D7不用。从D6开始为bit7,最后的DS为bit0。不知道为什么D7数据发出去后移位到第一片不能被正确读取。
3:读取3片或4片我自己测试了下发现除了开始的2片数据正确为,后面的数据没规律,我也搞不定,说以这个方案适合读1片,最多读2片。
4:这个电路的起因是有网友发帖如何1个IO读取8位拨码开关。https://www.amobbs.com/thread-5675795-1-1.html   这个网友打算采用ADC的方式。后面的人回帖中提到彩电的单ADC按键不灵的问题,因为我很久之前也采用扫描按键的方式读取拨码开关,结果软件人员发现每一列中有1个拨码导通可以被识别,2个及以上不行,我这才发现拨码开关因为会有多个导通的情况与按键阵列的不同。后来是每个拨码开关加二极管解决的。所以那个帖子我决定使用74HC165并转串,每1bit分别读取的方式。其他方式可靠性和复杂程度都是个问题。当时想到是论坛上cowboy前辈吧,提出过单IO操作1602液晶。所以朝着这个方向设计,想了几天最后确定方案。
5:第一次验证采用飞线把STM8S的核心板和另外1块带74HC165的板子连起来调试,飞线长大概10cm的样子。数据虽然能够读上来,但是是不是出错,并且没什么规律,后来论坛上搜了下,有人也提到飞线的原因,直接打板调试没问题,所以后来放到第三期的设计中一起拼板了。

出70入145汤圆

 楼主| 发表于 2017-7-28 22:11:07 | 显示全部楼层
额外分享电路:IIC中使用SDA顺带复位器件
上次参加了力创的比赛,比赛题目是给STLINK加显示,测量等。以后就叫STLINK伴侣好了。里面使用STM8S003 IO不够用了,直接把OLED的复位线接VCC结果上电复位不正常。采用RC后可以正常工作,但是为了可靠还是打算程序中IO复位下OLED。因此设计实用SDA复位。查了下SCL为高时,SDA从低到高是STOP。所以逻辑上也没问题

最后整个STM8S003的测试工程打包上传。使用iar
收工。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2017-7-28 22:43:25 | 显示全部楼层
太复杂了,直接595送0b11111110,把0循环移位后面再补1送过去,Q0~Q7输出端直接接按键然后到IO,怕输出短路的,串联二极管

出70入145汤圆

 楼主| 发表于 2017-7-28 22:48:30 来自手机 | 显示全部楼层
ljy99731 发表于 2017-7-28 22:43
太复杂了,直接595送0b11111110,把0循环移位后面再补1送过去,Q0~Q7输出端直接接按键然后到IO,怕输出短路 ...

一个io既驱动595,再把数据读回来?

出0入0汤圆

发表于 2017-7-28 23:33:45 | 显示全部楼层
以前论坛有一个厉害的

成功了!任意2个io直接驱动LCD1602,并且不需外加芯片
https://www.amobbs.com/thread-4301955-1-1.html

出0入0汤圆

发表于 2017-7-29 08:47:30 | 显示全部楼层
hailing 发表于 2017-7-28 22:48
一个io既驱动595,再把数据读回来?

当然可以,如果595也做显示,那么在读按键时候关掉段选即可

出70入145汤圆

 楼主| 发表于 2017-7-29 08:49:20 来自手机 | 显示全部楼层
xiaowu191 发表于 2017-7-28 23:33
以前论坛有一个厉害的

成功了!任意2个io直接驱动LCD1602,并且不需外加芯片

是这个。这个是串转并的应用。使用分立器件并转串我还想不出怎么设计,先上门电路了。

出70入145汤圆

 楼主| 发表于 2017-7-30 14:39:13 来自手机 | 显示全部楼层
ljy99731 发表于 2017-7-29 08:47
当然可以,如果595也做显示,那么在读按键时候关掉段选即可

能贴下一个io操作595并读取拨码开关的电路图吗?

出0入0汤圆

发表于 2017-7-30 15:37:32 | 显示全部楼层
本帖最后由 ljy99731 于 2017-7-30 15:43 编辑
hailing 发表于 2017-7-30 14:39
能贴下一个io操作595并读取拨码开关的电路图吗?


拨码开关公共脚由gnd接io就行了,修正一下,因为有多个开关同时打开的情况,要串联二极管,负极接Qx,正极接拨码开关
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 23:02

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

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