TLC548,TLC5498位串行AD转换器芯片介绍.docx

上传人:scccc 文档编号:13142415 上传时间:2021-12-16 格式:DOCX 页数:24 大小:35.39KB
返回 下载 相关 举报
TLC548,TLC5498位串行AD转换器芯片介绍.docx_第1页
第1页 / 共24页
TLC548,TLC5498位串行AD转换器芯片介绍.docx_第2页
第2页 / 共24页
TLC548,TLC5498位串行AD转换器芯片介绍.docx_第3页
第3页 / 共24页
TLC548,TLC5498位串行AD转换器芯片介绍.docx_第4页
第4页 / 共24页
TLC548,TLC5498位串行AD转换器芯片介绍.docx_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《TLC548,TLC5498位串行AD转换器芯片介绍.docx》由会员分享,可在线阅读,更多相关《TLC548,TLC5498位串行AD转换器芯片介绍.docx(24页珍藏版)》请在三一文库上搜索。

1、TLC548 , TLC549 8 位串行A/D转换器芯片介绍TLC548 , TLC549是美国德州仪器公司生产的 8位串行A/D转换器芯片,可与通用微处理器、控制器通 过I/O CLOCK、CS、DATA OUT三条口线进行串行接口。具有 4MHz片内系统时钟和软、硬件控制电 路,转换时间最长 17“s, TLC548 允许的最高转换速率为 45 500次/s , TLC549 为40 000次/s。总 失调误差最大为±0.5LSB ,典型功耗值为6mW。采用差分参考电压高阻输入,抗干扰,可按比例量程校 准转换范围,VREF-接地,VREF+ VREF->1V ,可用于较小

2、信号的采样。2 .芯片简介2.1 TLC548 、TLC549的内部框图和管脚名称 TLC548 、 TLC549的内部框图和引脚名称如图1所示。2.2 极限参数TLC548/549 的极限参数如下: 电源电压:6.5V ;麻入电压范围:0.3VVCC+ 0.3V ;脸出电压范围:0.3VVCC+ 0.3V ; 峰值输入电流(任一输入端):±10mA ; 总峰值输入电流(所有输入端):±30mA ;“作温度:TLC548C、TLC549C : 0 c 70 cTLC548I、TLC549I : 40 C 85 cTLC548M、TLC549M : 55 C 125 c3 .

3、工作原理TLC548、TLC549均有片内系统时钟,该时钟与I/O CLOCK是独立工作的,无须特殊的速度或相位匹配。其工作时序如图 2所示。当CS为高时,数据输出(DATA OUT)端处于高阻状态,此时 I/O CLOCK不起作用。这种 CS控制 作用允许在同时使用多片 TLC548、TLC549时,共用I/O CLOCK ,以减少多路(片)A/D 并用时的I/O 控制端口。一组通常的控制时序为:(1)将CS置低。内部电路在测得 CS下降沿后,再等待两个内部时钟上升沿和一个下降沿后,然后确 认这一变化,最后自动将前一次转换结果的最高位(D7)位输出到DATA OUT端上。(2)前四个I/O

4、CLOCK 周期的下降沿依次移出第 2、3、4和第5个位(D6、D5、D4、D3),片上 采样保持电路在第4个I/O CLOCK下降沿开始采样模拟输入。(3)接下来的3个I/O CLOCK 周期的下降沿移出第 6、7、8(D2 、 D1、D0)个转换位,(4)最后,片上采样保持电路在第8个I/O CLOCK周期的下降沿将移出第 6、7、8(D2、D1、D0)个转换位。保持功能将持续4个内部时钟周期,然后开始进行32个内部时钟周期的 A/D转换。第8个I/O CLOCK后,CS必须为高,或I/O CLOCK保持低电平,这种状态需要维持36个内部系统时钟周期以等待保持和转换工作的完成。如果 CS为

