你好,支持,
我有一个问题与adc通道P03。
测量的adc通道P00, P01, P02工作良好,但与通道P03我总是得到一个错误的值。
我使用的电路板是Da14580的DK-Basic-Kit。
以下是我的代码:
/ / ADC配置
#定义GPIO_ADC1_PORT GPIO_PORT_0
#定义GPIO_ADC1_PIN GPIO_PIN_1
#定义GPIO_ADC0_PORT GPIO_PORT_0
#定义GPIO_ADC0_PIN GPIO_PIN_0
#定义GPIO_ADC2_PORT GPIO_PORT_0
#定义GPIO_ADC2_PIN GPIO_PIN_2
#定义GPIO_ADC3_PORT GPIO_PORT_0
#定义GPIO_ADC3_PIN GPIO_PIN_3
Reserve_gpio (adc_pin1, gpio_adc1_port, gpio_adc1_pin, pid_adc);
Reserve_gpio (adc_pin0, gpio_adc0_port, gpio_adc0_pin, pid_adc);
Reserve_gpio (adc_pin2, gpio_adc2_port, gpio_adc2_pin, pid_adc);
Reserve_gpio (adc_pin3, gpio_adc3_port, gpio_adc3_pin, pid_adc);
GPIO_ConfigurePin(GPIO_ADC1_PORT,GPIO_ADC1_PIN, INPUT, PID_ADC, false);
GPIO_ConfigurePin(GPIO_ADC0_PORT,GPIO_ADC0_PIN, INPUT, PID_ADC, false);
GPIO_ConfigurePin(GPIO_ADC2_PORT,GPIO_ADC2_PIN, INPUT, PID_ADC, false);
GPIO_ConfigurePin(GPIO_ADC3_PORT,GPIO_ADC3_PIN, INPUT, PID_ADC, false);
// adc采样函数
uint16_t adc_read_P03_channel(空白)
{
uint16_t adc_sample adc_sample2;
adc_init (GP_ADC_SE 0 GP_ADC_ATTN3X);
adc_enable_channel (ADC_CHANNEL_P03);
adc_sample = adc_get_sample ();
adc_init (GP_ADC_SE 0 GP_ADC_ATTN3X);
adc_enable_channel (ADC_CHANNEL_P03);
adc_sample2 = adc_get_sample ();
Adc_sample = (adc_sample2 + Adc_sample);
adc_disable ();
返回adc_sample
}
问候
大卫
你好大卫,
我已经尝试了同样的实现在我的一边,我得到了适当的值在一个基本的DK。我所做的所有不同的是打印读取的值,并且我在app_validate_sleep回调以重复测试函数。
也许你可以尝试在启动配置步骤中校准ADC,或者在adc_init就像画在adc_get_vbat_sample.看看你是否能得到更好的结果。
注意:另外,我注意到在您的代码中,您返回了添加的示例,但没有除以2。如果这不是你想做的,我想提一下。
请让我知道,如果你仍然有这个问题,可能会有更多的见解,对这个问题。
最好的
LC_DialoggydF4y2Ba
谢谢你的快速回复。
我什么都试过了,都没用。
它不重要,如果我采取测量1V或3V的P03, adc显示一个随机值,但它总是大约相同的范围。我检查了没有信号的引脚的电压,我得到0V,所以没有偏移。
其他通道与我的实现一起工作,所以我认为对话或通道P03的配置是错误的。
我更改了ble外设示例的代码。
这个别针上有我不知道的配置吗?
谢谢你的建议。
你说的对,我是没有除后的加法,但是我没有影响错的通道。
问候
大卫
你好大卫,
我将在这里寻找更多可能的问题。但是,你能不能试着用Empty_Peripheral_Template项目并测试此实现。这个项目没有所有不必要的操作,有时可能会干扰和优先。
另外,如何调用这个函数。是在启动过程中或启动后的某个时刻重复调用或只调用一次函数。
最好的
LC_Dialogg
你好,信用证,
我修改了ble外设示例,以采取adc测量并通过ble将其发送到计算机。我使用类似于示例中的app_adcvall_timer_cb_handler函数每秒钟发送一次值。
我用空外设模板上的所有通道测试adc &另外用Uart作为输出的修改电池示例。
结果总是一样的。
通道P00, P01, P02显示正确的值(1V, 2V, 3V),而通道P03显示相同的值(二进制格式:1110001100)。最后两位的值不同。所以对P03进行测量。
我还检查了引脚P03到芯片的接触,一切正常。
这个通道是否可能在芯片内部有任何损坏?
最好的问候,
大卫
你好大卫,
这是非常奇怪的,只有P03频道显示了奇怪的行为。我们在580的ADC上还没有见过这样的问题。在过去有一些百分比的准确性问题,但没有像这样。说到这里,我想确认一些与实现相关的事情。
1.这个引脚P03是否用于任何其他目的?主要是闪存的CS引脚。这可能会造成一些干扰的引脚,因为它是加载。
2.你能在不同的开发工具包上测试这个吗?这是为了排除任何硬件相关的问题。
3.你可以用3倍衰减模式的ADC进行测试吗禁用检查结果是否有所改善。
目前还不清楚到底是什么原因导致了这个问题,但我会在我探究这个问题的过程中让你知道。
最好的
LC_DialoggydF4y2Ba
嗨LC-Dialog,
1.我也是这么想的,但是我检查了所有的GPIO预约和配置。我什么也找不到。
2.如果没有解决方案,我将通过另一个14580芯片,并先测试这个。
3.在通道P03上没有3x衰减我得到最高的值(1111111111),有3x衰减我得到大约3,2V(1110001100, 1110001101, 1110001011)。我创造什么信号并不重要。
我还用示波器检查了引脚以及与芯片的连接。没有抵消。而不是作为输出的值。
有没有可能你可以得到这个3,2v与软件或任何GPIO配置?
否则我认为芯片内部有损伤。
谢谢
大卫
你好大卫,
我很好奇你是否有机会在不同的套件上尝试ADC实现?
此外,有时,如果在其他通道上有任何活动,即使它们不是用于ADC的目的,ADC也可能被干扰。如果有任何UART活动等,在通道0/1/2上,当通道3被用于ADC时,ADC读数可能会有一些不一致。请确保正确处理时间,以避免这种情况。
回到最初的问题,仍然没有解释为什么你只在3频道得到某些固定的错误值。
关于你的问题:是否有可能通过软件或任何GPIO配置得到这个3,2v ?
如果你问的是将ADC通道3映射到任何其他GPIO,恐怕这是不可能的,因为ADC的4个通道在硬件上连接到端口0的下4个引脚。
最好的
LC_DialoggydF4y2Ba
嗨LC_Dialog,
我将在几天内更换我的电路板上的芯片。
我检查了所有的软件设置,也测试了一些硬件设置。
我发现通道的值是VDD3V3。我花了更长的时间,因为我总是使用与usb调试器。
电池或电压发生器使用后,其值与电源电压相似。
换芯片后我再告诉你问题是否解决了
问候,
大卫
嗨LC_Dialog,
更换da14580芯片后,P03通道可以正常工作。所以这是硬件问题。
现在所有四个频道都工作得很好。我不知道损坏的原因,但花了这么长时间,真烦人。
你知道adc的参考电压和精度吗?
我做了一些测量,如果我想转换adc的值,我计算3.6V。但如果我以3.7V作为参考电压计算,转换值更准确的adc引脚上的电压。我认为实现的软件是正确的。
问候,
大卫
你好大卫,
很高兴知道问题已经解决了。虽然硬件损坏是非常罕见的,可能发生的原因有很多,比如打开包后在外部存储的时间更长,生产中的esd等,
关于精度,在DA14580已知问题文件中有一个非常好的ADC测量和注意事项参考。请检查文件,并与我们联系,如果有任何澄清。
最好的
LC_DialoggydF4y2Ba