ADC of FRDM - KL25 is not working

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

ADC of FRDM - KL25 is not working

跳至解决方案
2,373 次查看
laxmikanttiwari
Contributor I

Hey I am working on FRDM KL25z board.

I have written some code for ADC and DAC but it is not working. actually it is working on verylow voltage signal which is less than 100mVpp. would you suggest me what is wrong in my code?? I think something in ADC ref volt or in ADC res is wrong but i can't figure out.

#include <MKL25Z4.H>

#include "user_defs.h"

unsigned int h[21] = { 29,70,115,163,211,256,297,331,357,374,379,374,357,331,297,256,211,163,115,70,29}

unsigned int x[21] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void Init_ADC(void) {

  SIM->SCGC6 |= (1UL << SIM_SCGC6_ADC0_SHIFT);

  ADC0->CFG1 = 0x9C; // Select 16 bit resolution

  ADC0->SC2 = 0x00;

}

void Init_DAC(void) {

  // Init DAC output

  SIM->SCGC6 |= (1UL << SIM_SCGC6_DAC0_SHIFT);

  SIM->SCGC5 |= (1UL << SIM_SCGC5_PORTE_SHIFT);

  PORTE->PCR[DAC_POS] &= ~(PORT_PCR_MUX(7)); // Select analog

  // Disable buffer mode

  DAC0->C1 = 0;

  DAC0->C2 = 0;

  // Enable DAC, select VDDA as reference voltage

  DAC0->C0 = (1 << DAC_C0_DACEN_SHIFT) |

  (1 << DAC_C0_DACRFS_SHIFT);

}

void Result_Out(volatile unsigned int out_data) {

   

  DAC0->DAT[0].DATH = DAC_DATH_DATA1(out_data >> 8);

  DAC0->DAT[0].DATL = DAC_DATL_DATA0(out_data);

}

float Measure_ADC_Value(void) {

  volatile unsigned int res=0;

  unsigned int i=0,y=0;

  ADC0->SC1[0] = 0x00; // start conversion on channel 0

  while (!(ADC0->SC1[0] & ADC_SC1_COCO_MASK));

  res = ADC0->R[0]

  x[0] = res;

  for(i=0;i<21;i++)

  {

  y = y + h[20-i]*x[i];

  }

  for(i=20;i>0;i--)

  {

  x[i] = x[i-1];

  }

  return y/4096;

}

/*----------------------------------------------------------------------------

  MAIN function

*----------------------------------------------------------------------------*/

int main (void) {

  volatile unsigned int ADC_Res = 0.0;

  Init_DAC();

  Init_ADC();

  while (1) {

  ADC_Res = Measure_ADC_Value();

  ADC_Res = ADC_Res;

  Result_Out(ADC_Res);

  }

}

标记 (4)
1 解答
1,666 次查看
vicentegomez
NXP TechSupport
NXP TechSupport

Hi

Please check the attached code, this is a sample code that set the internal bandgap, you just need to set the proper channel for your applycation.

I hope this will help you.


Have a great day,
Vicente


-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

在原帖中查看解决方案

2 回复数
1,667 次查看
vicentegomez
NXP TechSupport
NXP TechSupport

Hi

Please check the attached code, this is a sample code that set the internal bandgap, you just need to set the proper channel for your applycation.

I hope this will help you.


Have a great day,
Vicente


-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

1,666 次查看
laxmikanttiwari
Contributor I

Thank You.. Mine code is also working after mode change...

0 项奖励
回复