AVR单片机与串行AD的SPI接口设计
avr_isp制作

根据网上的资料整理制作的基于M8的USB接口的ASPISP下载线。
做了30几块,有30几位使用,除个别由于焊接问题,没有发现大的问题。
现提供全部资料。
资料中,已经增加了VISTA下的USBISP驱动程序。
现在在XP和VISTA 下都可以使用。
JTAG与ISP下载区别JTAG是Joint Test Action Group(联合测试行动小组)的缩写,是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。
JTAG用来对芯片进行测试的基本原理是在器件内部定义一个TAP(Test Access Port;测试访问口)通过专用的JTAG测试工具对内部节点进行测试。
标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
TMS:测试模式选择。
此引脚用来实现TAP 控制器各个状态之间的切换。
TCK:测试时钟。
JTAG 操作是与TCK 同步的。
TDI:测试数据输入--需要移位到指令寄存器或数据寄存器(扫描链)的串行输入数据。
TDO:测试数据输出-- 自指令寄存器或数据寄存器串行移出的数据。
现在,JTAG接口还常用于实现ISP(In-System Programmable;在线编程),对EEPROM、FLASH等器件进行编程和在线调试。
JTAG编程方式是在线编程,传统开发流程中先对芯片进行预编程再装到板上的模式因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。
AVR 的JTAG功能(只有部分型号才有)使得AVR的调试工作非常简单,可以通过JTAG 接口对Flash、EEPROM、熔丝位和锁定位进行编程。
使用AVR studio软件和JTAG硬件(AVR JTAG编程器,AVR JTAG仿真器)可以进行程序下载(亦即编程)和程序在线调试。
通过JTAG功能,工程师可以方便的观察各个寄存器的变化和程序的运行情况,十分适合单片机的学习与系统开发。
AVR单片机(C语言)项目开发实践教程项目十一 SPI串行总线应用

【任务1】 项目知识点学习
❖ 二、ATmega16单片机SPI接口控制与数据传输过程 2)SPI初始化及数据传送程序示例
下面将以ATmega16单片机为例说明如何将SPI设置为主 机,以及如何进行简单的数据传送。MOSI对应 ATmega16单片机PB5引脚,MISO对应ATmega16单片 机PB6引脚,SCK对应ATmega16单片机PB7管脚,SS对 应ATmega16单片机PB4管脚。
【任务1】 项目知识点学习
❖ 三、ATmega16 SPI接口相关的寄存器简单介绍 1)SPI控制寄存器-SPCR
• Bit 4 – MSTR: 主/ 从选择 MSTR置位时选择主机模式,否则为从机。如果MSTR为"1”,SS配置为 输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位。用户必须 重新设置MSTR 进入主机模式。 • Bit 3 – CPOL: 时钟极性 CPOL 置位表示空闲时SCK 为高电平;否则空闲时SCK 为低电平。 • Bit 2 – CPHA: 时钟相位 CPHA 决定数据是在SCK 的起始沿采样还是在SCK 的结束沿采样。
【任务1】 项目知识点学习
❖ 二、ATmega16单片机SPI接口控制与数据传输过程 2)SPI初始化及数据传送程序示例
(2)设置SPI为从机并进行简单的数据接收。
void spi_slaveset(void) { /* 设置MISO 为输出,其他为输入 */ DDRB = (1<<DDB6); /* 使能 SPI */ SPCR = (1<<SPE); } char spi_slavereceive(void) { /* 等待接收结束 */ while(!(SPSR & (1<<SPIF))); /* 返回数据 */ return SPDR; }
AVR单片机中的SPI接口

