2015-11-05 53 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

非常感謝。這正是我們需要的。該計劃正在開展工作。 –