Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[dsPIC30F3014][MPLAB][C30] - ADC12 nie startuje

elektrolizak 20 Gru 2013 20:35 1200 0
  • #1 20 Gru 2013 20:35
    elektrolizak
    Poziom 9  

    Witam forumowiczów!

    Mam problem z uruchomieniem jakiegokolwiek próbkowania na moim PICu.
    Chcę wykonać 16 próbkowań, czyli zapełnić całkowicie bufor i zapisać wyniki w tablicy. Problemem jest to, że zawartość bufora wydaje się być niezmienna.

    Sprawdzałem to przesyłając tablicę UARTem do PC, jak również oglądam sobie zawartość bufora w okienku "Watch". Pracuję w MPLAB v8.92 z debuggerem ICD2. Na wejście AN5 podaję sygnał z fototranzystora, który widzi lampę (50Hz).

    Proszę co bardziej doświadczonych ludzi o sprawdzenie poprawności napisania kodu. Program prosty jak budowa cepa, przejrzysty, a jednak taki problem :|

    Z góry dzięki za pomoc!

    Code:

    //configuration bits set in program: XT*8 PLL; WDT off; Sw&Mon disabled;
     
    #define __dsPIC30F3014__
    #define FCY 20000000UL //10MHz * 8 PLL / 4
    #include <p30fxxxx.h>
    #include <adc12.h>
     
    #define LED1 LATDbits.LATD1
    #define LED9 LATDbits.LATD9
     
     
    int main(void)
    {
     
     
    ADPCFG = 0xFFFF;
    TRISB  = 0x0000;
    TRISF  = 0x0000;
    TRISD  = 0x0000;
    TRISC  = 0x0000;
    TRISA  = 0x0000;
     
    //*******ADC CONFIGURATION*****************************
    //ADCON1bits.ADON    //SET IN CODE//converter module on(1) or off(0)
    ADCON1bits.ADSIDL=0;    //stop converter in Idle Mode(1)
    ADCON1bits.FORM=1;      //data output form: 0-int| 1-sig int| 2-fract| 3-sig fract|
    ADCON1bits.SSRC=0b111;   //convertion trigger source (111-auto convert by Tad)
    ADCON1bits.ASAM=0;     //(1)samp. starts right after conv. is done| (0)samp begins when SAMP set
    //ADCON1bits.SAMP   //sample en. bit (1)is sampling| (0)SH amps are holding
    //ADCON1bits.DONE  //indicator only!//(1)conv is done
     
    ADCON2bits.VCFG=0;   //Vref configuration (0)AVdd/ss
    ADCON2bits.CSCNA=0;     //(1)scan input| (0)do not scan
    //ADCON2bits.BUFS      //only for splitted words in BUFM
    ADCON2bits.SMPI=0;   //interrupt per conversion (0)1i/1c| (1111)1i/16c
    ADCON2bits.BUFM=0;  //(0)16 word buffer| (1)2x8 word buffers
    ADCON2bits.ALTS=0;   //(1)MUXa & MUXb switching| (0)only MUXa
     
    ADCON3bits.SAMC=2; //Auto sample time bits (0)-0Tad| (11111)-31Tad
    ADCON3bits.ADRC=1; //conv clock src bit (1)internal RC| (0)sysclk derived 
    ADCON3bits.ADCS=14;    //A/D conversion clock sel bits




     
    ADCHSbits.CH0NB=0; //N
    ADCHSbits.CH0SB=0; //N
    ADCHSbits.CH0NA=0; //select Vref- for CH0- input
    ADCHSbits.CH0SA=5; //select AN5 for CH0+ input
     
    TRISBbits.TRISB5=1;  //set AN5 as input
     
    ADPCFGbits.PCFG5=0;    //AN5 in analog mode
     
    ADCSSL=0;   //skip all for input scan
    //*******END OF ADC CONFIGURATION*****************************************
     
     
    ADCON1bits.ADON=1;    //enable ADC module
     
     
    //*******SAMPLE AND SEND*************************************************
    int result[20];
     
    while(1){
     
    int i = 0;
    while( i<16 )      //while filles whole 16 word BUFFER
    {
    ADCON1bits.SAMP=1;      //START sampling + auto Tad convertion - (SMAP clear when conv. starts)
    while(ADCON1bits.SAMP);     //stop until sampling is done
    while(!ADCON1bits.DONE);   //stop until conversion is done
    i++;
     
    }
     
    result[1]=ADCBUF0;
    result[2]=ADCBUF1;
    result[3]=ADCBUF2;
    result[4]=ADCBUF3;
     
    result[5]=ADCBUF4;
    result[6]=ADCBUF5;
    result[7]=ADCBUF6;
    result[8]=ADCBUF7;
     
    result[9]=ADCBUF8;
    result[10]=ADCBUF9;
    result[11]=ADCBUFA;
    result[12]=ADCBUFB;
     
    result[13]=ADCBUFC;
    result[14]=ADCBUFD;
    result[15]=ADCBUFE;
    result[16]=ADCBUFF;
     
    LED9 = 1;
    //done!
    //*******END OF SAMPLE AND SEND************************
    //BREAKPOINT
    }
    }//eof main


    Dodano po 41 [minuty]:

    Ok, w końcu mi ulżyło. Źle zrozumiałem znaczenie bitu ADCON2bits.SMPI i zamiast wartości "15" była "0"; Wszystko działa, aż głupio mi zamykać temat :D

    0 0