打印
[资料干货]

关于74hc165芯片使用问题一些经验分享

[复制链接]
518|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenyong123|  楼主 | 2024-1-9 17:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近PCBA生产在现货商手里采购了一批物料,PCBA过后,以前正常的发布程序无法正常工作。经检查,发现TI的SN74HC165DR芯片丝印与印象中的TI丝印风格不一样。于是找来之前购买的165芯片对比,发现丝印确实不同。TI的一号管脚指示一般是横杠,丝印中只有一个**图案,不会有TI字眼,而现货商提供的这片芯片,一号脚是圆点标识,丝印中印着TI两个字母。与现货商沟通,现货商一口咬定是产品批次问题。
然后我抓取波形分析,最终发现该芯片使用过程中,并行数据加载后,SH存取并行信号后,直接就输D7了,只需要7个CLK,就可以输出完整数据了。而TI的165芯片使用以及数据手册描述,都是并行数据加载后,需要8个CLK,才能将并行信号完整输出。
然后查找其他厂家74HC165数据手册,发现以NXP下安世的74HC165D,653就是并行数据加载后,7个CLK输出完整数据。
所以我的结论是,该芯片是国产不知名某芯厂贴标,由于74HC165两大主流厂商内部设计不一样,该贴片芯片厂商不管三七二十一,直接印大厂信息冒充进口的原因。
查了百度,只有NXP的代码,为了帮兄弟们日后设计时避雷,我将两家驱动贴出来,以下是两家驱动代码:
TI的SN74HC165DR两片级联
uint16_t HC165read(void)
{
    uint8_t i,k;
    uint16_t j, data2=0;
        HC165_CLKINH_SetLow();
    HC165_SH_SetLow();
    k=0;
    HC165_SH_SetHigh();
    for(i=0;i<16;i++)
    {
         HC165_CLK_SetLow();
         k=0;k=0;k=0;
         HC165_CLK_SetHigh();
         j = HC165_DATA_GetValue();
         //data2 = data2 << 1;
         data2 = (data2<<1)|j;
    }
    //hc165_data = data2;
    return data2;
}
NXP的74HC165D两片级联:
uint16_t HC165read(void)
{
    uint8_t i,k;
    uint16_t j, data2=0;
        HC165_CLKINH_SetLow();
    HC165_SH_SetLow();
    k=0;
    HC165_SH_SetHigh();
    data2 = HC165_DATA_GetValue();
    for(i=0;i<15;i++)
    {
         HC165_CLK_SetLow();
         k=0;k=0;k=0;
         HC165_CLK_SetHigh();
         j = HC165_DATA_GetValue();
         //data2 = data2 << 1;
         data2 = (data2<<1)|j;
    }
    //hc165_data = data2;
    return data2;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

109

帖子

0

粉丝