關(guān)于HCS12(X)單片機(jī)AD的深層次的一些東西
關(guān)于AD,一直有人問一些東西,應(yīng)該是屬于AD比較深的東西,答應(yīng)總結(jié)一個(gè)貼子.
大部分來自中電網(wǎng)陳剛版主的精典問答,如果要用加速度傳感器,請看完下面的,如果想用好多路AD轉(zhuǎn)換請看完下面的.
一般小車可能不需要,因?yàn)橐话阌玫氖菃未无D(zhuǎn)換單通道無FIFO模式.
1為什么要多次轉(zhuǎn)換?
ATD模塊有8個(gè)結(jié)果寄存器,所以它的AD轉(zhuǎn)換有這樣的功能,就是對一個(gè)或多個(gè)通道連續(xù)進(jìn)行轉(zhuǎn)換,將結(jié)果順序放入這8個(gè)結(jié)果寄存器中。這樣用戶如果要取一個(gè)通道的平均值,或取多個(gè)通道的值,都很方便了,就不用軟件一次一次地去轉(zhuǎn)換了
2 ATDCTL3 那個(gè)S8C、S4C等決定的轉(zhuǎn)換序列長度是什么意思?
ATDCTL3中的S8C~S1C決定了一個(gè)轉(zhuǎn)換序列的長度,即一個(gè)轉(zhuǎn)換序列共轉(zhuǎn)換多少次。你可以選擇做一次AD轉(zhuǎn)換的過程,是對一個(gè)通道連續(xù)轉(zhuǎn)換多次,還是對多個(gè)通道連續(xù)進(jìn)行轉(zhuǎn)換,這由ATDCLT5的MULT位決定。
3 如果選擇了多通道,MULT=1,那么CC、CB、CA、只是控制第一個(gè)轉(zhuǎn)換的通道那么我就沒有找到該如何制定具體由哪幾個(gè)通道轉(zhuǎn)換的控制字。。。比如光要0、1、3三個(gè)通道轉(zhuǎn)換。。。難道本身轉(zhuǎn)換就是8個(gè)通道全部轉(zhuǎn)一遍的?
S8C~S1C就控制每輪進(jìn)行多少次轉(zhuǎn)換,最多為8。比如可以選擇為6,那么每6次轉(zhuǎn)換稱為一個(gè)序列。 如果選擇了多通道轉(zhuǎn)換,那么CC、CB和CA選擇首個(gè)轉(zhuǎn)換的通道,后面的通道按通道號排列。比如S8C~S1C選擇轉(zhuǎn)換數(shù)為6,MULT設(shè)為1,而CC、CB和CA選擇通道4,那么轉(zhuǎn)換開始后,AD模塊將按通道4、通道5、通道6、通道7、通道0、通道1的順序依次進(jìn)行轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果依次放入6個(gè)結(jié)果寄存器中。要注意并不能間隔選擇通道。
4 在HC12系列單片機(jī)中,當(dāng)控制寄存器5中S8CM=0(即一個(gè)轉(zhuǎn)換序列轉(zhuǎn)4次),MULT=0(即單通道轉(zhuǎn)換)時(shí),是在一個(gè)轉(zhuǎn)換序列中對一個(gè)通道連續(xù)轉(zhuǎn)換四次;而在S12系列中,當(dāng)轉(zhuǎn)換序列長度設(shè)置為1,MULT=0時(shí),每進(jìn)行一個(gè)序列的轉(zhuǎn)換是對該通道轉(zhuǎn)換一次,還是轉(zhuǎn)換四次?
在S12系列中,當(dāng)轉(zhuǎn)換序列長度設(shè)置為1(S8C:S1C=0001),MULT=0時(shí),只對一個(gè)通道進(jìn)行一次轉(zhuǎn)換。
5 關(guān)于控制寄存器ATD0CTL3中FIFO的使用
假定要轉(zhuǎn)換的序列為3,即通道3、4、5,轉(zhuǎn)換模式為連續(xù)轉(zhuǎn)換(SCAN=1)
(1)當(dāng)FIFO=0時(shí),轉(zhuǎn)換結(jié)果是存儲在ATD0DR0-ATD0DR2中,還是存儲在ATD0DR3-ATD0DR5中?
當(dāng)一個(gè)序列轉(zhuǎn)換結(jié)束后,下一個(gè)轉(zhuǎn)換序列的結(jié)果還是存儲在這幾個(gè)對應(yīng)寄存器中,對嗎?
(2)當(dāng)FIFO=1時(shí),轉(zhuǎn)換結(jié)果是存儲在ATD0DR0-ATD0DR2中,還是存儲在ATD0DR3-ATD0DR5中?
當(dāng)一個(gè)序列轉(zhuǎn)換結(jié)束后,下一個(gè)轉(zhuǎn)換序列的結(jié)果是存儲在緊接其后的幾個(gè)對應(yīng)寄存器中,循環(huán)存儲(即存儲到ATD0DR7后,返回ATD0DR0,在從ATD0DR0-ATD0DR7存儲),對嗎?
假定要轉(zhuǎn)換的序列為3,即通道3、4、5,轉(zhuǎn)換模式為連續(xù)轉(zhuǎn)換(SCAN=1)
(1)當(dāng)FIFO=0時(shí),轉(zhuǎn)換結(jié)果是存儲在ATD0DR0-ATD0DR2中;當(dāng)一個(gè)序列轉(zhuǎn)換結(jié)束后,下一個(gè)轉(zhuǎn)換序列的結(jié)果還是存儲在這幾個(gè)對應(yīng)寄存器中。
(2)當(dāng)FIFO=1時(shí),第一次轉(zhuǎn)換結(jié)果存儲在ATD0DR0-ATD0DR2中;當(dāng)一個(gè)序列轉(zhuǎn)換結(jié)束后,下一個(gè)轉(zhuǎn)換序列的結(jié)果是存儲在緊接其后的幾個(gè)對應(yīng)寄存器中,循環(huán)存儲(即存儲到ATD0DR7后,返回ATD0DR0,再從ATD0DR0-ATD0DR7存儲)。
6 通道轉(zhuǎn)換是不是通過設(shè)置這二個(gè)寄存器,ATDCTRL3中轉(zhuǎn)換序列的長度來采集設(shè)置需要的通道數(shù).還有ATDCTRL5中的MULT來設(shè)置啟動多通道轉(zhuǎn)換?
是的,ATDCTRL5設(shè)置成多通道轉(zhuǎn)換后,ATDCTRL3設(shè)置采集的通道數(shù),此外ATDCTRL5中還需要設(shè)置多通道采集的起始通道。比如采集7個(gè)通道,起始通道是1,那么就采集從1-7通道,如果起始通道是2,就采集2-7,還有0通道。
7 多通道轉(zhuǎn)換應(yīng)該是同時(shí)進(jìn)行的吧?各個(gè)通道的轉(zhuǎn)換結(jié)果分別放在哪個(gè)數(shù)據(jù)寄存器(這一點(diǎn)我非常困惑)?
多通道轉(zhuǎn)換也不是同時(shí)的,可以看AD的系統(tǒng)框圖,只有一個(gè)采樣保持電路,前面通過8通道選擇器來選擇通道,所以不能同時(shí),只是多通道一次采集過程可以連續(xù)連續(xù)采集多個(gè)通道。每個(gè)通道的結(jié)果都保存在各自的結(jié)果寄存器reslut registers中
8 MC9SDg128上面有16個(gè)AD通道,而寄存器上好像只能啟動8個(gè)通道吧?另外8個(gè)通道該如何使用?
DG128是兩個(gè)8通道的AD,看dg128的數(shù)據(jù)手冊總的memory map,AD0的寄存器在基址的$0080-$009F 32個(gè)字節(jié)的地方, AD1的寄存器在基址的$0120-$013F 32個(gè)字節(jié)的地方。
評論