Использование нескольких датчиков 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-программе.