你好支持,
我对ADC频道P03有问题。
ADC通道P00,P01,P02的测量值正常工作,但是频道P03我总是得到一个错误的值。
我使用的板是带有DA14580的DK-BASIC-KIT。
这是我的代码:
// 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
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(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_dialoggydF4y2Ba
感谢您及时的回复。
我尝试了一切,它没有用。
是否在P03上进行1V或3V的测量都没关系,ADC显示一个随机值,但它始终大约是相同的范围。我检查没有信号的引脚的电压,并且得到0V,因此没有偏移。
其他渠道可以与我的实施一起使用,因此我认为通道P03的对话或配置是错误的。
我更改了BLE信息示例的代码。
我不知道这个PIN上有任何配置吗?
谢谢您的建议。
您是对的,我不会在加入后分裂,但是我对错误的频道没有影响。
问候
大卫
嗨,大卫,
我将在这里寻找更多可能的问题。但是,您可以尝试使用empty_peripheral_template项目并测试此实现。该项目不受所有可能干扰并优先考虑的不必要的操作。
另外,您如何调用此功能。是在启动过程中或之后的某个时刻反复调用的功能。
最好的,
lc_dialogg
嗨,LC,
我修改了BLE信息示例以进行ADC测量,并通过BLE将其发送到计算机。我使用示例中的函数app_adcvall_timer_cb_handler来每秒发送值。
我用空的信息标记模板上的所有通道测试了ADC,并在带有UART作为输出的修改电池示例中测试了ADC。
它总是相同的结果。
通道P00,P01,P02显示正确的值(1V,2V,3V),但是通道P03显示了相同的一个值(以二进制格式:1110001100)。该值在最后两个位上有所不同。因此,发生了P03的测量。
我还检查了从引脚P03到芯片的联系,一切正常。
该通道是否可能在芯片内部有任何损坏?
此致,
大卫
嗨,大卫,
这很奇怪,只有通道P03显示出扭曲的行为。我们在580上没有在ADC上看到任何此类问题。话虽如此,我想确认与实施相关的几件事。
1.该引脚P03是否用于任何其他目的。主要的是用于闪存的CS引脚。这可能会在销钉上加载时会引起一些干扰。
2.您可以在其他开发套件上测试。这是排除任何与硬件有关的问题。
3.您可以通过3X衰减模式测试ADC禁用并检查结果是否得到改善。
目前尚不清楚是什么确切导致了这一点,但是,在探索此问题时,我会及时通知您。
最好的,
lc_dialoggydF4y2Ba
嗨,lc-dialog,
1.我拍摄了同样的事情,但是我检查了所有GPIO保留和配置是否有其他目的。我什么都找不到。
2.如果没有解决方案,我将由另外14580芯片进行测试。
3.在频道P03上没有3倍衰减,我获得了最高值(1111111111),衰减3倍,我得到约3,2V(1110001100,1110001101,1110001011)。我创建的信号都没关系。
我还用示波器检查了销钉以及与芯片的连接。没有偏移。而不是获得输出的值。
您是否有可能使用软件或任何GPIO配置获得此3,2V?
否则,我认为芯片有内部损坏。
谢谢
大卫
嗨,大卫,
我很好奇您是否有机会尝试使用其他套件的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-CHIP后,通道P03可以工作。因此,这是一个硬件问题。
现在,所有四个频道都可以完美。我不知道这种损害的原因,但要花这么长时间很烦人。
您知道ADC的参考电压和准确性吗?
我进行了一些测量,如果想转换我用3.6V计算的ADC的值。但是,如果我用3.7V作为参考电压进行计算,则转换值更准确地对ADC引脚的电压。我认为实现的软件是正确的。
问候,
大卫
嗨,大卫,
很高兴知道问题已经解决。尽管硬件损坏非常罕见,并且可能由于许多原因而发生,例如在打开包装,eSD等室外储存更长的室外损坏,在生产等中储存更长的时间
关于ACCECAY,在DA14580已知问题文档中有一个很好的参考,以进行ADC测量和预防措施。请查看文档并就任何澄清与我们联系。
最好的,
lc_dialoggydF4y2Ba