超声波界面使用计时器

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个帖子/ 0新
最后一篇
巴拉吉
离线
最后一次露面:3个月2周前
加入:2019-12-06 06:48
超声波界面使用计时器

嗨对话框,

我们的产品是盲人的障碍物检测。要升级到基于BLE的设备,我们选择DA14531模块。

组件是超声波传感器,蜂鸣器,触觉振动器,电池。

我正在尝试接口以下超声波传感器400 s / t r 100.要生成40 kHz的脉冲脉冲,我配置了计时器0,没有PWM。我在计时器内创建了一个计数器以产生传输脉冲。我成功完成了哪个(参考附件)。现在在ISR内部延迟1ms后,我正在调用ADC_GET_SAMPLE()函数。从那里,我根据超声波传感器原理确定距离。在keil调试模式下运行很少的迭代后。它被困在

静态内联void dlg_error_isr(void)
{
assert_warning(0);
}

在rwble.c.中选择的项目是BLE BARBONE项目。当障碍物放置在50厘米时,我已经用回声产生了连接的触发脉冲。如您所见,当覆盖到距离时,时间间隔为3ms,约为51厘米。我有一系列在代码中实现这一点的查询,

1.我无法读取ISR内的ADC样本。

2.您的ADC的准确性是多少?W.R.TO米电压的精确度。

3.即使我在没有任何上述功能的ISR运行ISR时,我也无法连接到BLE Scanner应用程序。

定时器配置

//启用Timer0 / Timer2输入时钟
timer0_2_clk_enable();

timer0_init(tim0_clk_fast,pwm_mode_one,tim0_clk_no_div);

//将Timer0 / Timer2输入时钟分割因子设置为2,所以8 MHz输入时钟
timer0_2_clk_div_set(&clk_div_config);

//重新加载值12.5微秒(t = 1/8 MHz * Reload_12.5_US = 0.125 * 100 = 12.5微秒)
timer0_set_pwm_on_counter(timer_on);
timer0_set_pwm_high_counter(no_pwm);
timer0_set_pwm_low_counter(no_pwm);
//寄存SWTIM_IRQN IRQ的回调函数
timer0_register_callback(burst_user_callback_function);

//启用SWTIM_IRQN IRQ
timer0_enable_irq();

ADC配置

// ADC配置
adc_offset_calibrate(adc_input_mode_single_ended);

adc_config_t echo_pin_cfg =.
{
.input_mode = adc_input_mode_single_ended,
.input = adc_input_se_p0_6,
.smpl_time_mult = 2,
.Contion = False,
.Interval_mult = 0,
.Input_attenuator = ADC_INPUT_ATTN_4X,
.Chopping = false,
。oversampling = 0.
};

adc_init(echo_pin_cfg);

你可以帮助我整合这个传感器。我需要知道如何在同一时间运行计时器ISR和BLE服务?

问候,

巴拉吉

PM_DIALOG.
离线
最后一次露面:13小时40分钟前
职员
加入:2018-02-08 11:03
嗨巴拉吉,

嗨巴拉吉,

谢谢你的问题在线。让我检查一下,我会回复我的评论。

谢谢,PM_DIALOG.

PM_DIALOG.
离线
最后一次露面:13小时40分钟前
职员
加入:2018-02-08 11:03
我巴拉吉,

嗨巴拉吉,

我正在尝试在SDK的BLE-APP_BAREBONE示例中复制此行为。到目前为止,我正在使用,以便在回调函数中切换GPIO:

// timer0设置#define no_pwm 0x0 #define timer_on 100静态tim0_2_clk_div_config_t clk_div_config = {.clk_div = tim0_2_clk_div_2};静态UINT8_T计数器= 0;静态void burst_user_callback_function(void){counter ++;if(2 ==计数器){if(gpio_getpinstatus(LED_PORT,LED_PIN)){GPIO_SETINACTIVE(LED_PORT,LED_PIN);} else {gpio_setactive(LED_PORT,LED_PIN);void timer_0(void){//使能Timer0 / timer2输入时钟timer0_2_clk_enable();timer0_init(tim0_clk_fast,pwm_mode_one,tim0_clk_no_div);//将Timer0 / timer2输入时钟分割因子设置为2,因此8 MHz输入时钟Timer0_2_CLK_DIV_SET(&clk_div_config);//重新加载值为12.5微秒(t = 1/8 MHz * Reload_12.5_US = 0.125 * 100 = 12.5微秒)Timer0_set_pwm_on_counter(timer_on);timer0_set_pwm_high_counter(no_pwm); timer0_set_pwm_low_counter(NO_PWM); // register callback function for SWTIM_IRQn irq timer0_register_callback(burst_user_callback_function); // enable SWTIM_IRQn irq timer0_enable_irq(); }

如果我有任何错误配置,请告诉我。您可以在应用程序代码中共享您使用的burst_user_callback_function()函数吗?

您应该能够在ISR内读取。请分享应在BLE_APP_BAREBONE示例中复制此操作以进行操作。您是否使用了任何可用的睡眠模式?

ADC的准确性在数据表中给出 - 请检查表23。

谢谢,PM_DIALOG.

巴拉吉
离线
最后一次露面:3个月2周前
加入:2019-12-06 06:48
嗨对话框,

嗨对话框,

它实际上是一个计时器延迟问题。我在里面读了adc_smple12.5微秒ISR计时器,但是,当我检查MDO时adc_get_sample.()具有纠正的API需要60.微秒。截至目前没有任何情况。谢谢你的建议。如果出现任何问题,我将将来在同一主题中发布。

此定时器发出的BCOZ BLE连接已被阻止。现在它得到了解决。

PM_DIALOG.
离线
最后一次露面:13小时40分钟前
职员
加入:2018-02-08 11:03
嗨巴拉吉,

嗨巴拉吉,

谢谢你的迹象,很高兴你有工作。如果您有任何后续问题,请提出一个新的论坛线程。

谢谢,PM_DIALOG.