• slider image 442
  • slider image 497
  • slider image 498
  • slider image 499
  • slider image 500
  • slider image 502
:::


Browsing this Thread:   2 Anonymous Users






Re: dsPIC30F6012A的12位ADC的疑问???
#5
新會員
新會員


查看用戶資訊
多谢版主指点!

發表於: 2008/1/7 20:52
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F6012A的12位ADC的疑问???
#4
版主
版主


查看用戶資訊
1. 兩種方式適用的時機不一樣,高速轉換 < 500uS 時,可以用內部時續做自動取樣及轉換。但轉換速度較慢時就要考慮用 Timer3 的觸發轉換。原因是因為 System Clock 無法用 ADCON3<ADCS 5:0> 將Tcy 降的很低。

2. 那就直接掃描 10ch 後產生中斷,自己在 ADCBUF0 ~ADCBUF9 裡取出所要用的資料,這樣比較簡單。當然你可以用 Altemate 切換模式選擇 A/B 兩組的輸入切換,但這樣做比較麻煩,程式也較複雜。

發表於: 2008/1/7 10:43
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F6012A的12位ADC的疑问???
#3
新會員
新會員


查看用戶資訊

多谢版主,
但教材是10位AD,我用的是12位AD,只有一个S/H通道
看了教材之后还有两个问题请版主再来指点一下!

1.用Timer3方式和自动采样自动转换方式哪一种方式更好一点呢?
用Timer3方式时间更精准吗?
我用的自动采样自动转换方式是想省一个Timer3定时器资源
2.比如我想10路AD,(an0~an9)
我想只扫描8路,第一次是an0~an5,an6,an7,
第二次是an0~an5,an8,an9,这样反复,然后每8次中断一次
我这样在中断里切换扫描通道可以,时间能保存准确吗?
void InitADC(void)
{
ADCON1bits.ADON = 0;

ADCHS = 0x0000;

IPC2bits.ADIP = 7; // highest
IFS0bits.ADIF = 0;
IEC0bits.ADIE = 1;

ADPCFGbits.PCFG0 = 0; // an0~an9,diagal ad
ADPCFGbits.PCFG1 = 0;
ADPCFGbits.PCFG2 = 0;
ADPCFGbits.PCFG3 = 0;
ADPCFGbits.PCFG4 = 0;
ADPCFGbits.PCFG5 = 0;
ADPCFGbits.PCFG6 = 0;
ADPCFGbits.PCFG7 = 0;
ADPCFGbits.PCFG8 = 0;
ADPCFGbits.PCFG9 = 0;
ADPCFGbits.PCFG10 = 1;
ADPCFGbits.PCFG11 = 1;
ADPCFGbits.PCFG12 = 1;
ADPCFGbits.PCFG13 = 1;
ADPCFGbits.PCFG14 = 1;
ADPCFGbits.PCFG15 = 1;

ADCSSLbits.CSSL0 = 0; //first scan an0~an7
ADCSSLbits.CSSL1 = 0;
ADCSSLbits.CSSL2 = 0;
ADCSSLbits.CSSL3 = 0;
ADCSSLbits.CSSL4 = 0;
ADCSSLbits.CSSL5 = 0;
ADCSSLbits.CSSL6 = 0;
ADCSSLbits.CSSL7 = 0;
ADCSSLbits.CSSL8 = 1;
ADCSSLbits.CSSL9 = 1;
ADCSSLbits.CSSL10 = 1;
ADCSSLbits.CSSL11 = 1;
ADCSSLbits.CSSL12 = 1;
ADCSSLbits.CSSL13 = 1;
ADCSSLbits.CSSL14 = 1;
ADCSSLbits.CSSL15 = 1;

ADCON3bits.SAMC = 11; //Tsamp=11Tad,Tconv=14Tad
ADCON3bits.ADCS = 19; //Tad=10Tcy Tsamp=13.75us,Tconv=17.5us

ADCON2bits.VCFG = 0; // AVDD AVSS
ADCON2bits.CSCNA = 1; // Scan
ADCON2bits.SMPI = 7; //Pre8 interrupt
ADCON2bits.BUFM = 0; //16Word
ADCON2bits.ALTS = 0; //mux A

ADCON1bits.FORM = 0; //unsigned integer
ADCON1bits.SSRC = 9; //auto convert
ADCON1bits.ASAM = 1; //auto sample

ADCON1bits.ADON = 1;

}

