调试笔记:
1、TLC0834为逐次逼近ADC,精度8bit ,四通道模拟量输入(0~5V),可设置成四通道单端方式或二通道差分方式;转换后的8bit为无符号整型值 !当单端方式时,模拟输入量与模拟地相差后送入比较器,输出值在0~255之间(对应0~Vref);当差分输入方式时,两输入端的正负极电压相差后送入比较器,该值达到Vref时则输出满刻度值255,当差分输入正极端电压小于负极端电压时,一律输出为0;参见DatShts:
...... When the signal input applied to the assigned positive terminal is less than the signal on the negative terminal, the converter output is all zeros.
2、CLK引脚的时钟输入既是TLC0834与CPU通讯的串行时钟脉冲,同时也是ADC内部比较器的工作脉冲。本仿真中采用AT89C52单片机,设置的晶振频率为12.0mHz,则软件模拟方式最大发出的方波频率为500kHz(两条引脚置位复位指令交替循环,一个脉冲周期2us,f=500kHz) ! 这个频率仍在TLC0834内部比较器的工作频率之内(fclk =10khz~600khz);
3、照TLC0834与CPU串行通讯时序要求,CPU发送启动位及通道选择位——后,再发送8个工作时钟脉冲毕,TLC0834一次AD转换结束,其完成一次转换需要的时间为13.3333us(600khz);16us(500khz);32us(250khz)为典型值;
TLC0834的操作时序
通道选择的地址表
4、接口连线:CPU拉低CS片选开始启动AD转换时,由DI写在时钟上升沿触发,4bit发送后再经过一个时钟脉冲,正在转换中的数据也同时由比较器经DO发出(在时钟的下降沿触发),读写发生在两个不同的时段,故完全可以将DI、DO引脚用引线片外短接再连至CPU的IO口,本仿真就是这样。参见DatShts上的解释:
....DI and DO can be tied together and controlled by a bidirectional processor I/O bit received on a single wire. This is possible because DI is only examined during the multiplexer-addressing interval and DO is still in the high-impedance state.
5、TLC0834的AD转换启动,可参照时序,也见DatShts:
On each successive low-to-high transition of
the clock input, the start bit and assignment word are shifted through the shift register. When the start bit is shifted into the start location of the multiplexer register, the input channel is selected and conversion starts. The SAR status output (SARS) goes high to indicate that a conversion is in progress, and DI to the multiplexer shift register is disabled for the duration of the conversion.
6、子程序例程:
#include "Includes.h" //文件包含
/*******************************************************************************
*** 函 数 名: extern int8u TLC0834_Start(bool sgl,bool odd,bool sel)
*** 功能描述: 启动ADC转换,同时返回转换后的8Bit数据;
*** 全局变量: NO !
*** 输 入: bool sgl:1-单端方式;0-差分方式;
bool odd:1-单端方式下选通奇数通道;差分方式下奇数通道(1,3)为+;
0-单端方式下选通偶数通道;差分方式下偶数通道(0,2)为+;
bool sel:1:在前两种通道选通的基础上选择高位通道;反之低位通道;
*** 输 出: 8bitAD转换值;
*** 创 建 人:huangtiexiong 日期:2006-11-28
*** 修 改 人: 日期:2006-11-28
*** 函数说明: 外部函数;
/******************************************************************************/
extern int8u TLC0834_Start(int8u sgl,int8u odd,int8u sel)
{
int8u i;
int8u tmp = 0;
ADC_CLK = 0;
ADC_CS = 1; //准备启动ADC;
ADC_CS = 0; //启动数据串行传输;
ADC_DIO = 1; //发送启动位;
ADC_CLK = 1; _nop_();
ADC_CLK = 0; //发送sgl位;
ADC_DIO = sgl; ADC_CLK = 1; _nop_();
ADC_CLK = 0; //发送odd位;
ADC_DIO = odd; ADC_CLK = 1; _nop_();
ADC_CLK = 0; //发送sel位;
ADC_DIO = sel; ADC_CLK = 1; _nop_(); ADC_CLK = 0;
_nop_(); //Mux settling time;
for(i=0;i<8;i++)//发送八个转换时钟脉冲;
{
ADC_CLK = 1; _nop_(); ADC_CLK = 0; _nop_();
}
for(i=0;i<8;i++) //12个时钟脉冲下降沿,此时数据线上已发出LSB信号;
{
tmp >>= 1;
if(ADC_DIO) { tmp |= 0x80; }
ADC_CLK = 1; ADC_DIO = 1; //先写1后再读,否则读数将不预期;
_nop_(); ADC_CLK = 0; //转换数据在时钟下降沿发出;
//第19个时钟下降沿末数据发送完毕;第20个clk无效;
}
ADC_CS = 1; //结束本次操作;
return tmp;
}
/*******************************************************************************
**** End Of File
*******************************************************************************/
7、Proteus仿真抓图:
仿真中TLC0834对CH2、CH3构成的差分输入进行采样(每隔500ms),CH2输入1hz、峰峰值10.0v(最大正压+5.0v)的方波脉冲,CH3输入1.0的电压信号,参考电压5.0V,LED显示在0和205之间交替,计算值为:255×(5-1)÷5=204.....
用户423445 2012-7-9 00:40
用户423445 2012-7-8 23:46
用户131350 2008-4-21 17:53
xxmlyt 2008-4-19 14:54
用户61232 2007-6-28 18:38
用户18411 2007-5-27 08:22
用户1053025 2007-1-24 14:38
好认真,真是不错啊!
用户18341 2007-1-24 06:42