嗨,对话框中,
我们的产品是盲人障碍检测。为了升级到基于BLE的设备,我们选择DA14531模块。
主要部件有超声波传感器、蜂鸣器、触觉振动器、电池等。
我正在尝试接口以下超声波传感器400 S/T R 100。为了产生40 KHz脉冲突发,我配置定时器0没有PWM。我在定时器ISR内部创建了一个计数器来产生传输脉冲。我成功地做到了(参考附件)。现在在ISR内部经过1ms的延迟后,我调用adc_get_sample()函数。然后根据超声波传感器原理确定距离。在keil调试模式下运行了几次后,它卡住了
静态内联void dlg_error_isr(void)
{
ASSERT_WARNING (0);
}
在rwble.c所选择的项目是BLE Barbone项目。我已经附加了触发脉冲,当障碍物放置在50厘米处时产生回声。正如你所看到的,当转换到51厘米左右的距离时,时间间隔是3毫秒。我有一系列的查询来在代码中实现这个,
1.我无法在ISR内读取ADC样本。
2.你的ADC的准确度是多少?w。r。to precision in毫微米电压。
3.即使当我运行一个没有任何上述功能的ISR,我不能连接BLE扫描仪应用程序。
定时器的配置
//启用Timer0/Timer2输入时钟
timer0_2_clk_enable ();
timer0_init (TIM0_CLK_FAST PWM_MODE_ONE TIM0_CLK_NO_DIV);
//设置Timer0/Timer2输入时钟划分因子为28 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,
.continuous = false,
.interval_mult = 0,
.input_attenuator = ADC_INPUT_ATTN_4X,
.chopping = false,
.oversampling = 0
};
adc_init (&echo_pin_cfg);
你能帮我集成这个传感器吗?我需要知道如何运行定时器ISR和BLE服务在同一时间?
问候,
巴拉吉
嗨,巴拉
谢谢你的在线问题。让我检查一下,我会给你反馈我的意见。
谢谢,PM_Dialog
嗨,巴拉
我尝试在SDK的ble-app_barebone示例中复制这种行为。到目前为止,我使用的是在回调函数中切换gpio:
如果我有任何配置错误,请让我知道。您能分享您在应用程序代码中使用的burst_user_callback_function()函数吗?
您应该能够读取ISR内部。请分享为了在ble_app_barebone示例中复制它应该做哪些修改。你有使用任何一种可用的睡眠模式吗?
ADC的准确性给出了数据表-请检查表23。
谢谢,PM_Dialog
嗨,对话框中,
这实际上是一个定时器延迟问题。我在里面读了Adc_smple12.5微秒ISR定时器,但当我与MDO检查每个adc_get_sample() API的修正60微秒。目前还没有问题。谢谢你的建议。如果有任何问题出现,我将在这个相同的线程在未来。
由于这个定时器问题,BLE连接被阻塞。现在解决了。
嗨,巴拉
谢谢你的暗示,很高兴你把它修好了。如果您有任何后续问题,请提出一个新的论坛帖子。
谢谢,PM_Dialog