Что я сделал уже. Запитал энкодер от БП 5V, плюс на коричневый провод, минус на синий. Дальше подключил черный тонкий провод к input входу A1 wirenboard. И ничего не заработало (в веб интерфейсе wirenboard есть возможность смотреть есть сигнал на входе или нет. он постоянно включался и выключался очень быстро, но энкодер оставался в неподвижном положении). Подозреваю, что надо что-то еще подключить.
Черный толстый провод это земля? его надо подключать в ground wirenboard или в ground блока питания?
Разобрался. Запитал энкодер от wirenboard (от 5вольтового выхода и земли), подключил черный тонкий провод в A1 и теперь получаю 0 1. Но есть проблема, данные приходят с задержкой (если сразу много крутить энкодер). А надо чуть ли не тик в тик.
Читаю с помощью python, mqtt. Есть ли способ читать быстрее?
Код python:
import paho.mqtt.client as mqtt
class Encoder:
def init(self, address):
self.ticks = 0
self.address = address
Энкодер стоит на вале двигателя. За раз надо будет крутиться двигатель где то на 25 тиков энкодера. Погрешность 1-2 тика нормально.
1 мс нереально, как я понимаю?
Какое максимальное разрешение я смогу получить? и как?
Задача нестандартная, поэтому решается сложно. Нужны будут серьёзные знания ОС и навыки программирования.
Прецеденты, впрочем, были.
Два самых простых варианта:
Берёте ядерный модуль lirc_pwm, активируете его на GPIO, соответствующем A1_IN, собираете данные в виде: “нолик 100мкс, единичка 120мкс, нолик 70мкс”, и т.д.
Начать можно здесь..
Вместо пересборки Device Tree для активации драйвера на ножке можно воспользоваться device tree overlay (смотреть в сторону исходников wb-hwconf-manager, команда wb-hwconf-helper load-overlay"
Можете через ядерный интерфейс epoll в пользовательской программе получать прерывания и с ними работать.
Можно даже на Python, хотя лучше на C.
Для python делаете
from WB_IO import GPIO
...
GPIO.setup()
GPIO.wait_for_edge()
...
лучше убрать соответствующий вход из /etc/wb-homa-gpio.conf и перезагрузить wb-homa-gpio
да[quote=“vicgerrard2604, post:7, topic:984”]
3. Надо ли при работе со вторым вариантом export’тить или, наоборот, unexport’тить 126 gpio согласно статье
[/quote]
надо делать export, setup() из пункта выше это делает сам.
Попробуйте на C, покажите код, расскажите как вы понимаете, что не хватает скорости.
Этот “способ” зависит от конкретного процессора, и там не только GPIO_ADDR зависит от процессора, но и всё осталоьное. Возможны спецэффекты. Помогать не буду, если всё равно решите сами так делать, то читайте MCIMX28RM.pdf