ADC of FRDM - KL25 is not working

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

ADC of FRDM - KL25 is not working

ソリューションへジャンプ
2,396件の閲覧回数
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,689件の閲覧回数
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,690件の閲覧回数
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,689件の閲覧回数
laxmikanttiwari
Contributor I

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

0 件の賞賛
返信