5、低时I/O CLOCK 上出现一个有效干扰脉冲,则微处理器/控制器将与器件的I/O时序失去同步;若 CS为高时出现一次有效低电平,则将使引脚重新初始化,从而脱离原转 换过程。在36个内部系统时钟周期结束之前,实施步骤(1) (4),可重新启动一次新的 A/D转换,与此同时,正在进行的转换终止,此时的输出是前一次的转换结果而不是正在进行的转换结果。若要在特定的时刻采样模拟信号,应使第8个I/O CLOCK 时钟的下降沿与该时刻对应,因为芯片虽在第4个I/O CLOCK 时钟下降沿开始采样,却在第 8个I/O CLOCK 的下降沿开始保存。4 .应用接口及采样程序TLC548、TLC549可方便地

6、与具有串行外围接口 (SPI)的单片机或微处理器配合使用,也可与 51系 列通用单片机连接使用。与 51系列单片机的接口如图 3所示。其采样程序框图如图4所示,实际应用程序清单如下: ;初始化:SETB P1.2;置 CS 为 1。CLR P1.0;置 I/O CLOCK 为零。MOV R0 , 0 00H ;移位计数为零。 ;A/D过程:A/DP : CLR P1.2NOP ;等待1.4 vs, nop数根据晶振情况选择。NXT : SETB P1.0MOV C ,P1.1RLC ACLR P1.0INC R0CJNE R0 , 8 8 , NXTMOV R0 , # 00SETB P1.2

7、MOV DTSVRM , A ; DTSVRM : DATA SAVE RAM. RETTLC548/549 片型小,采样速度快,功耗低,价格便宜,控制简单。适用于低功耗的袖珍仪器上的单 路A/D或多路并联采样。TLC549 AD采样子程序#include "intrins.h"#defineWait2us_nop_();_nop_();#defineWait4usWait2us;Wait2us;#defineWait8usWait4us;Wait4us;#defineWait10usWait8us;Wait2us;Wait30usWait10us;Wait8us;Wait

8、4us;Wait2us;_nop_();#define#define Wait1us/* 定义接 口总线 */sbit Clock = P1 人 2; / 时钟口线sbit DataOut = P1 A 3; / 数据输出 口线sbit ChipSelect = P1 a 4; /片选口线/* 接口总线定义名吉束 */* 函数名称:ADCSelChannel*功能:转换指定通道的模拟量为数字量*说明:*位置:1*/unsigned char ADCSelChannel(void)(unsigned char ConvertValue = 0;unsigned char i;ChipSelect

