已回答假定已回答

用dsPIC33F以SPI讀取AD7606數據都為0

wangmigooo 在 2013-12-19 詢問的問題
最後回覆由adi_rock於2013-12-25提供

来自网友的提问:

 

小的是寫MIcrochip的dsPIC33FJ64GS606,並打算以SPI讀取AD7606-4的轉換值

但讀取到的值一直為0

也弄不清是接線問題還是程式問題

程式的話是照ADI網站上的程式碼範例改寫的

電路則是看datasheet上的serial mode條件所接的

線路圖和程式碼範例已上傳至附件

下面則是我所寫的程式碼

#include   "p33FJ64GS606.h"

 

#include  

#include 

#include

_FOSCSEL(FNOSC_FRC)  // Internal FRC with non PLL

_FOSC(FCKSM_CSECMD & OSCIOFNC_ON)   // Sw Enabled, Mon Disabled and OSCO pin has digital I/O function

_FWDT(FWDTEN_OFF)  // Watchdog Timer disabled

_FPOR(FPWRT_PWR128)   // POR Timer Value 128mSec

_FGS(GWRP_OFF)  // General Segment may be written

_FICD(ICS_PGD1 & JTAGEN_OFF);     // Use PGC1/EMUC1 and PGD1/EMUD1

 

unsigned char j, k;

unsigned int TempA, TempB, DoutA[3], DoutB[3];

unsigned char Busy;

 

int main(){

 

 

SPI2CON1 = 0x073B;

SPI2STAT = 0xA000;

 

// I/O Port設定,TRIS為設定資料流向(1:輸入 , 0:輸出)。Port為設定高、低電位(1:logic high , 0:logic low)

TRISGbits.TRISG9=0;

PORTGbits.RG9=1;//CS

TRISBbits.TRISB2=0;

PORTBbits.RB2=1;//CNVST

TRISBbits.TRISB3=0;

PORTBbits.RB3=0;//RESET

TRISGbits.TRISG6=0;

PORTGbits.RG6=1;//sck

TRISBbits.TRISB4=1;

PORTBbits.RB4=0;//doutA

TRISBbits.TRISB5=1;

PORTBbits.RB5=0;//doutB

TRISBbits.TRISB1=1;

PORTBbits.RB1=0;//busy

TRISBbits.TRISB8=0;

PORTBbits.RB8=1;//PAR/SER/BYTE SEL

TRISBbits.TRISB9=0;

PORTBbits.RB9=1;//STBY

TRISBbits.TRISB10=0;

PORTBbits.RB10=0;//RANGE

TRISBbits.TRISB11=0;

PORTBbits.RB11=1;//REF SELECT

 

 

while(1)

{

       PORTBbits.RB2=0;

Delay_1mS_Cnt;                                                                                                                                                     

        PORTBbits.RB2=1;

Delay_1mS_Cnt;

 

        Busy=PORTBbits.RB1; 

   while(Busy==1){

        Delay_1mS_Cnt;

        Busy=PORTBbits.RB1;

}

      PORTGbits.RG9=0;

       for(j=0; j<4; j++)

{

       TempA=0;

       TempB=0;

 

       for(k=0; k<16; k++){

         PORTGbits.RG6=0;

TempA=(TempA<<1) + LATBbits.LATB4;

TempB=(TempB<<1) + LATBbits.LATB5;

         LATGbits.LATG6=1; 

}

        DoutA[j]=TempA;

DoutB[j]=TempB;

}

       PORTGbits.RG9=1;

}

}

結果