zoukankan      html  css  js  c++  java
  • 74HC166与TPIC6A595分析(转)

    源:Atmega162串行外设接口SPI

    一、Atmega162的SPI接口基本概念与工作原理

    SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口。SPI主要使用4个信号:MOSI(master in slave out)、MISO(master out slave in)、SCK(串行时钟)、CS(片选)。其中SCK由主机产生,作为传输的同步时钟,控制所有的数据传输。主机和外设都包含一个串行移位寄存器。主机通过向自己的SPI串行寄存器写入一个字节来发起一次传输,然后通过MOSI信号线将数据传给外围设备,同时外设将自己移位寄存器中的内容通过MISO信号线返给主机。这样两个移位寄存器中的内容完成交换。也就是说,外设的写操作和读操作是同步完成的。在实际应用中,如果只进行写操作,则主机只需忽略收到的字节即可;如果主机要读外设的数据,必须发送一个自己来引发从机的传输,发送的这个字节可以是任意数据。

    二、SN74HC166与TPIC6A595

    SN74HC166 是8-BIT 并行加载移位寄存器。A~H为并行输入管脚,SER串行输入管脚,QH为输出管脚,SH/LD管脚用于设置并行加载和移位模式,CLK为同步时钟,控制数据传输。

    TPIC6A595是8-BIT移位寄存器。SER IN管脚串行输入数据, SER OUT管脚并行输出数据,  SRCK为串行移位的脉冲, RCK的上升沿将使数据并行输出到DRAIN0~DRAIN7。

    在电路中使用了4片74HC166的级联,采集32个IO点,使用3片595控制24个输出端口。电路如下图所示

                                     

    74H166数据采集

    595数据并行输出

    电路中SCK,OEN,IEN分别接Atmega162的SPI接口。

    三、SPI接口和外设之间的数据传输

    使用Atemga162的SPI接口传输数据,只要往其移位寄存器写入要发送的数据即可。

    1. void SPIMasterTransmit(unsigned char TranData)      
    2. {  
    3.   SPDR=TranData;                       //数据放入SPI寄存器中  
    4.   while(!(SPSR&(1<<7)));               //等待数据传输完毕  
    5. }  
    void SPIMasterTransmit(unsigned char TranData)    
    {
      SPDR=TranData;                       //数据放入SPI寄存器中
      while(!(SPSR&(1<<7)));               //等待数据传输完毕
    }
    

    使用3片595级联,可以并行输出3个字符的数据。先在3*8个CLK时钟脉冲下将要发送的数据移入595,最后在RCK的上升沿数据将并行充DRAINx口输出。

    1. OEN=0;  
    2. for(i=0;i<3;i++)  
    3.     SPIMasterTransmit(Data[i]);     
    4. OEN=1;  
    OEN=0;
    for(i=0;i<3;i++)
        SPIMasterTransmit(Data[i]);   
    OEN=1;

    使用4片74HC166级联,将4个字节的数据移位通过SPI发送给Atemga162。

    1. int i;  
    2. OEN=0;      //关闭SPI的输出;  
    3. IEN=0;      //控制74HC166处于并行加载数据模式  
    4. SPIMasterTransmit(0);//产生SPI数据传送的时钟,完成并行数据加载  
    5. IEN=1;      //控制74HC166处于移位模式          
    int i;
    OEN=0;      //关闭SPI的输出;
    IEN=0;      //控制74HC166处于并行加载数据模式
    SPIMasterTransmit(0);//产生SPI数据传送的时钟,完成并行数据加载
    IEN=1;      //控制74HC166处于移位模式        
    1. for(i=0;i<4;i++)  
    2. {  
    3.     SPIMasterTransmit(0);  
    4.     IOCELL[i]=SPDR;  
    5. }  
    6. IEN=0;  
    for(i=0;i<4;i++)
    {
        SPIMasterTransmit(0);
        IOCELL[i]=SPDR;
    }
    IEN=0;

    在最开始介绍了SPI的数据传输CLK需要主机发出,主机需要想移位寄存器写随意的一个数。因为我们只是需要采集输入.所以关闭SPI的输出即OEN = 0;

    四、总结

    当Atmega162只对外设进行读操作,我们通过写SPI移位寄存器来发出SCK,外设通过该时钟才能将数据交换给SPI移位寄存器。对于数字芯片74HC166和595的操作,以及移位寄存器、锁存器、触发器等基本概念有些模糊,先学习再下篇继续总结。

    源:74HC166与TPIC6A595分析

    一、功能介绍

    在上一篇中介绍了在电路中,我们将采集的外部32个IO点通过74HC166转换成串行,经SPI的MISO线传送给Atmega162;使用TPIC6A595将MOSI串行输出的3个字节数据转换成并行输出。

    二、74HC166使用方式介绍

    74HC166是8-BIT的并行加载移位寄存器。它的功能表如下图2.1,逻辑图如图2.2所示。

    图2.1:   74HC166功能表

    图2.2: 74HC166逻辑图

    1. 15管脚的输入通过2个反相器控制2个与门的输入,从而实现控制74HC166的并行输入模式或者移位模式。在功能表中可以看出,当SH/!LD置0,在CLK的上升沿,并行口a~h的数据将写入D触发器。
    2. SER管脚是串行输入口,当15管脚设置成1,74HC166出于移位模式,在CLK的上升沿SER的数据将写入D触发器,原先D触发器中的数据将移入下一个D触发器,最高位D触发器中的数据将输出。在8个时钟脉冲下完成8位D触发器数据的更新。
    3. CLK INH用于关闭CLK相当于74HC166的使能控制,CLR用于清除D触发器中的数据。
    三、TPIC6A595使用方式介绍

    TPIC6A595是一个8-BIT的串行输入,并行输出移位寄存器。其逻辑图如图3.1所示。

    图3.1

    SER IN为串行输入,在SRCK的上升沿数据移位输入D触发器。移位完成后,RCK上升沿将数据并行输出。G为TPIC6A595并行输出使能。SRCLR将清除D触发器中的数据。

    四、总结

    74HC166和TPIC6A595的移位时钟信号都接在Atmega162的SPI接口的CLK时钟线上。当SPI发送数据时,就会产生时钟用于和外围设备数据的发送和接收。

  • 相关阅读:
    WPF 碰撞检测
    设置完在Canvas的位置后,控件HitTest不响应的问题
    Comparing the Performance of .NET Serializers(zz)
    Converting Stream to String and back…what are we missing?
    C# 序列化(Serialize)与反序列化(Deserialize)ZZ
    如何:从代码创建 UML 类图(ZZ)
    nginx 502 bad gateway
    mysql innodb_buffer_pool_size mysql占用内存大小和主从复制并行线程数量
    lvreduce -L 1000M /dev/vg0/lv0 表示最后缩减至多大,不是减少了多大
    nginx 4层tcp代理获取真实ip
  • 原文地址:https://www.cnblogs.com/LittleTiger/p/4580281.html
Copyright © 2011-2022 走看看