9、 = 1; / 芯片复位ChipSelect = 0;ChipSelect = 1;Clock = 0;Wait4us;ChipSelect = 0; / 芯片起始Wait4us; /等待延时for (i = 0; i < 8; i +) /输入采样转换时钟(Clock = 1;Clock = 0;ChipSelect = 1; / 开文台转换Wait10us; /等待转换结束ChipSelect = 0; / 读取转换结果Wait4us;for (i = 0; i < 8; i +) /(Clock = 1;ConvertValue <<= 1;if (DataOut

10、) (ConvertValue = 0x1;Clock = 0;ChipSelect = 1;return (ConvertValue); /返回转换结果TLC549串行A/D转换器实验;PIN1:REF+; PIN2:INPUT; PIN3:REF-; PIN4:GND;PIN5:CS; PIN6:DATAOUT; PIN7:CLOCK; PIN8:+5VCSBIT P2.0CLOCK BIT P2.1DATE BIT P2.2MEM EQU 70HHH EQU 71HMM EQU 72HLLEQU 73HORG 0000HAJMP STARORG 0030HTBB:DB 0C0H,0F9H

11、,0A4H,0B0H,99H,92H,82H,0F8H,80HDB 90H,88H,83H,0C6H,0A1H,86H,8EHORG 0050HSTAR:SETB CS;CSCLR CLOCK;CLOCKMOV R5,#00H;#模数转换CLR CSNOPNXT:SETB CLOCKNOPMOV C,DATERRC ACLR CLOCKINC R5CJNE R5,#8,NXTMOV R5,#00HSETB CSMOV MEM,A ;转换结果放于MEM;#16进制码车t换成 BCD 码MOV B,#100DIV ABMOV HH,AMOV A,BMOV B,#10DIV ABMOV MM,AMO

12、V LL,B;# 显示结果MOV R2,#100ZH:MOV A,HHMOV DPTR,#TBBMOVC A,A+DPTRMOV P0,AMOV P1,#11111101BACALL D1MSMOV A,MMMOV DPTR,#TBBMOVC A,A+DPTRMOV P0,AMOV P1,#11111011BACALL D1MSMOV A,LLMOV DPTR,#TBBMOVC A,A+DPTRMOV P0,AMOV P1,#11110111BACALL D1MSDJNZ R2,ZHAJMP STAR;#D1MS: MOV R7,#0AHLOOP1: MOV R6,#32HLOOP2: DJN

13、Z R6,LOOP2DJNZ R7,LOOP1RETEND测量ADIN 输入的电压并在数码管上显示#include <reg52.h>#include "./Inc/Common.h"#include "./Inc/CH451.h"#include "./Inc/Delay.h"#define Vref 2.5外部参考电压,通过底板 RP2来调节sbit CLK=P1A3; /定义时钟信号IO 口sbit CS=P1A1; /定义片选信号IO 口sbit DO=P1A2; /定义数据输出IO 口uchar DisplayD

14、ata8=0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10;/数码管各位要显示的数uint n=0; /采集到的数据/AD转换void AdConvert()uchar i;n=0;CS=0;for(i=0;i<8;i+)CLK=1;n<<=1;if(DO) n|=1;CLK=0;CS=1;n=(n*Vref*100/255);/计算电压并扩大 100倍计算数码管各位要显示的数值DisplayData5=n/100;DisplayData6=n%100/10;DisplayData7=n%10;/主函数void main()uchar i;uin

15、t Tmp;CH451_Init();/ 初始化 CH451for(i=0;i<8;i+) CH451_DisplayDig(7-i,DisplayData,0);/ 显示数据while(1)AdConvert();/AD 转换DelayMS(300);for(i=0;i<8;i+)if(i=5) CH451_DisplayDig(7-i,DisplayData,1);/显示小数点else CH451_DisplayDig(7-i,DisplayData,0);名称:红外线遥控解码实验名称:红外线遥控解码实验#include <reg52.h>#include &quo

16、t;./Inc/Common.h"#include "./Inc/CH451.h”uchar DisplayData8=0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10;/数码管各位要显示的数据/6种接收状态# define IR_Idle 0/ 空闲# define IR_WaitStart 1/接收引导代码# define IR_GetAddress 2/ 接收地址# define IR_GetAddressInv 3/ 接收地址反码# define IR_GetData 4/ 接收数据#define IR_GetDataInv 5/ 接收

17、数据反码#define ms_168 0x060D#define ms_9 0x2067#define ms_125 0x2D00#define ms_15 0x3600uchar IR_State=IR_Idle;/接收状态变量,初值为空闲uchar IR_Ready=0;/数据接收完标志uchar IR_Repeat=0;/连发标志uchar IR_Data4=0,0,0,0;/ 接收到的 4 字节数据uchar Tmp;uint IRtimer=0;外部中断1中断程序void INT1_Int() interrupt 2uint Count;TR1=0;Count=TH1*256+TL1

18、; 读取计数值TH1=0;TL1=0;TR1=1;定时器1重新开始计数switch(IR_State)case IR_Idle:IR_State=IR_WaitStart;IRtimer=11;/ 解码超时 break;case IR_WaitStart: if(Count>ms_125)&&(Count<ms_15) 接收到引导码 IR_Data0=0;IR_Data1=0;IR_Data2=0;IR_Data3=0;Tmp=1;IR_Repeat=0;IR_State=IR_GetAddress;else if(Count>ms_9)&&(

19、Count<ms_125)/接收连发代码IR_Repeat=1;IR_State=IR_Idle;else IR_State=IR_Idle;break;case IR_GetAddress:if(Count>ms_168) 接收到 1IR_Data0|=Tmp;Tmp<<=1;if(!Tmp)IR_State=IR_GetAddressInv;Tmp=1; break;case IR_GetAddressInv: if(Count>ms_168) 接收到 1IR_Data1|=Tmp;Tmp<<=1;if(!Tmp)IR_State=IR_GetDa

20、ta;Tmp=1;)break;)case IR_GetData:if(Count>ms_168)/ 接收到 1IR_Data2|=Tmp;)Tmp<<=1;if(!Tmp)IR_State=IR_GetDataInv;Tmp=1;)break;)case IR_GetDataInv:if(Count>ms_168)/ 接收到 1IR_Data3|=Tmp;)Tmp<<=1;if(!Tmp)IR_Ready=1;/if(IR_Data0AIR_Data1)=0xFF)&&(IR_Data2AIR_Data3)=0xFF)校验数据IR_Stat

