Forum: Mikrocontroller und Digitale Elektronik Mehrere AD-Wandler vom MCB4300 nutzen


von MaxK (Gast)


Lesenswert?

Hallo,

ich habe eine Frage bezüglich dem AD-Wanlder vom MCB4300-Controller.
Der Controller hat zwei AD-Wandler (AD0 und AD1 mit je 8 Kanälen).

Und zwar wenn ich nur den AD0-Wandler - Channel 0 programmiere, 
funktioniert es einwandfrei.

Jedoch möchte ich den AD0-Wandler - Channel 1 zeitgleich nutzen bzw. 
überhaupt nutzen können.

Hat jemand eventuell eine Ahnung wie man das realisieren kann oder 
eventuell eine Erfahrungen mit dem AD-Wandler vom MCB4300?

Ich bin noch neu in dieser Sache und bräuchte Hilfe in dieser 
Angelegenheit.

Das sind die verwendeten Funktionen:



int32_t ADC_Initialize (void) {

  /* Enable ADC0 clock */
  LPC_CCU1->CLK_APB3_ADC0_CFG = CCU_CLK_CFG_AUTO | CCU_CLK_CFG_RUN;
  while (!(LPC_CCU1->CLK_APB3_ADC0_STAT & CCU_CLK_STAT_RUN));

  /* Configure ADC0_0 */
  LPC_ADC0->CR = (1 <<  1) |            /* Select ADC0_1 pin for 
conversion */
                 (2 <<  8) |            /* 12MHz / (2+1) = 4MHz */
                 (1 << 21) ;            /* ADC is operational */

  return 0;
}



int32_t ADC_StartConversion (void) {

  LPC_ADC0->CR |= (1 << 24);            /* Start conversion */

  return 0;
}



int32_t ADC_GetValue (void) {

  if (AD_done) {
    AD_done = 0;
    return AD_last;
  }
  return -1;
}



void ADC0_IRQHandler (void) {

  LPC_ADC0->GDR;                            /* Clear IRQ request flag */
  AD_last = (LPC_ADC0->DR[1] >> 6) & 0x3FF; /* Read value and clear IRQ 
*/
  AD_done = 1;
}

von MaxK (Gast)


Lesenswert?

Bei der obigen Funktion habe ich einen Teil vergessen anzugeben. Und 
zwar den "Enable ADC0 Channel 1 interrupt".

int32_t ADC_Initialize (void) {

  /* Enable ADC0 clock */
  LPC_CCU1->CLK_APB3_ADC0_CFG = CCU_CLK_CFG_AUTO | CCU_CLK_CFG_RUN;
  while (!(LPC_CCU1->CLK_APB3_ADC0_STAT & CCU_CLK_STAT_RUN));

  /* Configure ADC0_1 */
  LPC_ADC0->CR = (1 <<  1) |            /* Select ADC0_1 pin for 
conversion   */
                 (2 <<  8) |            /* 12MHz / (2+1) = 4MHz 
*/
                 (1 << 21) ;            /* ADC is operational 
*/

  /* Enable ADC0 Channel 1 interrupt */
  LPC_ADC0->INTEN |=  (1 << 1);
  NVIC_EnableIRQ (ADC0_IRQn);

  return 0;
}

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.