Forum: Mikrocontroller und Digitale Elektronik AD Wandler des PIC32 für 16 Kanäle


von Matthias M (Gast)


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);
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.