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.
您好!
因此、我只想在具有延迟的 while 环路中读取引脚 P6.5 (A5)上的电压值。
我的时钟初始化为 MCLK 为20MHz、SMCLK 为10MHz、ACLK 为32k、所有这些都经过测试(我实际上已根据此时钟完成了基于 SPI 的图形 LCD 驱动程序、确保其正常工作)
这就是代码:
void adc_init (void) { P6SEL|=0x20;//P6.5不是 GPIO P8DIer&=~0x20;//P6.5为输出 ADC12CTL0&=~0x0002;//ADC12_A 禁用转换 ADC12ENC ADC12CTL0&=~0x0010;//ADC12_A 关闭 ADC12ON ADC12CTL0|=0x0400;//采样保持时间= 64个 ADC12CLK 周期 //采样定时器需要 SHI 信号的上升沿来触发每个采样和转换。 REFCTL0&=~0x0080;//REFMSTR=0、基准系统在可用时由 ADC12_A 模块内的传统控制位控制 ADC12CTL0|=0x0020;//ADC12_A 基准发生器打开。 在带有 REF 模块的器件中、这个位只有在 REF 模块的 REFMSTR 位被设定为0时才有效 ADC12CTL0|=0x0040;//ADC12_A 是基准发生器电压并且= 2.5V、这个位只有在 REF 模块的 REFMSTR 位被设定为0时才有效 //ADC12SC 开始采样和转换 ADC12CTL1|=0x5000;//转换起始地址为 ADC12MEM5 //ADC12_A 采样保持源选择为 ADC12SC 位 //ADC12_A 采样保持脉冲模式选择:SAMPCON 信号来源于采样输入信号 ADC12CTL1|=0x00E0;//ADC12_A 时钟分频8 ADC12CTL1|=0x0180;//ADC12_A 时钟源为 SMCLK //单通道、单次转换 ADC12CTL2|=0x0100;//ADC12_A 预分频器。 该位将选定的 ADC12_A 时钟源预分频4 ADC12CTL2|=0x0080;//温度传感器关闭 ADC12MCTL5|=0x0010;ADC12MCTL5&=~0x0060;//VR+= VREF+和 VR-= AVSS ADC12MCTL5|=0x0005;ADC12MCTL5&=~0x0009;//通道选择为 A5 __DELAY_CYCLES (100000); }
无符号短整型 ADC_Read (void) { 无符号短整型值= 0; ADC12CTL0|=0x0010;//ADC12_A 在 ADC12ON 上 ADC12CTL0|=0x0001;//开始采样和转换 ADC12SC ADC12CTL0|=0x0002;//ADC12_A 启用转换 ADC12ENC //__delay_cycles (2000); while (((ADC12CTL1&0x0001)=1); 值= ADC12MEM5; 返回值; }
这在主函数中
while (1) { volatile unsigned short value_for_adc= adc_read (); _DELAY_CYCLES (2000000); }
我没有得到真正的值、实际上我得到的是零!
我不关心我们是否将基准更改为 VCC、但我只是希望它连接到 ADC 模块2.5V 基准。
我的问题在哪里?
>
ADC12CTL0|=0x0001;
//start sample and conversion ADC12SC
>
ADC12CTL0|=0x0002;
//ADC12_A enable conversion ADC12ENC
不是真的。 该寄存器的条件是 ADC12END 应该仍然为0以更改任何位、因此当我尝试向它们轻扫 while ()时、循环会一直运行
您好!
这是一个奇怪的问题、因为您的应用非常简单、可用于 ADC。
我建议您在 读取转换结果之前更改用于检查 ADC10BUSY 位的代码、以检查 ADC12IFG5位、该位 在 ADC10MEM5存储器寄存器加载转换结果时置位。
while (((ADC12CTL1&0x0001)=1); 值= ADC12MEM5;
您可以参考具有 ADC 示例代码的 MSP430F5529外设示例。
您可能还需要添加:
> ADC12CTL1 |= 0x200;
因为 SC 在这么短的时间内处于开启状态。
----------
>ADC12MCTL5|=0x0005;ADC12MCTL5&=~0x0009;//通道选择为 A5
这应该是:
>ADC12MCTL5|=0x0005;ADC12MCTL5&=~0x0008;//通道选择为 A5
----------
此外、由于 我在上面描述的内容、读数将会出错。
[编辑:固定措辞]
----------
[编辑:标注为通过:]
>ADC12CTL1|=0x0180;//ADC12_A 时钟源为 SMCLK
与评论相反、这设置(离开) ADCCLK=ADC12OSC、而不是 SMCLK。 我(再次)建议您使用 msp430.h 中的位名称
您好!
我已经听不到您的意见了一周,因此我假设您能够解决您的问题。 如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。 如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。