第2期
杨俊春, 等: AVR 单片机中的 SPI 接口
# 45 #
2 AT 45D081A 存储器的 SPI 接口
AT 45D081A 是在线可 编程的串 行 Flash 大 容量存储器芯片, 它使用同步串行通信接口 SP I, 用 3 根单独信 号线主入从出 ( M ISO) 、主出从入 ( M OSI) 、同步时钟( SCK ) 传送数据, 即可以实现 与单片机全双工通信. 采用这种节省 I/ O 引脚接 口的串行数据传送方式, 消除了对多条专用地址 线的需求, 简化了电路设计, 提高了系统的可靠 性, 降低了转换噪声, 减小了封装尺寸. 它的内部 存储器为新型结构的高性能 SPI 串行 F LASH 器 件, 具有低工作电压、节省时间、硬件写冲突保护 功能, 可防止发送时再次写入移位寄存器造成数 据丢失、具有页写操作方式等优点, 可通过程序控 制串行时钟的极性和相位, 与串行接口 SP I 的模 式 0 和模式 3 兼容, 实现与各种 SP I 芯片接口.
当 SPI 被使能时, M OSI、M ISO、SCK 和SS引 脚的数据方向, 按表 1 来配置.
引脚 M OSI M ISO SCI K
SS
表 1 SPI 配置
方向, 主 SPI 用户定义 输入 用户定义 用户定义
方向, 从 SP I 输入
用户定义 输入 输出
AVR 单片机的 SPI 有 3 个相关寄存器: 控制 寄存器 SP CR, 状态寄存 器 SP SR 和数据 寄存器 SPDR, 它们在内存中对应的地址依次为 0x2D~ 0x2F . SPCR 中各位的定义和功能描述如下:
摘
要: SPI 接口通讯主要用于单片机和外设以及单片机与单片 机之间的 高速数据传 送, 在 控制领域有 广
单片机开发 SPI串行外设接口实验(1)

本讲主要内容
1.SPI介绍 2.SPI配置步骤 3.硬件设计 4.软件设计
1.SPI介绍
1.1 SPI简介 SPI的全称是"Serial Peripheral Interface",意为串行外围接
口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主 要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处 理器和数字信号解码器之间。SPI是一种高速的,全双工,同步的 通信总线,并且在芯片的管脚上只占用四根线。
// Initialize SPI FIFO registers SpiaRegs.SPIFFTX.all=0xE040;//使能 FIFO,清除发送中断 SpiaRegs.SPIFFRX.all=0x204f;//使能 FIFO 接收 16 级深度 SpiaRegs.SPIFFCT.all=0x0;//清除 FIFO 计数器 SpiaRegs.SPICCR.all =0x000F;//复位 SPI,上升沿发送,下降沿 接收,16位数据 SpiaRegs.SPICTL.all =0x0006;// 无相位延时,主模式 SpiaRegs.SPIBRR =0x007F;//确定 SPICLK SpiaRegs.SPICCR.all =0x009F;//自测模式并从复位状态释放 SpiaRegs.SPIPRI.bit.FREE = 1;//自由运行
3.硬件设计
本实验使用到硬件资源如下: (1)D1 指示灯 (2)RS232 模块 (3)SPI
4.软件设计
本章所要实现的功能是:使用 SPI 实现数据的自发自收,通过串 口将收发的数据输出显示,并且 D1 指示灯闪烁,指示系统运行状 态。程序框架如下: (1)初始化 SPI 相关参数,开启 SPI 自测功能 (2)编写 SPI 收发函数 (3)编写主函数
单片机与外部设备的SPI接口设计与实现

