关于AD,一直有人问一些东西,应该是属于AD比较深的东西,答应总结一个贴子.
大部分来自中电网陈刚版主的精典问答,如果要用加速度传感器,请看完下面的,如果想用好多路AD转换请看完下面的.
一般小车可能不需要,因为一般用的是单次转换单通道无FIFO模式.
1为什么要多次转换?
ATD模块有8个结果寄存器,所以它的AD转换有这样的功能,就是对一个或多个通道连续进行转换,将结果顺序放入这8个结果寄存器中。这样用户如果要取一个通道的平均值,或取多个通道的值,都很方便了,就不用软件一次一次地去转换了
2 ATDCTL3 那个S8C、S4C、S2C、S1C决定的转换序列长度是什么意思?
ATDCTL3中的S8C~S1C决定了一个转换序列的长度,即一个转换序列共转换多少次。你可以选择做一次AD转换的过程,是对一个通道连续转换多次,还是对多个通道连续进行转换,这由ATDCLT5的MULT位决定。
3 如果选择了多通道,MULT=1,那么CC、CB、CA、只是控制第一个转换的通道那么我就没有找到该如何制定具体由哪几个通道转换的控制字。。。比如光要0、1、3三个通道转换。。。难道本身转换就是8个通道全部转一遍的?
S8C~S1C就控制每轮进行多少次转换,最多为8。比如可以选择为6,那么每6次转换称为一个序列。如果选择了多通道转换,那么CC、CB和CA选择首个转换的通道,后面的通道按通道号排列。比如S8C~S1C选择转换数为6,MULT设为1,而CC、CB和CA选择通道4,那么转换开始后,AD模块将按通道4、通道5、通道6、通道7、通道0、通道1的顺序依次进行转换,并将转换结果依次放入6个结果寄存器中。要注意并不能间隔选择通道。
4 在HC12系列单片机中,当控制寄存器5中设置转换序列长度为4,MULT=0(即单通道转换)时,是在一个转换序列中对一个通道连续转换四次;而在S12系列中,当转换序列长度设置为1,MULT=0时,每进行一个序列的转换是对该通道转换一次,还是转换四次?
在S12系列中,当转换序列长度设置为1(S8C:S1C=0001),MULT=0时,只对一个通道进行一次转换。
5 关于控制寄存器ATD0CTL3中FIFO的使用
假定要转换的序列为3,即通道3、4、5,转换模式为连续转换(SCAN=1)
(1)当FIFO=0时,转换结果是存储在ATD0DR0-ATD0DR2中,还是存储在ATD0DR3-ATD0DR5中?
当一个序列转换结束后,下一个转换序列的结果还是存储在这几个对应寄存器中,对吗?
(2)当FIFO=1时,转换结果是存储在ATD0DR0-ATD0DR2中,还是存储在ATD0DR3-ATD0DR5中?
当一个序列转换结束后,下一个转换序列的结果是存储在紧接其后的几个对应寄存器中,循环存储(即存储到ATD0DR7后,返回ATD0DR0,在从ATD0DR0-ATD0DR7存储),对吗?
假定要转换的序列为3,即通道3、4、5,转换模式为连续转换(SCAN=1)
(1)当FIFO=0时,转换结果是存储在ATD0DR0-ATD0DR2中;当一个序列转换结束后,下一个转换序列的结果还是存储在这几个对应寄存器中。
(2)当FIFO=1时,第一次转换结果存储在ATD0DR0-ATD0DR2中;当一个序列转换结束后,下一个转换序列的结果是存储在紧接其后的几个对应寄存器中,循环存储(即存储到ATD0DR7后,返回ATD0DR0,再从ATD0DR0-ATD0DR7存储)。总之:FIFO=1时,第一个转换的结果保存在结果寄存器0中,而第一个转换的通道由CC CB CA决定,之后就按结果寄存器顺序递增存放,一直存放到结果寄存器7,然后再从0开始。而当前是哪个通道完成了转换,可由CCFx标志来查询;结果存入哪个寄存器,可由CC2 CC1 CC0来查询。
6 通道转换是不是通过设置这二个寄存器,ATDCTRL3中转换序列的长度来采集设置需要的通道数.还有ATDCTRL5中的MULT来设置启动多通道转换?
是的,ATDCTRL5设置成多通道转换后,ATDCTRL3设置采集的通道数,此外ATDCTRL5中还需要设置多通道采集的起始通道。比如采集7个通道,起始通道是1,那么就采集从1-7通道,如果起始通道是2,就采集2-7,还有0通道。
7 多通道转换应该是同时进行的吧?各个通道的转换结果分别放在哪个数据寄存器(这一点我非常困惑)?
多通道转换也不是同时的,可以看AD的系统框图,只有一个采样保持电路,前面通过8通道选择器来选择通道,所以不能同时,只是多通道一次采集过程可以连续连续采集多个通道。每个通道的结果都保存在各自的结果寄存器reslut registers中
8 MC9SDg128上面有16个AD通道,而寄存器上好像只能启动8个通道吧?另外8个通道该如何使用?
DG128是两个8通道的AD,看dg128的数据手册总的memory map,AD0的寄存器在基址的$0080-$009F 32个字节的地方, AD1的寄存器在基址的$0120-$013F 32个字节的地方。
ad转换序列长度是指什么~
AD转换是非常普遍的模块了,在8位或者16位的单片机上都有应用,在HCS12系列的单片机上内置了一个AD转换器,可用于8位或者10位的AD转换,但做不了DA转换。原理很简单,就不提了。
寄存器:
ATDCTL2 AD的电源开关、中断和外部触发信号。
ATDCTL3 AD转换的序列长度、结果寄存器是否采用先进先出方式以及冻结模式下的设置。
ATDCTL4 时钟频率、第二阶段采样的时间长度及AD转换的精度(8位或者10位)。
ATDCTL5 AD转换序列的类型和采样的模拟量输入通道。
ATDSTAT0 包括转换完成标志位、外部触发中断溢出标志位、先入先出模式位和转换结果标号位。
ATDTEST1 用于激活特殊通道
ATDSTAT1 包含一些转换完成标志位。
ATDDIEN AD转换输入使能寄存器
PORTAD 数据寄存器
ATDDR AD转换结果寄存器
主要各个位的介绍见数据手册。
附初始化头文件:
ATDCTL2=0B11000000;
//ATDCTL2.ADPU=1为打开转换电源开关
//ATDCTL2.AFFC=1为AD转换CCF自动清零位
ATDCTL3=0B00001011;
//ATDCTL3.S1C=1表示序列长度为1
//ATDCTL3.FIFO=0为非FIFO模式
//ATDCTL3.FRZ0~FRZ1=11表示立刻进入冻结模式
ATDCTL4=0B00000111;
//ATDCTL4.PRS4~PRS0 = 00111表示总线频率16分频
ATDCTL4&=0B01111111;
//ATDCTL4.SRES8=0 表示10转换精度
AD模拟量输入的参考电压由VRL、VRH两个引脚决定。数字量的存储要注意是向左对齐或者向右对齐,并且注意软件滤波时防止溢出
转换队列是指多个通道自动依次转换,长度就是自动转换的通道数
#18911401573#
freescale 9s12单片机中,实时时钟中断的作用是什么? - ******
#拔贴# 我也在寻找这个问题的解答.刚才在飞思卡尔技术社区看到的文章:在运行模式下实时中断功能经常用来产生基于外部振荡器分频的定期中断.如果它在停止模式中被使能,可以使用内部1kHz 时钟源将MCU 从停机2 模式唤醒,或者可以使用内部时钟或外部振荡器将MCU 从停机3 模式唤醒.系统实时中断状态和控制寄存器(SRTISC)的RTICLKS 位是用来选择这两种模式的.
#18911401573#
freescale单片机总线频率是怎么计算的 - ******
#拔贴# 对于S12系列单片机 是时钟乘以2
#18911401573#
有关单片机编译器的问题 - ******
#拔贴# 编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序.编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序.源程序一般为高级语言(High...
#18911401573#
玩单片机,里面有一句话是P0=~a.请问是什么意思.P0是二极管的引脚 - ******
#拔贴# a是什么类型? 8位的单片机,p0寄存器也只有8位,这样写很容易出问题. 举个例子,如果你定义的a不是char型的,是int型,那么取反后int的低8位变化后才给了p0. 最好你把完整程序贴出来吧.大家一起看看问题再哪. 通常编译器会给a一个初值0.~是取反的意思.第一次循环,a=0b 00000001,取反后 0b 11111110,输出到p0口,除了p0.0,其它都是高电平.第二次,p0 = 0b 11111101,第三次,p0 = 0b 11111100 ...以后若干次类似.比如你的LED是低电平亮,看LED的话,这事实上这就是一个二进制的累加过程. 明白了?
#18911401573#
at89s52单片机有自带的AD、DA吗?? - ******
#拔贴# S52没有! 现在很多单片机都有AD的,atmega pic,st7,freescale许多都有,不能只看有无AD还有看I/O口还有其他资源才能选.至于DA有的不多,不过如果你要求的精度不高的话,可以用PWM+滤波来做,大家好像都这么做,PWM,几乎是大部分单片机都有的.你要精度要求高就只好去看各公司单片机的选型手册了.或者外接DA了.
#18911401573#
8051单片机中,a表示一个register还是什么?? - ******
#拔贴# A是汇编里的称呼,在C语言里叫ACC,是累加器,一个特殊功能寄存器,地址:E0H.
#18911401573#
单片机怎样读取总线上的A/D? - ******
#拔贴# 不知道你用的是什么单片机,如果你用的是单片机内部的A/D的话,只要你相关的A/D寄存器设置正确,直接读取单片机A/D模块内的数据寄存器就行了
#18911401573#
freescale单片机和51的差别大吗? - ******
#拔贴# freescale单片机功能比51单片机强大,比如freescale的有PWM,SPI,I2C等,而一般的51没有这些,需要软件来仿真;其次,开发环境不同,freescale使用CodeWarier,可以在线调试程序,而51则采用Keil编写程序,并且要用专门的下载软件和...
#18911401573#
关于Arduino和Freescale K60的一些疑问. - ******
#拔贴# 1、atmega单片机是AVR单片机,并不是飞思卡尔单片机,是一块8位的单片机2、飞思卡尔智能车竞赛指定的芯片是飞思卡尔单片机,该单片机分了很多型号,有s12系列的等等3、每一款单片机都有自己的优势,飞思卡尔单片机的优势在于在一些智能车控制方面比较有优势,但是AVR单片机目前工控方面用的比较多,应为他有较大的灌电流加上单片机便宜,性价比高,飞思卡尔就不一样了,一块单片机最小系统开发板就要100多,所以只能说,优劣势都有吧!
#18911401573#
飞思卡尔单片机中 AD模块中转换队列长度 是什么意思?? - ******
#拔贴# 转换队列是指多个通道自动依次转换,长度就是自动转换的通道数