2015-11-05 4 views
0

Я пытаюсь использовать датчики hcsr04 на черном Beaglebone (адаптировано из этого кода - https://github.com/luigif/hcsr04)Использование нескольких датчиков hcsr04 на Beaglebone Black

Я получил это работает на 4-х различных наборов датчиков по отдельности, и в настоящее время не уверены в как объединить их в одну программу.

Есть ли способ дать триггер и получить эхо-сигналы одновременно, так что прерывания могут быть сгенерированы как разные события для программы C.

Запуск их один за другим - последний вариант, который мы имеем в виду.

+0

Вы получите лучшую видимость, если ваши теги были более уместными. 'beagleboneblack' и' beagleboard' будут иметь людей, которые будут комфортно работать с оборудованием, которое находится в основе вашего решения. Все ваши теги ... ну ... тоже общие. –

+0

Но, по моему предположению, для решения вашей проблемы вам потребуется переписать программу, которая работает на PRU, для мониторинга нескольких датчиков и отправки их обратно в Cortex. Если вы делаете только несколько датчиков и все в порядке с 5-10 обновлениями в секунду, вы можете просто сделать их поочередно. Если нет, то вам придется делать их параллельно. К счастью для вас, похоже, теперь компилятор C. Это и есть 32 регистра в ядре, что означает, что вы, вероятно, могли бы уйти от хранения всего в регистрах –

+0

(И я бы не стал заниматься несколькими ISR/событиями в Cortex. проверьте, кто изменил) –

ответ

0

Русс правильный - поскольку в процессоре BeagleBone AM335x есть 2 ядра PRU, нет возможности запускать 4 экземпляра этой программы PRU одновременно. Я предполагаю, что вы можете загрузить один скомпилированный для одного набора контактов, выполнить измерение, остановить его, а затем загрузить другой бинарный файл, скомпилированный для датчика на разных контактах, но это будет довольно неэффективный (и уродливый, ИМХО) способ сделать это ,

Если вы знаете какую-либо сборку, она должна быть достаточно проста, чтобы обновить этот код для управления всеми 4 датчиками (PRU assembly instructions). В качестве альтернативы вы можете начать с нуля на C и использовать компилятор PRU C clpru, как предложил Русь, хотя AFAIK все еще находится в состоянии бета-версии, и на нем мало информации. В любом случае, я бы рекомендовал считывать данные из четырех датчиков параллельно или один за другим, загружая измерения в память PRU при разных смещениях, а затем отправляя один сигнал в ARM.

В этом коде вы связаны, линия:

SBCO roundtrip, c24, 0, 4 

принимает 4 байт из регистра roundtrip (который является регистром r4, согласно #define roundtrip r4 в верхней части файла), и загружает его в данных ФУ RAM (константа c24 устанавливается в начало ОЗУ данных в lines 39-41) со смещением 0. Так что, если у вас 4 различных измерений в 4 регистров, вы могли бы компенсировать данные в оперативной памяти, например .:

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

Затем прочитайте эти 4 последовательных 32-разрядных целых чисел в программе C.

+0

Большое вам спасибо. Это было именно то, что нам нужно. Сейчас программа работает. –