AD Wandler des PIC32 für 16 Kanäle

Gast #1790338
Lesenswert?

Hallo,
ich habe ein Problem mit dem ADU des PIC32MX795F512H.Ich versuche alle 
16 analogen Kanäle  im alternating input Modus einzulesen.Es wird mir im 
dazugehörigen Puffer des ADU aber für jeden Eingang der gleiche Wert 
dargestellt.Im scan mode ist es mir möglich alle 8 Eingänge des MUXA zu 
verarbeiten. Es scheint als würde die Umschaltung zwischen MUXA und MUXB 
nicht zu funktionieren .Anbei noch der von mir verwendete code.Hoffe es 
kann mir jemand weiter helfen.

int main(void)
{

#define PARAM1  ADC_MODULE_ON | ADC_FORMAT_INTG | ADC_CLK_AUTO | 
ADC_AUTO_SAMPLING_ON


#define PARAM2  ADC_VREF_AVDD_AVSS | ADC_OFFSET_CAL_DISABLE | 
ADC_SCAN_OFF | ADC_SAMPLES_PER_INT_14 | ADC_ALT_BUF_ON | 
ADC_ALT_INPUT_ON

#define PARAM3  ADC_CONV_CLK_INTERNAL_RC | ADC_SAMPLE_TIME_12


#define PARAM4 
ENABLE_AN0_ANA|ENABLE_AN1_ANA|ENABLE_AN2_ANA|ENABLE_AN3_ANA|ENABLE_AN4_A 
NA|ENABLE_AN5_ANA|ENABLE_AN6_ANA|ENABLE_AN7_ANA|ENABLE_AN8_ANA|ENABLE_AN 
9_ANA|ENABLE_AN10_ANA|ENABLE_AN11_ANA|ENABLE_AN12_ANA|ENABLE_AN13_ANA|EN 
ABLE_AN14_ANA|ENABLE_AN15_ANA


#define PARAM5  SKIP_SCAN_AN0|SKIP_SCAN_AN1|SKIP_SCAN_AN2 |SKIP_SCAN_AN3 
|SKIP_SCAN_AN4|SKIP_SCAN_AN5|SKIP_SCAN_AN6|SKIP_SCAN_AN7|SKIP_SCAN_AN8 
|SKIP_SCAN_AN9 |SKIP_SCAN_AN10 |SKIP_SCAN_AN11 | SKIP_SCAN_AN12 
|SKIP_SCAN_AN13 |SKIP_SCAN_AN14 |SKIP_SCAN_AN15

CloseADC10();

INTEnableSystemMultiVectoredInt();

PORTSetPinsAnalogIn(IOPORT_B,BIT_0|BIT_1|BIT_2|BIT_3|BIT_4|BIT_5|BIT_6|B 
IT_7|BIT_8|BIT_9|BIT_10|BIT_11|BIT_12|BIT_13|BIT_14|BIT_15);

OpenADC10( PARAM1, PARAM2, PARAM3, PARAM4, PARAM5 );

SetChanADC10( 
ADC_CH0_NEG_SAMPLEA_NVREF|ADC_CH0_POS_SAMPLEA_AN2|ADC_CH0_POS_SAMPLEA_AN 
3|ADC_CH0_POS_SAMPLEA_AN4|
        ADC_CH0_POS_SAMPLEA_AN5 |ADC_CH0_POS_SAMPLEA_AN6 
|ADC_CH0_POS_SAMPLEA_AN7 |ADC_CH0_POS_SAMPLEA_AN8 |
        ADC_CH0_POS_SAMPLEA_AN9|
        ADC_CH0_NEG_SAMPLEB_NVREF|ADC_CH0_POS_SAMPLEB_AN10|ADC_CH0_POS_SAMPLEB_A 
N11|ADC_CH0_POS_SAMPLEB_AN12|
        ADC_CH0_POS_SAMPLEB_AN13|ADC_CH0_POS_SAMPLEB_AN14|ADC_CH0_POS_SAMPLEB_AN 
15);

mPORTDSetPinsDigitalOut(BIT_0|BIT_1|BIT_2|BIT_3|BIT_4|BIT_5|BIT_6|BIT_7| 
BIT_8|BIT_9|BIT_10|BIT_11);

ConfigIntADC10(ADC_INT_PRI_2 | ADC_INT_SUB_PRI_2 | ADC_INT_ON);

mAD1ClearIntFlag();

EnableADC10();

  while(1)
  {
  }

}

void __ISR(_ADC_VECTOR, ipl6) AdcHandler(void)
{

mAD1ClearIntFlag();

int Zahl=0,i=0,Zeit=0;
unsigned int result;
unsigned long int a=0;

a=8 * ((~ReadActiveBufferADC10() & 0x01));;
result = ReadADC10(a);
result2= ReadADC10(a+1);
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren