gpt4 book ai didi

c - MCP3008树莓派ADC错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:46 26 4
gpt4 key购买 nike

从 mcp3008 ADC 读取数据时出现错误。当接收到 3.3V 输入时,下面的函数返回 127。由于它是一个 10 位 ADC,它应该返回 1023。

我已经正确定义了我的引脚号,并且包含了 stdio.h 和 wiringPi.h。感谢您的帮助。

int main(void) {

int adcValue = 0;

wiringPiSetup();

pinMode(csPin, OUTPUT);
pinMode(sclkPin, OUTPUT);
pinMode(mosiPin, OUTPUT);
pinMode(misoPin, INPUT);

while(1) {
delay(10);
adcValue = readADC(CHAN0);
if (adcValue == -1)
printf("Error reading from %i \n", CHAN0);
else
printf("Chan0: %i \n", adcValue);
}

}

int readADC(int adcChan) {

// Variables
unsigned char dataOut = 0;
unsigned char adcout = 0;
int i, j = 0;

if ((adcChan > 7) || (adcChan < 0)) {
return -1;
}

digitalWrite(csPin, HIGH);

digitalWrite(sclkPin, LOW);
digitalWrite(csPin, LOW);

dataOut = adcChan;
dataOut |= 0x18;
dataOut <<= 3;

for (i = 0; i < 5; i++) {
if (dataOut & 0x80) {
digitalWrite(mosiPin, HIGH);
} else {
digitalWrite(mosiPin, LOW);
}

dataOut <<= 1;
digitalWrite(sclkPin, HIGH);
digitalWrite(sclkPin, LOW);
}
adcout = 0;
for (j = 0; j < 12; j++) {
digitalWrite(sclkPin, HIGH);
digitalWrite(sclkPin, LOW);
adcout <<= 1;
if (digitalRead(misoPin)) {
adcout |= 0x1;
}
}

digitalWrite(csPin, HIGH);

adcout >>= 1;
return adcout;
}

最佳答案

您的 adcout 是一个 char 并且不能保存 10 位值。请改用 unsigned int。此外,您不应该使用 adcout >>= 1; 将您的值移回,它已经很好了。

关于c - MCP3008树莓派ADC错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557873/

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