21、e=IR_Idle;)break;)default:IR_State=IR_Idle;break;)/定时器初始化void InitTimer()TMOD=0x11;/ 方式 1EX1=1;开外部中断1IT1=1;下降沿触发ET0=1;/允许T0中断TH0=0xDC;/定时器初值10msTL0=0x00;TR0=1;/启动 T0/定时器0中断void Time0Int() interrupt 1if(IRtimer) IRtimer-;else IR_State=IR_Idle;/ 解码超时void main()uchar i;InitTimer();/定时器初始化CH451_Init();/

22、 初始化 CH451for(i=0;i<8;i+) CH451_DisplayDig(7-i,DisplayData,0);/显示数据EA=1;/打开中断while(1)if(IR_Ready=1)/计算要显示的每位数字IR_Ready=0;DisplayData7=IR_Data2%16;/ 数码管后 2 位显示数据DisplayData6=IR_Data2/16;DisplayData1=IR_Data0%16;/ 数码管前 2 位显示地址DisplayData0=IR_Data0/16;for(i=0;i<8;i+) CH451_DisplayDig(7-i,DisplayD

23、ata,0);/ 显示新的数据DAC0832 程序编写ORG 0000HMAIN:MOV A,P1;设置高电平;设置低电平MOV R0,AMOV R1,#00HLCALL BOXINGSJMP MAINBOXING: JNB P1.0,SANJIAOJNB P1.1,JUXINGJNB P1.2,JUCHIRET;* 三角波 *SANJIAO:MOV DPTR,#7FFFHMOV A,#00H;P1.0控制三角波的输出;P1.1控制矩形波的输出;P1.2控制锯齿波的输出;选中 DA0832UP1: MOVX DPTR,AINC AJNZ UP1DOWN1:DEC AMOVX DPTR,AJNZ

24、 DOWN1RET;*矩形波 *JUXING:MOV DPTR,#7FFFHLP:MOV A,R0MOVX DPTR,ALCALL DEL_HMOV A,R1MOVX DPTR,ALCALL DEL_LRET;*锯齿波 *JUCHI:MOV DPTR,#7FFFHMOV A,#00H LOOP:MOVX DPTR,AINC A;SJMP LOOPRET;*延时程序 *DEL_H:MOV R7,#250DE:MOV R6,#4DJNZ R6,$DJNZ R7,DERETDEL_L:MOV R7,#250DEL:MOV R6,#4DJNZ R6,$DJNZ R7,DERET;向0832输出数据;A

25、= ! 0跳转反之顺序执行;设置输出上限;调高电平延时程序;调低电平延时程序;高电平;彳氐电平ENDDAC0832 的引脚及功能DI0-DI7 :数据输入线,TLL电平。ILE :数据锁存允许控制信号输入线,高电平有效。CS :片选信号输入线,低电平有效。WR1 :为输入寄存器的写选通信号。XFER :数据传送控制信号输入线,低电平有效。WR2 :为DAC寄存器写选通输入线。Iout1:电流输出线。当输入全为 1时Iout1最大。Iout2: 电流输出线。其值与Iout1之和为一常数。Rfb:反馈信号输入线,芯片内部有反馈电阻.Vcc:电源输入线 (+5v+15v)Vref:基准电压输入线 (

26、-10v+10v)AGND:模拟地,摸拟信号和基准电源的参考地.DGND:数字地,两种地线在基准电源处共地比较好18B20驱动程序,DQ为数据口,接于 P2.1*11.0592M晶振,上拉 4.7k 电阻*Author:fyb*2005-3-25 11:23*#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uintunsigned intsbit dq = P1A7;bit flag;uint Temperature;uchar temp_buff9; /存储读取的字节,rea

