This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1292NCPDT:ADC 测试配置问题。

Guru**** 1834820 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1111027/tm4c1292ncpdt-problems-with-the-adc-test-configuration

器件型号:TM4C1292NCPDT
大家好!

我在 Tiva ADC 函数方面遇到问题。 我将 ADC 采样序列配置为对12个通道进行采样、 
获得的数据将被单独处理并保存在 for 循环内的数组中、但我有一个问题:ADC 通道1 (AIN0)获得的数据
未保存在数组的位置0、而是将其保存在位置1。 for 循环被编程为在迭代0时配置通道0的采样序列
并将处理的数据保存在阵列的位置0;迭代1设置通道1采样序列并将处理的数据保存到阵列的位置1
等等。 如何将来自 ADC 通道0的数据存储在阵列的相应位置(位置0)?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您能显示您的代码吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    void STEP_ADC() //configura la secuencia de muestreo del adc
    {
       int i_adc;
         for(i_adc=0; i_adc<14; i_adc++)
        {
           ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR,0);
           ADCSequenceStepConfigure(ADC0_BASE, 0,0, i_adc|ADC_CTL_IE);//(paso 1)
           ADCSequenceStepConfigure(ADC0_BASE, 0,1, i_adc|ADC_CTL_IE);//(paso 2)
           ADCSequenceStepConfigure(ADC0_BASE, 0,2, i_adc|ADC_CTL_IE);//(paso 3)
           ADCSequenceStepConfigure(ADC0_BASE, 0,3, i_adc|ADC_CTL_IE);//(paso 4)
           ADCSequenceStepConfigure(ADC0_BASE, 0,4, i_adc|ADC_CTL_IE);//(paso 5)
           ADCSequenceStepConfigure(ADC0_BASE, 0,5, i_adc|ADC_CTL_IE);//(paso 6)
           ADCSequenceStepConfigure(ADC0_BASE, 0,6, i_adc|ADC_CTL_IE);//(paso 7)
           ADCSequenceStepConfigure(ADC0_BASE, 0,7, i_adc|ADC_CTL_IE|ADC_CTL_END);//(paso 8)
    
           ADCSequenceEnable(ADC0_BASE,0);
           ADCIntClear(ADC0_BASE,0); //limpia las banderas de interrupción del ADC
           ADCProcessorTrigger(ADC0_BASE,0); //indica que se usa el  _________ interno del micro
           while(!ADCIntStatus(ADC0_BASE,0,false))
             {
    
             }
           ADCSequenceDataGet(ADC0_BASE,0,buffer_ADC);//obtiene los datos capturados por el adc
    
            mu_T=(buffer_ADC[0]+buffer_ADC[1]+buffer_ADC[2]+buffer_ADC[3]+buffer_ADC[4]+buffer_ADC[5]+buffer_ADC[6]+buffer_ADC[7])/8;
            vol_T=mu_T*3.3/4096; //aqui hubo breakpoint
            RT=((3900*(3.3-vol_T))/vol_T);
            T=(1/(0.000634544+(0.000321866*log(RT))+(-0.000000306*pow(log(RT),3))))-273.15;//aqui hubo breakpoint
    
            arreglo[i_adc]=T; //aqui hubo breakpoint
         }
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 是的、这是功能。 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     在第7行至第13行、您有 ADC_CTL_IE。 您需要将其删除。 您只希望序列发生器中的最后一步、即步骤7启用中断。 否则、转换后的每个通道都会产生中断并相互单步执行。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    非常感谢您的帮助,在您的建议下,我能够解决这个问题:)
    
    如果没有太多的问题,您能更详细地解释一下中断吗?