void __attribute__ ((interrupt, no_auto_psv)) _ADCInterrupt(void)
{
IFS0bits.ADIF = 0;
if(!ADCSSLbits.CSSL8)
{
ADCSSLbits.CSSL0 = 0; //first scan an0~an7
ADCSSLbits.CSSL1 = 0;
ADCSSLbits.CSSL2 = 0;
ADCSSLbits.CSSL3 = 0;
ADCSSLbits.CSSL4 = 0;
ADCSSLbits.CSSL5 = 0;
ADCSSLbits.CSSL6 = 0;
ADCSSLbits.CSSL7 = 0;
ADCSSLbits.CSSL8 = 1;
ADCSSLbits.CSSL9 = 1;
ADCSSLbits.CSSL10 = 1;
ADCSSLbits.CSSL11 = 1;
ADCSSLbits.CSSL12 = 1;
ADCSSLbits.CSSL13 = 1;
ADCSSLbits.CSSL14 = 1;
ADCSSLbits.CSSL15 = 1;
}
else
{
ADCSSLbits.CSSL0 = 0; //second scan an0~an7
ADCSSLbits.CSSL1 = 0;
ADCSSLbits.CSSL2 = 0;
ADCSSLbits.CSSL3 = 0;
ADCSSLbits.CSSL4 = 0;
ADCSSLbits.CSSL5 = 0;
ADCSSLbits.CSSL6 = 1;
ADCSSLbits.CSSL7 = 1;
ADCSSLbits.CSSL8 = 0;
ADCSSLbits.CSSL9 = 0;
ADCSSLbits.CSSL10 = 1;
ADCSSLbits.CSSL11 = 1;
ADCSSLbits.CSSL12 = 1;
ADCSSLbits.CSSL13 = 1;
ADCSSLbits.CSSL14 = 1;
ADCSSLbits.CSSL15 = 1;
}
}

發表於: 2008/1/5 9:59
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F6012A的12位ADC的疑问???
#2
版主
版主


查看用戶資訊
因為你的取樣時間算蠻慢的,可以考慮使用 Timer3 的 Trigger 來觸發 ADC 做轉換。 在 dsPIC30F Peripheral Module - 10-bit ADC 裡的教材裡有利用 Timer3來觸發 ADC 的範例,也有用 Syatem Clock 做自動取樣的範例。

另外有關 Tsamp & Tconv 的說明在這獎以的後面也有詳細的說明與使用方式。
http://www.microchip.com.tw/modules/mydownloads/viewcat.php?cid=4

發表於: 2008/1/4 14:52
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


dsPIC30F6012A的12位ADC的疑问???
#1
新會員
新會員


查看用戶資訊
如果用自动采样自动转换方式的话,那个Tsamp与Tconv怎样设置才好一点!
比如我扫描10路AD,每路都是20ms内采样64个点,每10次采样/转换过程中断一次,
假设Fcy=8000000,我的程序如下:

#define CHANNUM 10
#define SAMPNUM 64

uint g_Samples[CHANNUM][SAMPNUM]
void InitADC1(void)
{
fAdcDone = FALSE;
ADCON1bits.ADON = 0;

ADCHS = 0x0000;

IPC2bits.ADIP = 7; // highest
IFS0bits.ADIF = 0;
IEC0bits.ADIE = 1;

ADPCFG = 0xC8D0; //an0~an3,an5,an8~an10,an12,an13
ADCSSL = 0x372F;

ADCON3bits.SAMC=6; //Tsamp=6Tad,Tconv=14Tad
ADCON3bits.ADCS=24; //Tad=12.5Tcy Tsamp=9.375us,Tconv=21.875us

ADCON2bits.VCFG = 0; // AVDD AVSS
ADCON2bits.CSCNA=1; // Scan
ADCON2bits.SMPI=9; //Pre10 interrupt
ADCON2bits.BUFM=0; //16Word
ADCON2bits.ALTS=0; //mux A

ADCON1bits.FORM=0; //unsigned integer
ADCON1bits.SSRC=9; //auto convert
ADCON1bits.ASAM=1; //auto sample

ADCON1bits.ADON = 1;
}


void InitADC2(void)
{
fAdcDone = FALSE;
ADCON1bits.ADON = 0;

ADCHS = 0x0000;

IPC2bits.ADIP = 7; // highest
IFS0bits.ADIF = 0;
IEC0bits.ADIE = 1;

ADPCFG = 0xC8D0; //an0~an3,an5,an8~an10,an12,an13 10 channel
ADCSSL = 0x372F;

ADCON3bits.SAMC=11; //Tsamp=11Tad,Tconv=14Tad
ADCON3bits.ADCS=19; //Tad=10Tcy Tsamp=13.75us,Tconv=17.5us

ADCON2bits.VCFG = 0; // AVDD AVSS
ADCON2bits.CSCNA=1; // Scan
ADCON2bits.SMPI=9; //Pre10 interrupt
ADCON2bits.BUFM=0; //16Word
ADCON2bits.ALTS=0; //mux A

ADCON1bits.FORM=0; //unsigned integer
ADCON1bits.SSRC=9; //auto convert
ADCON1bits.ASAM=1; //auto sample

ADCON1bits.ADON = 1;
}

void __attribute__ ((interrupt, no_auto_psv)) _ADCInterrupt(void)
{
IFS0bits.ADIF = 0;

static int iLoopCount = 0;

int i;
uint *p;
//pre10 interrupt get 10 adcvalue==ADCBUF0~ADCBUF9
p = (uint *) & ADCBUF0;
for(i = 0; i < CHANNUM; i++)
g_Samples[i][iLoopCount] = *p++;

// Cycle SAMPNUM=64 20ms
if(++iLoopCount >= SAMPNUM)
{
iLoopCount = 0;
fAdcDone = TRUE;
}
}

用InitADC1()方式设置的Tsamp和Tconv好
还是用InitADC2()方式设置的Tsamp和Tconv好呢?
Tsamp与Tconv的时间选择这个问题一直困扰着我?
喜欢哪位大侠给讲讲了?

發表於: 2008/1/4 13:34
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------