27、d scratchpad为9字节,read rom ID 为8字节uchar id_buff8;uchar *p;uchar crc_data;uchar code CrcTable 256=0,94, 188,226,97,63,221,131,194,156,126,32,163,253,31,65,157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,190,224,2,92,223,129,99,61,124,34,1

28、92,158,29,67,161,255,70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,219,133, 103,57,186,228,6,88,25,71,165,251,120,38,196,154,101,59, 217,135,4,90,184,230,167,249,27,69,198,152,122,36,248,166, 68,26,153,199,37,123,58,100,134,216,91,5,231,185,140,210, 48,110,237,179,81,15,78,16,242,172,47,113

29、,147,205,17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,175,241, 19,77,206,144,114,44,109,51,209,143,12,82,176,238,50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,202,148, 118,40,171,245,23,73,8,86,180,234,105,55,213, 139,87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,

30、233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);/*Function: 延时处理*parameter:*Return:*Modify:*/void TempDelay (uchar us)while(us-);/*Function:18B20初始化"parameter:*Return:*Modify:*,void Init18b20 (void)(dq=1;_nop_();dq=0;TempDelay

31、(86); /delay 530 uS/80_nop_();dq=1;TempDelay(14); /delay 100 uS/14_nop_();_nop_();_nop_();/detect 1820 success!if(dq=0)flag = 1;elseflag = 0;/detect 1820 fail!TempDelay(20);/20_nop_();_nop_();dq = 1;/*"Function: 向18B20写入一个字节*parameter:*Return:*Modify:*void WriteByte (uchar wr)单字节写入(uchar i;for

32、(i=0;i<8;i+)(dq = 0;_nop_();dq=wr&0x01;TempDelay(5); /delay 45 uS /5_nop_();_nop_();dq=1;wr >>= 1;/*"Function:读 18B20 的一个字节*parameter:*Return:*Modify:*/uchar ReadByte (void)/读取单字节uchar i,u=0;for(i=0;i<8;i+)dq = 0;u >>= 1;dq = 1;if(dq=1)u |= 0x80;TempDelay ;_nop_();return(u

33、);*Function:读 18B20*parameter:*Return:*Modify:*/ void read_bytes (uchar j)uchar i;for(i=0;i<j;i+)*p = ReadByte();p+;/*Function:CRC 校验*parameter:*Return:*Modify:*/ uchar CRC (uchar j)(uchar i,crc_data=0;for(i=0;i<j;i+)/查表校验crc_data = CrcTablecrc_dataAtemp_buffi;return (crc_data);/*Function:读取温度

34、*parameter:*Return:*Modify:*/ void GemTemp (void)read_bytes (9);if (CRC(9)=0) /校验正确Temperature = temp_buff1*0x100 + temp_buff0;/Temperature *= 0.625;Temperature /= 16;TempDelay(l);/*Function: 内部配置*parameter:*Return:*Modify:*/*void Config18b20 (void) /重新配置报警限定值和分辨率(Init18b20();WriteByte(0xcc);WriteBy

35、te(0x4e);WriteByte(0x19);WriteByte(0x1a);WriteByte(0x7f);Init18b20();WriteByte(0xcc);WriteByte(0x48);Init18b20();WriteByte(0xcc);WriteByte(0xb8);/skip rom/write scratchpad/上限/下限/set 11 bit (0.125)/skip rom/保存设定值/skip rom/回调设定值/*Function:读 18B20ID*parameter:*Return:*Modify:*void ReadID (void)/读取器件idI

36、nit18b20();WriteByte(0x33);/read romread_bytes(8);/*Function:18B20ID全处理*parameter:*Return:*Modify:*/ void TemperatuerResult(void)p = id_buff;ReadID();Config18b20();Init18b20 ();WriteByte(0xcc);/skip romWriteByte(0x44);/Temperature convertInit18b20 ();WriteByte(0xcc);/skip romWriteByte(0xbe);/read Temperaturep = temp_buff;GemTemp();)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1