Использование нескольких датчиков hcsr04 на Beaglebone Black

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

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

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

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

1 ответ

Решение

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

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

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

SBCO roundtrip, c24, 0, 4

принимает 4 байты из регистра roundtrip (который является регистром r4согласно #define roundtrip r4 вверху файла) и загружает его в оперативную память данных PRU (постоянная c24 устанавливается в начало данных ОЗУ в строках 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-программе.

Другие вопросы по тегам