你好支持,
我对ADC通道P03有问题。
ADC通道P00,P01,P02的测量工作正常,但是通过通道P03,我总是得到一个错误的值。
我使用的板是DK-Basic-Kit与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.
/ /输入ad_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);
/ /输入pid_adc3_port, pid_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.回调来重复测试函数。
也许你可以尝试在启动配置步骤中校准ADC,或者在ADC_INIT.就像做的那样adc_get_vbat_sample.看看你能不能得到更好的结果。
注意:另外,我已经注意到您的代码中,您返回添加的样本但不划分2.只想提出这个,如果这不是您打算做的事情。
请让我知道如果你仍然有这个问题,并可能是一些更多的见解到这个问题。
最好的
LC_DialoggydF4y2Ba
感谢您及时的回复。
我尝试了一切,它不起作用。
如果我在P03上测量1V或3V并不重要,adc显示一个随机值,但它总是大约相同的范围。我检查了没有信号的引脚的电压,我得到0V,所以没有偏移。
其他频道与我的实现一起工作,所以我认为频道p03的对话或配置是错误的。
我更改了BLE Pheripheral示例的代码。
这个引脚有没有配置,我不知道?
谢谢你的建议。
你是对的,我不会在添加后划分,但我对错误的频道没有影响。
问候
大卫
嗨大卫,
我可以在这里寻找更多可能的问题。但是,你能尝试使用吗?Empty_Peripheral_Template项目并测试此实现。这个项目是自由的所有不必要的操作,可能有时会干扰和优先。
另外,如何调用这个函数。是在启动期间或启动后的某个时间点重复调用或仅调用一次函数。
最好的
LC_Dialogg
嗨LC,
我修改了BLE Pherianizal示例以取出ADC测量并通过BLE将其发送到计算机。我使用函数app_adcvall_timer_cb_handler如示例中发送了每秒值。
我测试了所有通道上的空外设模板的adc &另外,用Uart作为输出的修改电池示例。
结果总是一样的。
通道P00,P01,P02显示右值(1V,2V,3V),但通道P03显示相同的一个值(以二进制格式:1110001100)。该值差异达到最后两位。所以p03上的测量发生。
我还检查了PIN P03到芯片的联系人,一切都好。
有可能这个通道在芯片内部有损坏吗?
此致,
大卫
嗨大卫,
这很奇怪,只有P03频道表现出了奇怪的行为。我们在580的ADC上还没有看到这样的问题。在过去有一些百分比准确度的问题,但没有像这样。说了这么多,我想确认几件与实现有关的事情。
1.该引脚P03是否用于任何其他目的。主要是闪存的CS引脚。这可能会导致销上的一些干扰。
2.你能在不同的开发套件上测试这个吗?这是为了排除任何与硬件相关的问题。
3.你能测试3倍衰减模式的ADC吗禁用并检查是否有提高结果。
目前还不清楚究竟是什么原因导致了这一问题,但我会在我探讨这个问题时向您提供最新消息。
最好的
LC_DialoggydF4y2Ba
嗨LC对话框,
1.我认为同样的事情,但我检查了所有的GPIO保留和配置为其他目的。我什么也找不到。
2.如果没有解决方案,我将在另一个14580芯片上进行测试并首先测试。
3.没有3x衰减在通道P03我得到最高的值(1111111111),与3x衰减我得到约3,2v(1110001100, 1110001101, 1110001011)。不管我发出什么信号。
我还检查了引脚与我的示波器和芯片的连接。没有抵消。不是作为输出的值。
您是否可以使用软件或任何GPIO配置获得3,2V?
否则我认为芯片内部损坏了。
谢谢
大卫
嗨大卫,
如果您有机会在不同的套件上尝试ADC实现,我很好奇?
此外,有时,如果在其他通道上有任何活动,即使它们没有被用于ADC目的,ADC也可能受到干扰。例如,如果有任何UART活动等,在通道0/1/2上,当通道3被用于ADC时,可能有一些不一致的ADC读数。请确保时间处理正确,以避免这种情况。
返回原始问题,仍然没有解释为什么您只在频道3上只能确定频道3上的某些固定的错误值。
重新加权问题:是否有可能使用软件或任何GPIO配置获得3,2V?
如果你问的是将ADC通道3映射到任何其他GPIO,恐怕这是不可能的,因为ADC的4个通道是通过硬件连接到端口0的下面4个引脚上的。
最好的
LC_DialoggydF4y2Ba
嗨LC_Dialog,
我会在几天内更换我的董事会的芯片。
我检查了软件设置的所有内容,我还测试了一些硬件设置。
我发现这个通道的值是VDD3V3。我花了更长的时间,因为我总是使用usb调试器。
电池或电压发生器使用后,该值与供电电压类似。
如果在更换芯片后,我会通知您是否解决了问题。
问候,
大卫
嗨LC_Dialog,
在更改DA14580芯片后,通道P03工作。所以这是一个硬件问题。
现在所有四个渠道都工作完美。我不知道这种伤害的原因,但它很烦人,这需要很长时间。
您是否知道ADC的参考电压和准确性?
我做了一些测量,如果我想转换ADC I的值,我用3.6V计算了ADC。但是如果我用3.7V计算为参考电压,则转换值更加准确于ADC引脚上的电压。我认为实施的软件是正确的。
问候,
大卫
嗨大卫,
很高兴知道问题得到解决。虽然硬件损坏非常罕见,但由于在打开包装,生产中的eSDS等后,可能会出现在更长时间内的原因,
关于准确度,在DA14580已知问题文档中有一个很好的参考,用于ADC的测量和注意事项。请查看文件,如果有任何澄清,请联系我们。
最好的
LC_DialoggydF4y2Ba