单片机与外部设备的SPI接口设计与实现1.引言单片机与外部设备的通信是嵌入式系统设计中的重要环节。
SPI(Serial Peripheral Interface)是一种常用的串行通信协议,用于实现单片机与外设之间的数据传输。
本文将探讨单片机与外部设备之间的SPI接口设计与实现。
2.SPI接口简介SPI接口是一种同步的数据总线协议,通常由一个主设备和一个或多个从设备组成。
SPI接口包含四个信号线:时钟线(SCK)、主输出从输入线(MISO)、主输入从输出线(MOSI)和片选线(SS)。
通过时钟线的同步操作,主设备可以与从设备进行双向数据传输。
3.SPI接口的工作原理SPI接口的工作原理如下:首先,主设备通过片选线选择从设备,并将数据发送到MOSI线上;随后,主设备通过时钟线提供时钟信号,从而同步数据的传输;同时,从设备将数据通过MISO线发送给主设备;最后,主设备将片选线置高,表示数据传输结束。
4.SPI接口的硬件设计在实现SPI接口的硬件设计时,需要考虑以下几个方面:4.1 片选线的设计片选线的数量由从设备的数量决定。
如果只有一个从设备,可以直接连接到片选线上。
如果有多个从设备,需要使用多个片选线,并通过逻辑门进行选择。
4.2 时钟线的设计时钟线的频率由主设备的时钟频率决定。
需要根据从设备的要求,选择适当的时钟频率。
时钟频率过高可能导致数据传输出错,过低可能导致传输速度较慢。
4.3 数据线的设计数据线包括主输出从输入线(MISO)和主输入从输出线(MOSI)。
需要根据从设备的要求,确定数据线的数量和宽度。
通常,每个从设备都需要一个MISO线和一个MOSI线。
5.SPI接口的软件实现在单片机中实现SPI接口的软件需要编写相应的驱动程序。
以下是SPI接口软件实现的基本步骤:5.1 硬件初始化首先,需要初始化单片机的IO口,并设置片选线等相应的引脚。
5.2 时钟设置根据从设备的时钟要求,设置单片机相应的时钟频率。
AVR单片机串行接口及应用

AVR单片机的SPI串行通信的应用

应用设计
晶振频率 fOSC)的四分之一。 当 SPI 接 口 被 使 能 时,
MOSI、MISO、SCK、SS 引 脚 的
最高速率的时候,传输准确率会 有一定程度的下降。一般采用非 倍速的 64 分频就基本可以满足要
SPI 串行通信的简单程序 实现
控制与数据方向如表 1 所示。
求。
通过设置 AVR 单片机提供的
在 进 行 SPI 的 任 何 操 作 时, SPE 位都必须置位;当 AVR 单片 机运行于主机模式时 MSTR 位应 该被置位。如果 MSTR 为“1”时, SS 端口被设置为输入,且被外部
DORD (bit5)
数据移出 顺序控制
MSTR (bit4)
主 / 从机 选择
CPOL (bit3)
SCK 极性 选择
如图 6 所示。
应用及结论
在 电 力 线 抄 表 系 统 中,AVR 单 片 机 作 为 其 控 制 的 核 心 芯 片, 我们使用其 SPI 串行外设接口访 问 Flash、EEPROM 以及时钟芯片。 如 图 7 所 示,CPU 定 时 通 过 SPI 总线访问时钟芯片,读取时间信 息,作为抄表的时间标准;由于 Flash、EEPROM 和时钟芯片共用 SPI 总线,这三者之间通过数字 开关来选择。
CPHA
SPR1
SPR0
(bit2) (bit1) (bit0)
SCK 相位 选择
SPI 时钟速率选择
比特位
SPIF (bit7)
含义及其作用 SPI 中断标志
表4 SPI状态寄存器SPSR
WCOL (bit6)
写冲突标志
—— (bit5)
保留
—— (bit4)
保留
简单方便自制的几个AVR-51 isp编程器(下载线)

