你好支持,
我对ADC通道P03有问题。
ADC通道P00,P01,P02的测量工作正常,但是通过通道P03,我总是得到一个错误的值。
董事会我用的是在DK-基本套件,带Da14580。
这是我的代码:
// ADC配置
#define gpio_adc1_port gpio_port_0.
#定义GPIO_ADC1_PIN GPIO_PIN_1
#定义GPIO_ADC0_PORT GPIO_PORT_0
#定义GPIO_ADC0_PIN GPIO_PIN_0
#define gpio_adc2_port gpio_port_0.
#define gpio_adc2_pin gpio_pin_2.
#定义GPIO_ADC3_PORT GPIO_PORT_0
#define gpio_adc3_pin gpio_pin_3.
RESERVE_GPIO(ADC_PIN1,GPIO_ADC1_PORT,GPIO_ADC1_PIN,PID_ADC);
保留_GPIO(ADC_PIN0,GPIO_ADC0_PORT,GPIO_ADC0_PIN,PID_ADC);
保留_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,输入,pid_adc,false);
gpio_configurepin(gpio_adc0_port,gpio_adc0_pin,输入,pid_adc,false);
gpio_configurepin(gpio_adc2_port,gpio_adc2_pin,输入,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.回调反复测试功能。
也许你可以试试。在引导配置步骤callibrating的ADC或之后可能会增加一些延迟ADC_INIT.就像是在做adc_get_vbat_sample。如果你得到更好的结果见。
注意:另外,我已经注意到您的代码中,您返回添加的样本但不划分2.只想提出这个,如果这不是您打算做的事情。
请让我知道,如果你仍然有这个问题,可能会有一些更深入的理解问题。
最好的事物,
LC_DialoggydF4y2Ba
感谢您及时的回复。
我尝试了一切,它不起作用。
这不要紧,如果我把1V或3V的测量在P03中,ADC显示一个随机值,但它总是差不多的范围。我检查引脚的电压无信号,我也得到0V,所以没有偏移。
其他频道与我的实现一起工作,所以我认为频道p03的对话或配置是错误的。
我更改了BLE Pheripheral示例的代码。
这个引脚有没有配置,我不知道?
谢谢你的提醒。
你是对的,我不会在添加后划分,但我对错误的频道没有影响。
问候
大卫
嗨大卫,
我可以在这里寻找更多可能的问题。但是,你能尝试使用吗?Empty_Peripheral_Template项目和测试这个实现。该项目是从所有可能有时干扰,并采取优先不必要的操作自由。
此外,你如何调用这个函数。期间或启动后反复或只有一次叫在某一点的功能。
最好的事物,
LC_Dialogg
嗨LC,
我修改了BLE Pherianizal示例以取出ADC测量并通过BLE将其发送到计算机。我使用函数app_adcvall_timer_cb_handler如示例中发送了每秒值。
我测试的ADC,具有在空pheripheral模板&另外的所有信道与通过UART的变形例的电池作为输出。
它总是相同的结果。
通道P00,P01,P02显示右值(1V,2V,3V),但通道P03显示相同的一个值(以二进制格式:1110001100)。该值差异达到最后两位。所以p03上的测量发生。
我还检查了PIN P03到芯片的联系人,一切都好。
是否有可能,这个频道将在芯片内部的任何损害?
此致,
大卫
嗨大卫,
这是很奇怪的,只有通道P03正显示出奇怪的行为。我们还没有看到任何这样的问题上ADC我们580有过去,但这样的事发现一定比例的精度问题。说了这么多,我想确认了几个相关的实施事情,
1.该引脚P03是否用于任何其他目的。主要是闪存的CS引脚。这可能会导致销上的一些干扰。
2.你能在不同的开发套件进行测试。这是为了排除任何硬件相关的问题。
3.你能与3倍衰减模式ADC测试禁用并检查是否有提高结果。
目前还不清楚究竟是什么造成这一点,但,我会及时向大家发布,我探讨这个问题。
最好的事物,
LC_DialoggydF4y2Ba
嗨LC对话框,
1.我因子评分同样的事情,但我检查了其他用途的所有GPIO保留和配置。我无法找到任何东西。
2.如果没有解决方案,我将在另一个14580芯片上进行测试并首先测试。
3.如果没有3倍衰减的通道P03我得到的最高值(1111111111),具有3倍衰减我得到3,2V(1110001100,1110001101,1110001011)。没关系信号I创造什么。
我还检查我的示波器针,也给芯片的连接。没有偏移。没有价值越来越为输出。
您是否可以使用软件或任何GPIO配置获得3,2V?
否则,我认为该芯片具有一个内部损坏。
谢谢
大卫
嗨大卫,
如果您有机会在不同的套件上尝试ADC实现,我很好奇?
此外,因为它涉及到有时,ADC的可能,如果有任何活动回事了,即使不被用于ADC目的,他们的其他渠道干扰。说,如果有任何活动UART等方式,对信道0/1/2当信道3被用于ADC有可能是在ADC读数一些不一致。请确保定时妥善处理,以避免这种情况。
返回原始问题,仍然没有解释为什么您只在频道3上只能确定频道3上的某些固定的错误值。
重新加权问题:是否有可能使用软件或任何GPIO配置获得3,2V?
如果要问的ADC通道3映射到任何其他GPIO,恐怕作为ADC的4个信道被连接在硬件中的低4个销端口0的那是不可能的。
最好的事物,
LC_DialoggydF4y2Ba
嗨LC_Dialog,
我会在几天内更换我的董事会的芯片。
我检查了软件设置的所有内容,我还测试了一些硬件设置。
我发现的信道的值是VDD3V3。我需要更长的时间,因为我总是用调试器与USB接口。
Aftert的电池或电压发生器的使用,该值是等的电源电压。
如果在更换芯片后,我会通知您是否解决了问题。
问候,
大卫
嗨LC_Dialog,
在更改DA14580芯片后,通道P03工作。所以这是一个硬件问题。
现在所有四个渠道都工作完美。我不知道这种伤害的原因,但它很烦人,这需要很长时间。
您是否知道ADC的参考电压和准确性?
我做了一些测量,如果我想转换ADC I的值,我用3.6V计算了ADC。但是如果我用3.7V计算为参考电压,则转换值更加准确于ADC引脚上的电压。我认为实施的软件是正确的。
问候,
大卫
嗨大卫,
很高兴知道问题得到解决。虽然硬件损坏非常罕见,但由于在打开包装,生产中的eSDS等后,可能会出现在更长时间内的原因,
关于accuracay,没有为ADC测量及注意事项DA14580已知问题文档中的一个很好的参考。请查看文档并达到我们回到关于任何澄清。
最好的事物,
LC_DialoggydF4y2Ba