我想在Beaglebone黑色使用hcsr04傳感器(改編自這個代碼 - https://github.com/luigif/hcsr04)上Beaglebone使用多個hcsr04傳感器黑色
我得到它的工作了4套不同的傳感器獨立,並且是現在不確定如何將它們合併成一個程序。
有沒有辦法讓觸發器同時接收回聲,這樣中斷可以作爲與C程序不同的事件產生。
一個接一個地運行它們是我們考慮的最後一個選項。
我想在Beaglebone黑色使用hcsr04傳感器(改編自這個代碼 - https://github.com/luigif/hcsr04)上Beaglebone使用多個hcsr04傳感器黑色
我得到它的工作了4套不同的傳感器獨立,並且是現在不確定如何將它們合併成一個程序。
有沒有辦法讓觸發器同時接收回聲,這樣中斷可以作爲與C程序不同的事件產生。
一個接一個地運行它們是我們考慮的最後一個選項。
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位整數。
非常感謝。這正是我們需要的。該計劃正在開展工作。 –
如果您的標籤更合適,您會獲得更好的可見性。 'beagleboneblack'和'beagleboard'都讓人們對解決方案根源的硬件感到滿意。你所有的其他標籤都是... ...太普通了。 –
但是,我的假設是要解決您的問題,您需要重寫在PRU上運行的程序,以監視多個傳感器並將其報告回Cortex。如果你只做了幾個傳感器,並且每秒5-10次更新就可以了,那麼你可以連續進行。如果沒有,那麼你將不得不平行地做。幸運的是,現在似乎有一個C編譯器。這和核心中有32個寄存器,這意味着你可以逃避將所有東西都保存在寄存器 –
(而且我不想爲Cortex做多個ISR /事件。檢查看看誰改變了) –