2015-11-05 31 views
0

我想在Beaglebone黑色使用hcsr04传感器(改编自这个代码 - https://github.com/luigif/hcsr04上Beaglebone使用多个hcsr04传感器黑色

我得到它的工作了4套不同的传感器独立,并且是现在不确定如何将它们合并成一个程序。

有没有办法让触发器同时接收回声,这样中断可以作为与C程序不同的事件产生。

一个接一个地运行它们是我们考虑的最后一个选项。

+0

如果您的标签更合适,您会获得更好的可见性。 'beagleboneblack'和'beagleboard'都让人们对解决方案根源的硬件感到满意。你所有的其他标签都是... ...太普通了。 –

+0

但是,我的假设是要解决您的问题,您需要重写在PRU上运行的程序,以监视多个传感器并将其报告回Cortex。如果你只做了几个传感器,并且每秒5-10次更新就可以了,那么你可以连续进行。如果没有,那么你将不得不平行地做。幸运的是,现在似乎有一个C编译器。这和核心中有32个寄存器,这意味着你可以逃避将所有东西都保存在寄存器 –

+0

(而且我不想为Cortex做多个ISR /事件。检查看看谁改变了) –

回答

0

Russ是正确的 - 由于BeagleBone的AM335x处理器有两个PRU内核,因此无法同时运行该PRU程序的4个实例。我想你可以加载为一组引脚编译的代码,进行测量,停止它,然后在不同的引脚上加载一个针对传感器编译的二进制二进制代码,但这样做会非常低效(并且很丑陋,恕我直言)。 。

如果你知道任何组件,它应该是非常直接的更新代码来驱动所有4个传感器(PRU assembly instructions)。另外,你可以从C开始,并按照Russ的建议使用clpru PRU C编译器,尽管AFAIK仍然处于测试状态,并且其中没有太多信息。无论哪种方式,我都建议从4个传感器并行或相继读取数据,以不同的偏移量将测量值加载到PRU存储器中,然后向ARM发送单个信号。

在该代码中您链接,线路:

SBCO roundtrip, c24, 0, 4 

(在该文件的顶部是寄存器r4,每#define roundtrip r4)注意到4字节从寄存器roundtrip,并将其加载到所述PRU数据RAM(常量c24设置为lines 39-41中的数据RAM的开头),偏移量为0。所以,如果你在4个寄存器有4次不同的测量,可以抵消数据RAM,例如:

SBCO roundtrip1, c24, 0, 4 
SBCO roundtrip2, c24, 4, 4 
SBCO roundtrip3, c24, 8, 4 
SBCO roundtrip4, c24, 12, 4 

然后阅读你的C程序的4个连续的32位整数。

+0

非常感谢。这正是我们需要的。该计划正在开展工作。 –