Re: pic18f4620的ad轉換值有問題
|
||||
---|---|---|---|---|
新會員
|
大家好,我找到問題了,主要是因為
adtemp = ADRESL + (ADRESH << 8); 雖然compiler有過,但是我發現這樣子ADRESH的值會是0X00,沒有辦法向左移8位元,所以導致我的高位元都是0X00。 謝謝大家的幫忙。
發表於: 2008/11/28 15:10
|
|||
|
Re: pic18f4620的ad轉換值有問題
|
||||
---|---|---|---|---|
版主
|
REGISTER 19-2: ADCON1: A/D CONTROL REGISTER 1
看一下 PIC18F4620 Data Sheet 第十九章的 10-bit A/D Module裡的 ADCON1 暫存器。
發表於: 2008/11/27 15:46
|
|||
|
Re: pic18f4620的ad轉換值有問題
|
||||
---|---|---|---|---|
新會員
|
參照:
------------------------------------------------------------- master您好,我有利用ad的函式庫 OpenADC( ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_12_TAD, ADC_REF_VDD_VSS & ADC_INT_OFF, ADC_2ANA ); 其中 "ADC_2ANA " 這個設定是選用 → analog:AN0-AN1 digital:AN2-AN15 不知道是不是您說的I/O 設定給Analog 程式碼。 然後我有在void main() 裡面的開頭設定了 TRISAbits.TRISA0 = 1; TRISAbits.TRISA1 = 1; 但是我的結果還是一樣..不知道是不是那裡出了問題,我卡了好久。
發表於: 2008/11/27 14:22
|
|||
|
Re: pic18f4620的ad轉換值有問題
|
||||
---|---|---|---|---|
資深會員
|
沒有看到將I/O設定給Analog的程式碼。
還有類比接腳要設成輸入。
發表於: 2008/11/27 8:39
|
|||
不要問我哪裡來,我只是個流浪天涯的工程師
|
||||
|
pic18f4620的ad轉換值有問題
|
||||
---|---|---|---|---|
新會員
|
各位先進大家好,我剛接觸18f4620單晶片並搭配使用zigbee的實驗板。
振盪器我選用HS。目前我只想單純的做ad轉換,然後傳送到電腦端上,我是先利用電源供應器送入3v的電壓給AN0,我所得到的值是 41 BD 00 42。41 與42是我自已設定的開頭與結尾,所以我收到的值為 0X00BD 。 雖然我試著改變輸入的電壓,但是 ADRESH 都是00,我提高電壓或降低電壓都是00。 如果說依照我們的公式 ( AD轉換的值 /0X0400 ) * 3.2V = 計算電壓 =0.59V 這樣子計算出來的電壓跟我電源供應器所提供的3V差很多,是不是我那裡搞錯了,還是那裡忽略到了,可以指導我嗎,謝謝。下面是我的程式。 =================================== #include<p18f4620.h> #include<usart.h> #include<adc.h> unsigned int Read_AD (unsigned char ch) { unsigned int adtemp; PIR1bits.ADIF = 0; ADCON0 = (ch << 2)|1; ADCON0bits.GO = 1; while(ADCON0bits.GO); PIR1bits.ADIF = 0; adtemp = ADRESL + (ADRESH << 8); return adtemp; } void wait (unsigned int t) { unsigned int i,j; for (i = 0; i < 10; i++ ) for(j = 0; j < t; t++); } void main() { unsigned int advalue; OpenUSART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH,25); OpenADC( ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_12_TAD, ADC_REF_VDD_VSS & ADC_INT_OFF, ADC_2ANA ); while(1) { WriteUSART(0x41); while(BusyUSART()); advalue = Read_AD(0); WriteUSART(advalue); while(BusyUSART()); WriteUSART(advalue >> 8); while(BusyUSART()); putcUSART( 0x42); while(BusyUSART()); wait(1); } }
發表於: 2008/11/26 20:57
|
|||
|