源: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发送数据时,就会产生时钟用于和外围设备数据的发送和接收。

74HC166与TPIC6A595分析(转)的更多相关文章

  1. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  2. 火焰图分析openresty性能瓶颈

    注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...

  3. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  4. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  5. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  6. 查看w3wp进程占用的内存及.NET内存泄露,死锁分析

    一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...

  7. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  8. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  9. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

随机推荐

  1. Android多线程下安全访问数据库

    http://zhiwei.neatooo.com/blog/detail?blog=5343818a9d4869f0310000de github 原文https://github.com/dmyt ...

  2. 激活OFFICE2010时,提示choice.exe不是有效的win32程序

    我在安装office2010破解版时,提示choice.exe不是有效的win32应用程序 删除choice.exe再激活,按提示找到目录删掉这个文件,需要设置显示隐藏文件夹

  3. 用MyEclipse自动生成hibernate映射文件和实体类

    创建数据库,创建相应的表 点击图标,选择MyEclipse Datebase Explorer 右击空白区域,选择new菜单,根据提示创建数据库连接,创建好后会显示你所创建的连接名,如图mysqldb ...

  4. zepto为什么不支持animate,报animate is not a function

    在zepto.min.js文件中搜索animate看有没有,如果没有就是没有加入animate的模块 解决办法,去github中打开src/文件夹,找到fx.js文件,把内容追加到zepto.min. ...

  5. iOS开发-正则表达式3种形式

    转至:http://www.cnblogs.com/GarveyCalvin/p/4250145.html iOS开发-正则表达式的使用方法 前 言:在表单验证中,我们经常会使用到正则,因为我们需要用 ...

  6. 素数路(prime)

    素数路(prime) 题目描述 已知一个四位的素数,要求每次修改其中的一位,并且要保证修改的结果还是一个素数,还不能出现前导零.你要找到一个修改数最少的方案,得到我们所需要的素数. 例如把1033变到 ...

  7. android 以不规则图片为边框切割另外图片

    转自:http://blog.sina.com.cn/s/blog_474928c90101dkvf.html 最近工作上遇到了一个将一个图片按照相框进行裁剪的问题,花了一个下午研究了下,在此整理一下 ...

  8. 国内apk加固的破解方法

    国内apk加固的破解方法 By Bob Pan 国内的apk加固技术都使用了将原有的dex隐藏, 在运行时解压, 并且通过修改app的类加载器的方式实现加固. 参考: AndoridAPK反逆向解决方 ...

  9. HDU 2897 邂逅明下(巴什博奕变形)

    巴什博奕的变形,与以往巴什博奕不同的是,这里给出了上界和下界,原先是(1,m),现在是(p,q),但是原理还是一样的,解释如下: 假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次外其他每次 ...

  10. Arduino IDE 添加DHT11传感器第三方库的方法

    由于Arduino本身没有DHT 11温湿度传感器的的头文件,单有第三方的库可以给我门使用.方法如下: Step 1:如果你已经下载了最新版的Arduino IDE就可以使用其自带的库管理器和版型管理 ...