gpt4 book ai didi

c - 查看代码以读取外部 adc 值

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:22 25 4
gpt4 key购买 nike

我最近开始使用 AVR 微 Controller 。我正在使用 ATmega32-A 微 Controller 。我已经连接了一个外部 ADC(AD7798)。我想使用 SPI 通信读取外部 ADC 值。我已经尝试了很多,但我无法获得 ADC 值。我的项目是我必须使用带有可编程波形发生器的微 Controller 来生成波形。我成功地做到了这一点并将这个信号传递给传感器。我想从 ADC 读取传感器输出。我在下面附上了简单的电路图。我写的代码是这样的

// I have initialized PORTB like this

PORTB=0x00;
DDRB=0xBF;

// SPI initialisation
// SPI clock rate fck/16
// SPI master
// SPI MSB first
// SPI CPOL = 1, CPHA = 1

SPCR=0x5D;
PORTB.3 = 1;

void main (void){

printf("adc value :%x\n",ReadAd());

}

我把所有函数写在另一个文件里

我已经阅读了数百次数据表,但我仍然能够读取 ADC 值。我很困惑我在做什么错误。我检查了每个引脚,并使用示波器检查了 ADC 输入引脚,我得到 0.6V 输入信号。请帮我解决这个问题。 Tommarow 是这个项目的最后期限。请任何人帮助我阅读 ADC 值。

提前致谢

最佳答案

我无法查明问题所在,但我注意到以下几点可能会有所帮助:

  • 查看波形发生器芯片对 SDATA 线的作用。当您使用 ADC 时,它需要是高阻抗的,因为它们共享同一条总线 (MOSI)。确保芯片并不总是驱动总线,否则您的 ADC 通信将永远无法工作。

  • 芯片选择线上没有上拉电阻,这可能会导致 ADC 在 uC 加电时进入异常状态等。您可能需要在 portb 3 上启用内部上拉和 4,使用 atmega32 数据表(第 50 页)中的信息:

"If PORTxn is written logic one when the pin is configured as an input pin, the pull-up >resistor is activated"

  • 确保您的 SPI 时钟极性和相位与 ADC 的通信协议(protocol)匹配,并且 ADC 支持硬件 SPI 的一次 8 位通信

  • 您的 ChipSelectAD 函数有一行可能是不必要的,但也许我只是不知道当该位设置为输出时读取 pin 的目的

    "while(PINB.3); //Wait for chip select pin"

  • ADC 的引脚接线是否正确?该图未显示任何电源或引用电压连接。

  • 可能会降低您的 SPI SCLK 频率,直到您确定一切正常,尽管看起来 ADC 可以处理相当高的输入时钟速度。

  • 确保 adc 读取发生在 16 位值上时左移...看起来 SPI 读取的 8 位字符结果实际上被移动了 8 次,使其为零,除非编译器自动向上转换类型。

关于c - 查看代码以读取外部 adc 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com