Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pic32mx-ADC problem

[es] :: Elektronika :: Mikrokontroleri :: Pic32mx-ADC problem

[ Pregleda: 1700 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mnn
sm

Član broj: 85435
Poruke: 723
*.dynamic.isp.telekom.rs.



+25 Profil

icon Pic32mx-ADC problem21.11.2013. u 20:59 - pre 126 meseci
Treba da očitam 6 analognih ulaza na Pic32 i nikako mi ne uspeva da očitam više od dva ulaza.Probao ovo ,ono... i nikako mi ne ide .Gledao na netu primere i svi su manje više isti ,ali kod mene ne ide.
Evo i dela koda pa možda neko vidi što ja ne vidim ili ne znam.
Code:

/* 
 * in_1 RB3/AN5
 * in_2 RB2/AN4
 * in_3 RB1/AN3
 * in_4 RB0/AN2
 * in_5 RA1/AN1
 * in_6 RA0/AN0
 */
    //---------------------------------------------
    mPORTBSetPinsAnalogIn(BIT_0 | BIT_1 | BIT_2 | BIT_3); 
    mPORTASetPinsAnalogIn(BIT_0 | BIT_1);
    //    -------------------------------------------------------
    

                               // define setup parameters for OpenADC10
                              //     Turn module on | ouput in integer | trigger mode auto | enable autosample
#define PARAM1  ADC_FORMAT_INTG | ADC_CLK_AUTO | ADC_AUTO_SAMPLING_ON


                        // define setup parameters for OpenADC10
                       / /     ADC ref external    | disable offset test    | disable scan mode | perform 2 samples | use dual buffers | use alternate mode
#define PARAM2  ADC_VREF_AVDD_AVSS | ADC_OFFSET_CAL_DISABLE | ADC_SCAN_OFF | ADC_SAMPLES_PER_INT_2 | ADC_ALT_BUF_ON | ADC_ALT_INPUT_ON

                            // define setup parameters for OpenADC10
                           //use ADC internal clock | set sample time
#define PARAM3  ADC_CONV_CLK_INTERNAL_RC | ADC_SAMPLE_TIME_15

                            // define setup parameters for OpenADC10
                            //              
#define CONFIGPORT    ENABLE_AN0_ANA|ENABLE_AN1_ANA|ENABLE_AN2_ANA|ENABLE_AN3_ANA|ENABLE_AN4_ANA|ENABLE_AN5_ANA   

#define CONFIGSCAN SKIP_SCAN_AN7|SKIP_SCAN_AN8|SKIP_SCAN_AN9|SKIP_SCAN_AN10|SKIP_SCAN_AN11|SKIP_SCAN_AN12  
    
    
    CloseADC10();            // Ensure the ADC is off before setting the configuration

    SetChanADC10(ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN0 | ADC_CH0_NEG_SAMPLEB_NVREF | ADC_CH0_POS_SAMPLEB_AN1 |
                ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN2 | ADC_CH0_NEG_SAMPLEB_NVREF | ADC_CH0_POS_SAMPLEB_AN3|
                ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN4 | ADC_CH0_NEG_SAMPLEB_NVREF | ADC_CH0_POS_SAMPLEB_AN5);
    //----------------------------------------------------------
    OpenADC10(PARAM1, PARAM2, PARAM3, CONFIGPORT, CONFIGSCAN); // configure ADC using the parameters defined above
                                  // enable multi-vector interrupts
    INTEnableSystemMultiVectoredInt();
    EnableADC10(); // Enable the ADC
    
    while (1) {

        mPORTBSetBits(BIT_5);
        while (i--);
        while (!mAD1GetIntFlag()) {
            // wait for the first conversion to complete so there will be vaild data in ADC result registers
        }
        offset = 8 * ((~ReadActiveBufferADC10() & 0x01));
        
        value[1] = ReadADC10(offset);
        value[2] = ReadADC10(offset + 1);
        value[3] = ReadADC10(offset + 2);
        value[4] = ReadADC10(offset + 3);
        value[5] = ReadADC10(offset + 4);
        value[6] = ReadADC10(offset + 5);

        mAD1ClearIntFlag();

        mPORTBClearBits(BIT_5);
        
        //-----------------
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Pic32mx-ADC problem21.11.2013. u 21:43 - pre 126 meseci
u scan modu bi trebalo da citas to iz interapta mada teoretski moze i ovako .. ne znam koji ti je pic tacno da pogledam datasheet ali ako se secam vecina 32mx ima 2 multipleksera a u scan modu koristi samo prvi, ne secam se kako se koristi drugi multiplexer iz scan moda (bese moze ali nesto komplikovano).

e sad ono sto vidim na prvi pogled da mi ne deluje ok je:


Citat:
mnn:
#define PARAM2 ADC_VREF_AVDD_AVSS | ADC_OFFSET_CAL_DISABLE | ADC_SCAN_OFF | ADC_SAMPLES_PER_INT_2 | ADC_ALT_BUF_ON | ADC_ALT_INPUT_ON


Ti ovde kazes da trigne interrupt na svaka dva sempla a onda:

Citat:
mnn:
Code:

        while (!mAD1GetIntFlag()) {
            // wait for the first conversion to complete so there will be vaild data in ADC result registers
        }
        offset = 8 * ((~ReadActiveBufferADC10() & 0x01));
        
        value[1] = ReadADC10(offset);
        value[2] = ReadADC10(offset + 1);
        value[3] = ReadADC10(offset + 2);
        value[4] = ReadADC10(offset + 3);
        value[5] = ReadADC10(offset + 4);
        value[6] = ReadADC10(offset + 5);



citas 6 komada. dakle kako citas 6 komada ako su samo 2 gotova? zasto umesto ADC_SAMPLES_PER_INT_2 ne stavis ADC_SAMPLES_PER_INT_6 ?
 
Odgovor na temu

mnn
sm

Član broj: 85435
Poruke: 723
*.dynamic.isp.telekom.rs.



+25 Profil

icon Re: Pic32mx-ADC problem22.11.2013. u 19:06 - pre 126 meseci
Proradilo ,
Bogdane dobro si primetio ADC_SAMPLES_PER_INT_2 a tražio sam šest ulaza.Prešao sam preko toga misleći da se odnosi da on svaki kanal dva puta skenira i nisam više na to obraćao pažnju.Još sam nešto menjao i evo podešavanja sa kojima radi šest ulaza .
Code:

/******************************************************************/
#define PARAM1  ADC_FORMAT_INTG | ADC_CLK_AUTO | ADC_AUTO_SAMPLING_ON|ADC_SAMP_ON
#define PARAM2  ADC_VREF_AVDD_AVSS | ADC_OFFSET_CAL_DISABLE | ADC_SCAN_ON | ADC_SAMPLES_PER_INT_6 | ADC_ALT_BUF_ON | ADC_ALT_INPUT_OFF
#define PARAM3  ADC_CONV_CLK_INTERNAL_RC | ADC_SAMPLE_TIME_15
#define CONFIGPORT    ENABLE_AN0_ANA|ENABLE_AN1_ANA|ENABLE_AN2_ANA|ENABLE_AN3_ANA|ENABLE_AN4_ANA|ENABLE_AN5_ANA 
#define CONFIGSCAN SKIP_SCAN_AN7|SKIP_SCAN_AN8|SKIP_SCAN_AN9|SKIP_SCAN_AN10|SKIP_SCAN_AN11|SKIP_SCAN_AN12
/************************************************************************/
SetChanADC10(ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN0 |
             ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN1 |
             ADC_CH0_NEG_SAMPLEB_NVREF | ADC_CH0_POS_SAMPLEB_AN2 |
             ADC_CH0_NEG_SAMPLEB_NVREF | ADC_CH0_POS_SAMPLEB_AN3 |
             ADC_CH0_NEG_SAMPLEB_NVREF | ADC_CH0_POS_SAMPLEB_AN4 |
             ADC_CH0_NEG_SAMPLEB_NVREF | ADC_CH0_POS_SAMPLEB_AN5);
             
OpenADC10(PARAM1, PARAM2, PARAM3, CONFIGPORT, CONFIGSCAN); 

 EnableADC10(); 
 /*********************************************************************/
 while (!mAD1GetIntFlag()) {
            // wait for the first conversion to complete so there will be vaild data in ADC result registers
        }
    
 offset = 8 * ((~ReadActiveBufferADC10() & 0x01));

value[1] = ReadADC10(offset);
        value[2] = ReadADC10(offset + 1);
        value[3] = ReadADC10(offset + 2);
        value[4] = ReadADC10(offset + 3);
        value[5] = ReadADC10(offset + 4);
        value[6] = ReadADC10(offset + 5);

        mAD1ClearIntFlag(); 

 /********************************************************************/
 
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Pic32mx-ADC problem

[ Pregleda: 1700 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.