【问题标题】:How to setup a function for multiple ADC input channels on PIC18F26K22?如何在 PIC18F26K22 上设置多个 ADC 输入通道的功能?
【发布时间】:2021-05-19 01:42:40
【问题描述】:

我使用 PIC18f26k22 来简单地读取两个电位器(连接到模拟引脚 AN0 和 AN1)。使用单个锅很容易,但不止一个锅需要移位技术,我还没有清楚地理解。我确实浏览了互联网并找到了一个 ADC_Read() 函数。我对代码进行了一些更改,以便可以将其用于 PIC18F26K22。

问题是,即使我在 main 中使用该功能,也只有 ADC 通道 AN0 工作,但 AN1 通道没有响应(即它不会切换 LED)。 unsigned int ADC_Read(无符号字符通道)。在主函数中,int 'num' 和 'den' 分别用于读取每个模拟输入 AN0 和 AN1。我得到的唯一响应来自 num (AN0)。

unsigned int ADC_Read(unsigned char channel)
{
 if(channel > 7)              //Channel range is 0 ~ 7
 return 0;

 ADCON0 &= 0b11000000;              //Clearing channel selection bits
 ADCON0 |= channel<<2;        //Setting channel selection bits
 ADCON2bits.ACQT = 0b001;        // 2 Aquisition Time
 GO_nDONE = 1;                //Initializes A/D conversion
 while(GO_nDONE);             //Waiting for conversion to complete
 return ((ADRESH<<8)+ADRESL); //Return result
 }

【问题讨论】:

  • AN1 是否设置为模拟输入?

标签: microcontroller cpu-architecture pic pic18


【解决方案1】:

ADC 外的ADON 位位于ADCON0 寄存器的位 0 中,因此 您将在此处关闭您的 ADC:

ADCON0 &= 0b11000000;              //Clearing channel selection bits AND ADON

改成:

ADCON0 &= 0b10000011;              //Clearing channel selection bits

这只会重置通道位。知道您可以选择新频道。

ADCON0 |= channel<<2;        //Setting channel selection bits 

【讨论】:

  • 这正是那句话:“ADCON0 |= channel
  • 您不想关闭 ADON 位。 ADCON0 |= channel&lt;&lt;2只会设置频道,但会关闭 ADON。
猜你喜欢
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多