简单方便自制的几个AVR/51 ISP编程器(下载线)AVR单片机有许多优点,我也是个忠实支持者,是从51过度到AVR的,中途还学PIC,初学51时买了学习板,液晶屏等不少东西,有经验后,学AVR时就从自制的下载线开始了,注意,这只是个开始,简单的东西总存在着一些局限性,但对于初学者来说,这可是个非常有用的东西,有了它就可以开始学习AVR单片机,甚至是一些开发了,这些编程器都是出自网上流传的,虽然我也不是很清楚出自那位高人,但感谢原作者.以下分享我的自制经验.1.由于AVR的编程方式有并行高压和串行ISP (In System Program 在系统编程)方式,高压并行编程能修复一些错误的配置位,但这并不常用,因为并行通信其布线会较多,不便于在成品中预留编程接口,也不便自制,而串行的ISP是基于SPI(Serial Peripheral interface)通信方式的,SPI通信时只需三根数据线, 分别是SCK,MISO,MOSI,再加上VCC,GND,Reset共需6根线,而VCC是可选的,用于向目标芯片供电,或由目标板反供电给编程器.那么设计目标板时,最少只要保留6根线,以后就可随时烧写,升级芯片上的程序了.而无需将芯片取下.这是ISP方式的最大特点,具体6根线连到那个引脚,不同型号不一样,要看芯片引脚定义图,例如ATtiny2313引脚定义如下:至于编程接头,尽可能以官方的10针接口为准,也可像我一样自定义一个6针的,因为我更喜欢水晶头,其实都是排列不同而已,只要再制作一条线进行转换就什么都搞定了.2.基于并口的ISP下载线,我最初也是自制了这款,这种下载线可以下载AVR全系列和AT89S系列51单片机,成本较低,不过需要PC机有并行口,许多笔记本电脑现在都没有并口了,比较麻烦,市场上卖的USB转并口,大都是用于打印机的,无法使用.以上是原理图,74HC244是用于信号的隔离驱动的,它从目标板经4148供电,由于ISP编程器只有4根是信号线,实际上我用了74HC125取代74HC244,以减小体积和引脚焊点数.下面是我使用的原理图,和成品图片:元件全装在内部,整体就很美观了,注意下载线不宜过长,最好50cm以内,PC上位机软件很多都可以支持的像双龙的SLISP,PonyProg2000(但51的型号很少,2.0a 版中也只有两个),智峰的progisp试过都成功烧写和效验.不足是烧写速度偏慢,综合来说还算满意.如果首次不成功,可能是软件设置问题,双龙的几乎不用(或说是不能)作什么设置,PonyProg200和Progisp或许需要设置一下才能把它使用得更好,比如Ponyprog用直接IO方式要比API方式快些,而Progisp它的端口引脚是可以自定义的,如果不同,把它设为和原理图一样不可以了.否则根本就用不了.3.基于串口的ISP下载线.,因为之前还在用51做些板子,初看这电路时,觉得由于reset在默认上拉,认为不适合51系列(51是高电平复位),并且更重要的是ponyprog2000的器件列表也没 89s52这型号,所以一直没去做过.但如果只对AVR编程来说,这个也是非常好用的.其中6,7端口必须直连,Ponyprog程序用来检测是否插入此接口,制作完成后试过还可以,速度和并口的差不多,只是必须要用PC机上的物理串口,用USB转串口的就无法使用.我起初觉得可能是驱动能力问题,曾用74HC125对它隔离驱动,花了时间却不成功,用示波器观察四条线的时序,发现原来是USB转串口线有问题,它的SCK(7脚),输出像随机的方波,而从物理串口出来的SCK时序,其频率在20K 左右,并连续稳定,如下图,这也许是USB转串口芯片的问题,才20K频率,难道被当燥声给滤掉了??请有了解的朋友请帮我分析一下,但这条转换线是好的,目前正在用它为ARM系统进行通迅,下载都很正常,芯片型号没打开看,驱动名称是Prolific USB-to-Serial Comm Port.有WHQL的,应该没问题,下面是我的原理图(我参考并口那个画的),实物,与波形.示波器测量时是直接测量转接口,未接下载线,通道1(绿)是物理串口的,通道2(黄)就是USB转串口的,已用示波器量了9个脚,不会错的,由于目前在学ARM9系统,已对这些问题放低了,对它有研究的朋友请告诉小弟,解决这小点问题,可以把它当USB的编程器用了!此线直接插到物理串口上,仍然可用.4.当制作完成这样简单的编程器后,就可以开始学习AVR或8051单片机了,熟悉后可以制作一个USB接口的编程器,USBASP,它内部是用一块ATMega8单片机来模似USB时序的,所以制作它的前提是至少需要一个编程器,例如上面的,将程序写入单片机中.这最好是在熟悉AVR的情况下制作.我是根据网上的公板图自己重画了这张原理图,来方便自己制作.晶振必须为12MHz,否则不可能完成USB时序的模似,单片机可以用低压版的ATMega8L 8PU超频使用,USB的数据线上的电压是3.3V,最高不超过3.6伏,那两个稳压管也就必须是3.6伏的,至于其它元件,其取值有些偏差影响也不大,JP1跳线是强制低速工作的,比如烧写那些有内部有RC振荡的单片机,首次使用就可能要用低速模式,因为其默认就是使用1M的内部振荡.由于USB供电已足够使用,JP5通常保持断开就可以了,JP3只在烧写或更新此编程器固件时使用,平时必须断开,整个电路其实很少东西,JP2连接USB线,或USB公头时要注意顺序不要搞错,上面这个PCB是专为万用板,有人叫洞洞板画的,并且4个LED位置是焊插针的,用来引出到外壳,这个单片机是直插的,建议不要焊上去,而是使用IC插座,当把电路做完,用表量一下确认无误后,插入USB口,此时PC端应该提示为无法识别的USB设备,不必理会,接着开始烧写固件,先短接JP3,再用另一个编程器通过编程口将程序写入Mega8单片机.此过程和平时烧写目标板是一样的.确认成功烧写和效验后,接着烧写熔丝位,这步主要就是设置单片机为外部晶振工作模式,设置熔丝时要小心,如果点错的话,先点恢复默认,再去修改.否则后果难以意料.下面分别是Ponyprog,progisp和SLISP的熔丝设置界面:注意不要设错,完成后将JP3取下,拔下并重插USB,如无意外,你会看到发现新硬件这样的提示,然后装USB驱动,就算大功告成了.至于软件目前就智峰的Progisp支持得比较好.因为经常用,最好是搞外壳保护它,我是在壳体店买的小盒,总之都是小问题了.那个低速开关我是用另一个8脚的单片机.实现按键检测,电平求反输出,和将状态保存到片内EEPROM进行记忆来实现的自锁开关,因为这是我后来扩展的,并且是用了PIC的12F629单片机,这些用AVR单片机(如Tiny13)实现都很简单,就不多说了,不过想它反应得好些要下些功夫,或者是直接用机械的自锁开关来实现.至此,可以慢慢享受自己的成果所带来的乐趣了.USBASP制作资料已打包,有兴趣的朋友可下载学习研究:(用浏览器打开,单线程下载)/self.aspx/.Public/MCU/u sbasp.rar。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0前言同步串行通讯口(SPI)是工业标准的同步串行外设接口,其控制总线只需要4根控制线就可以扩展具有SPI的各种I/O器件[1],因此在工程控制领域有着广泛的应用。
TLC2543串行A/D转换器是采用CMOS技术的12位逐次逼近式A/D转换器,它可以直接和具有SPI 接口的单片机相连,接口非常简单。
由于它是一款高速高精度、接口简单、价格低廉的12位串行A/D器件,很适合用于单片机的测控系统[2]。
本文以AVR单片机AT90S8535和串行A/D转换器TLC2543为例,设计了AT90S8535与TLC2543之间的同步串行通讯接口,用单片机C语言描述了两者之间的通讯过程,实现了AT90S8535与TLC2543之间数据通讯,并且利用VB编写的处理软件对单片机所接收到的数据进行了波形验证。
1系统工作原理系统按照图1所示的电路关系连接之后,可通过AVR单片机与串行A/D的SPI接口设计*王红亮,杨晓(中北大学电子测试技术国家重点实验室仪器科学与动态测试教育部重点实验室,太原030051)摘要:为了解决信号采集系统的同步串行通讯问题,在理解AVR单片机SPI接口的通讯原理和方法的基础上,分析了AVR单片机SPI接口的工作过程,设计了AVR单片机和串行A/D转换器的同步串行通讯接口,并用程序描述了SPI接口通讯的过程,实现了AVR单片机通过SPI接口与串行A/D转换器之间的数据通讯。
最后,用实验和数据分析验证了设计方案的可行性。
关键词:SPI接口;AVR单片机;串行A/D中图分类号:TP368.1文献标识码:B文章编号:1001-1390(2008)09-0046-03The design of SPI between AVR microcontroller and serial A/DconverterWANG Hong-liang,YANG Xiao(National Key Laboratory For Electronic Measurement Technology,Key Laboratory ofInstrumentation Science&Dynamic Measurement(North University of China),Ministry ofEducation,North University of China,Taiyuan030051,China)Abstract:The synchronous serial communication plays an essential part in the design of dataacquisition system.In this thesis,AVR microcontroller is chosen to construct the system.Based on the analysis of the AVR’s SPI,the synchronous serial communication subsystem isdesigned and implemented successfully between the AVR’s SPI and serial A/D converter.The main programme is presented to describe the working process of AVR’s SPI interface.Inthe end,the data transmission is correct and effective,which proves the correctness of thedesign.Key words:SPI,AVR Microcontroller,Serial A/D Converter*国家自然科学基金资助项目(50535030)46--图1AT90S8535与TLC2543连接示意图对AVR 单片机编程来实现其对串行A/D 转换器TLC2543的控制。
在该系统中,AVR 单片机的SPI 接口占据着主设备的地位,而TLC2543的SPI 接口则属于从设备。
因此TLC2543要完全受AVR 单片机的控制[3]。
在AVR 单片机完成初始化配置之后,通过SPI 口向TLC2543发送设置好的控制字,进而来控制TLC2543对模拟信号进行转换,并将转换之后的数据再通过SPI 接口发给AVR 单片机。
当AVR 单片机接收到TLC2543发送过来的数据之后,再通过AVR 单片机的UART 接口发送到计算机,供计算机的处理软件进行处理。
2数据通讯的电路设计及相关寄存器的配置2.1AVR 单片机与TLC2543的电路设计在设计通讯电路之前,为了保证AVR 单片机的正常工作,首先要建立一个满足单片机正常工作的最小系统,电源输入、地以及为AVR 单片机提供时钟的晶振[4]。
有了这些基本的条件,我们才可以设计SPI 口正常工作的外围通讯电路。
在保证了单片机的最小系统之后,单片机与串行A/D 转换器之间数据通讯就可以利用SPI 口来完成。
在同步串行通讯过程中,要求单片机和外设之间的工作时钟必须同步,这样才能达到数据同步传输的要求。
AVR 单片机的SPI 口有四条控制线:串行时钟(SCK )、主机输入/从机输出数据线(MISO )、主机输出/从机输入(MOSI )数据线和从机选择线(SS )[5]。
SPI 口工作时,在从机选择线(SS )使能的前提下,主机的SCK 时钟脉冲在数据线上为数据交换提供必需的参照时钟。
TLC2543串行A/D 转换器具有11路模拟输入通道、10ms 的转换速度,能提供较高精度且多通道的数据采集功能。
其与外部器件的通讯接口就是同步串行接口:片选(CS )、A/D 转换结束标志(EOC )、输入输出时钟(I/O CLOCK )、数据输入线(DATA INPUT )、数据输出线(DATA OUTPUT )。
除了EOC 之外、其他的四根控制线依次与AT90S8535的SPI 口的控制线相连(具体连接示意图参照图1),这样便可以实现单片机与A/D 转换器之间的数据通讯[8]。
2.2SPI 接口通讯相关寄存器的配置同步串行通讯的通讯程序设计思想的实质就是在时序的配合下,通过对AVR 单片机的SPI 口三个寄存器的配置来实现数据通讯。
这三个寄存器分别是:控制寄存器、状态寄存器和数据寄存器[6]。
控制寄存器(SPCR)可以设置SPI 口工作时的中断、工作模式和时钟频率等,只要对控制寄存器进行某些赋值就可以实现相应的功能。
状态寄存器(SPSR)含有SPI 中断标志位SPIF,当串行数据发送完成时,中断标志位将会置1,并产生中断。
如果从机选择线SS 被设置为输入且在SPI 口是主机模式时,该标志位将被置低,这时将会设置SPIF 标志。
SPIF 位在执行相应中断向量时被硬件清除。
SPI 口数据寄存器(SPDR)可以进行读/写,以便用于在寄存器文件和SPI 移位寄存器之间传递数据。
对SPSR 和SPCR 两个寄存器的判断和设置是能否准确实现同步串行通讯的关键所在。
因此,在编写AVR 单片机的SPI 通讯程序的过程中,要特别熟悉这两个寄存器的功能赋值。
需要注意的是,状态寄存器的第7位SPIF位为SPI 的中断标志位,若以查询方式来发送数据时,当串行数据发送完之后,SPIF 位将会自动置1,但是在数据接收的时候,当数据接收完之后,该位不会置位[7]。
因此在调用接收数据的程序后,要加上一段延时来保证数据的准确接收。
3软件编程3.1程序说明本文的AT90S8535与TLC2543数据通讯程序是在ICCAVR 软件环境下完成编写的。
要实现串行A/D 转换器的控制和通讯,就必须先对单片机的SPI 口的寄存器进行初始化。
首先设置SPI 口的SPCR 寄存器,在本例中,直接对控制寄存器(SPCR )赋值为0B01010000,其中,每一位的功能描述如下:SPIE=0,禁止中断,以查询的方式来发送数据,每47--当发送完一个数据之后,就查询状态寄存器中的SPIF 位,当SPIF位置1时,表示一个数据已经发送完毕,这时可以将下一个数据放在数据寄存器中进行发送;SPE=1:SPI使能;DORD=0:数据的低位先传送;MSTR=1:AT90S8535的SPI接口设置为主机模式;CPOL=0,CPHA=0:对应SPI的模式0;SPR1=0,SPR0=0:对应工作频率为f osc/4,f osc指的是晶振的工作频率[9]。
初始化控制寄存器之后,就可以对串行A/D转换器进行控制和通讯了。
下面给出用C语言编写的通过SPI口对TLC2543的控制和通讯程序:PORTB&=~BIT(PB4);//片选使能delay_1ms();//延时while(1)//开始控制A/D转换器进行转换,并把转化结果发给单片机{adcl=0;adch=0;CtrlByte=0x0C;//操作码0x0C表示的是选中通道0,16位分辨率,数据的高八位先传送,高八位传送结束之后,再进行数据的低八位传送adch=SPI_TranByte(CtrlByte);//把命令字发给TLC2543,并且把上次模拟信号的转化结果的高八位赋值给adchadcl=SPI_TranByte(CtrlByte);//把命令字发给TLC2543,并且把转化结果的低八位赋值给adcl}//向TLC2543发送命令字,并读回转换结果的函数unsigned char SPI_TranByte(unsigned char bData){SPDR=bData;//发送命令字给TLC2543while(!(SPSR&0x80));//判断命令字是否发送完毕return SPDR;//读回上次模拟信号的转换的结果}在SPI_TranByte函数中,需要注意的是在向TLC2543发送命令字的同时,TLC2543也将转换的结果放在了SPI口的数据寄存器中,只需把上次模拟信号转换的数据读回来即可,而SCK的工作时钟是由SPDR数据寄存器产生的,只要是SPDR含有一个数据(不管是什么数据),SPI口都会产生一个通讯时钟,以供双方通讯时使用[10]。
3.2波形验证图2是信号源的正弦信号和采集到的数据波形(由计算机处理软件画出)对比示意图,左图是正弦信号在示波器上显示的波形,其工作的频率是100Hz,幅值为5V。
计算机处理软件的界面上显示了75个采集点,波形的幅值为5V。
串行通讯的波特率为57600bps。
由于AVR单片机在与计算机进行串行通讯的过程中,每一帧数据共有9位,其中包括8个数据位和一个停止位,故在一个信号周期内共要传输57600/100/ 9=64帧数据,而本设计中使用的是16位采样精度,所以,每一个周期共采集了64/(16/8)=32点,图2的右图中共有75个采集点,所以显示的周期应该为75/32=2.3个周期,与右图显示的波形频率基本上是吻合的。