你好支持,
我对ADC通道P03有问题。
ADC通道P00,P01,P02的测量工作正常,但是通过通道P03,我总是得到一个错误的值。
我使用的电路板是DA14580的DK-Basic-套件。
这是我的代码:
// ADC配置
#define gpio_adc1_port gpio_port_0.
#define gpio_adc1_pin gpio_pin_1.
#define gpio_adc0_port gpio_port_0.
#define gpio_adc0_pin gpio_pin_0.
#define gpio_adc2_port gpio_port_0.
#define gpio_adc2_pin gpio_pin_2
#define gpio_adc3_port gpio_port_0.
#define gpio_adc3_pin gpio_pin_3.
保留_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);
保留_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,输入,pid_adc,false);
// ADC样本的功能
UINT16_T ADC_READ_P03_CHANNEL(void)
{
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_dialogg.ydF4y2Ba
感谢您及时的回复。
我尝试了一切,它不起作用。
如果我在p03上测量1v或3v,则ADC显示了一个无关,但它始终围绕相同的范围。我检查引脚的电压,没有信号,我得到0V,因此没有偏移量。
其他频道与我的实现一起工作,所以我认为频道p03的对话或配置是错误的。
我更改了BLE Pheripheral示例的代码。
这个引脚有没有配置,我不知道?
谢谢你的建议。
你是对的,我不会在添加后划分,但我对错误的频道没有影响。
问候
大卫
嗨大卫,
我可以在这里寻找更多可能的问题。但是,你能尝试使用吗?extent_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.您可以在不同的DEV套件上测试这一点。这是为了排除任何硬件相关问题。
3.您可以使用3x衰减模式与ADC进行测试禁用并检查是否有提高结果。
它不清楚是什么导致这一点,但是,我会随时向您发布,因为我探讨了这个问题。
最好的,
lc_dialogg.ydF4y2Ba
嗨LC对话框,
我买了同样的事情,但我检查了所有GPIO预留和配置的其他目的。我找不到任何东西。
2.如果没有解决方案,我将在另一个14580芯片上进行测试并首先测试。
3.没有3x衰减通道P03,我获得最高值(1111111111),3x衰减我得到大约3,2V(1110001100,1110001101,1110001011)。我创建的信号并不重要。
我还使用示波器检查了PIN,也连接到芯片。没有偏移。不是作为输出的值。
您是否可以使用软件或任何GPIO配置获得3,2V?
否则我认为芯片有内部损坏。
谢谢
大卫
嗨大卫,
如果您有机会在不同的套件上尝试ADC实现,我很好奇?
此外,由于有时,即使在其他频道上未接收到其他频道,ADC也可能受到干扰,即使它们不用于ADC目的,也可能会受到任何活动。例如,如果存在任何UART活动等,则在通道3用于ADC的通道3时,ADC读数可能存在一些不一致的。请确保正常处理以避免这种情况。
返回原始问题,仍然没有解释为什么您只在频道3上只能确定频道3上的某些固定的错误值。
重新加权问题:是否有可能使用软件或任何GPIO配置获得3,2V?
如果您要询问将ADC通道3映射到任何其他GPIO,我担应不担担,因为ADC的4个通道以硬件连接到端口0的下4个引脚。
最好的,
lc_dialogg.ydF4y2Ba
嗨lc_dialog,
我会在几天内更换我的董事会的芯片。
我检查了软件设置的所有内容,我还测试了一些硬件设置。
我发现频道的值是VDD3V3。我需要更长时间的时间,因为我总是用USB使用调试器。
在电池或电压发生器的使用后,该值就像电源电压。
如果在更换芯片后,我会通知您是否解决了问题。
问候,
大卫
嗨lc_dialog,
在更改DA14580芯片后,通道P03工作。所以这是一个硬件问题。
现在所有四个渠道都工作完美。我不知道这种伤害的原因,但它很烦人,这需要很长时间。
您是否知道ADC的参考电压和准确性?
我做了一些测量,如果我想转换ADC I的值,我用3.6V计算了ADC。但是如果我用3.7V计算为参考电压,则转换值更加准确于ADC引脚上的电压。我认为实施的软件是正确的。
问候,
大卫
嗨大卫,
很高兴知道问题得到解决。虽然硬件损坏非常罕见,但由于在打开包装,生产中的eSDS等后,可能会出现在更长时间内的原因,
关于精度,在DA14580已知问题文件中存在非常好的参考,用于ADC测量和预防措施。有关任何澄清,请查看该文件并接触我们。
最好的,
lc_dialogg.ydF4y2Ba