Зеркало Telegram-чата "Репка / Repka-Pi"

Статус
Закрыто для дальнейших ответов.
Желательно для работы через python

Автор сообщения в Telegram: Иван


Учитывая, что есть решение снова от Adafruit: CircuitPython, обновление Platform Detect (выше) может помочь и открыть мир кучи готовых библиотек. Я сегодня продолжу ковырять, но так как у меня мало опыта с совсем низким уровнем (адреса), то пока ничего не могу обещать

Автор сообщения в Telegram: Suren Khorenyan

Ссылка на сообщение в Telegram
 
Учитывая, что есть решение снова от Adafruit: CircuitPython, обновление Platform Detect (выше) может помочь и открыть мир кучи готовых библиотек. Я сегодня продолжу ковырять, но так как у меня мало опыта с совсем низким уровнем (адреса), то пока ничего не могу обещать

Автор сообщения в Telegram: Suren Khorenyan


Спасибо)

Автор сообщения в Telegram: Иван

Ссылка на сообщение в Telegram
 
Привет
Я полдня проковырялся с управлением i2c из питона, не справляюсь, нужна помощь кого-то из разработчиков репки / низкоуровневых прогеров / знакомых с железками людей
Я допускаю, что дело может быть в таймингах (времени обращения), так как проблема чутка плавающая.

Что делаю:
- Через Python пытаюсь обратиться к файлу, записать туда байты. Обычно запись проходит успешно, но в какие-то моменты нет. Закономерность вижу, причину не вижу. Вывел два примера проблематичных вызовов, при этом иногда первый проходит успешно (без проблем)
Код:
addr = 64

print("problematic write 1")
buf = b"\x00\x14"
bus.write_bytes(addr, buf)

print("problematic write 2")
buf = b"\x06\x00\x00\xff\x07"
bus.write_bytes(addr, buf)

Внутри write_bytes происходит сначала вызов ioctl, а затем запись байтов в файл.
При этом если записывать ноль, то всегда всё ок, не падает. Хотя через терминал тоже плавающая проблема. Вот неуспех:
Код:
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
-bash: echo: write error: Input/output error
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
-bash: echo: write error: Input/output error
А вот успех:
Код:
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
В чем причина я даже не могу догадаться. Если кто-то готов поучаствовать, хотя бы приложить пример кода на C/C++, в котором всё будет стабильно работать, я готов ещё поковырять. Но пока ставлю это на паузу, так как застрял.

Что удалось накопать:
- Через repka-config сделал режим платы 2, где должен быть один i2c, но почему-то по файлам их будто три:
Код:
root@Repka-Pi:~# ls -l /dev/i2*
crw-rw---- 1 root i2c 89, 0 Jan  5 12:24 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 Jan  5 12:24 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 Jan  5 12:24 /dev/i2c-2
Распиновка

Не знаю, даёт ли это что-то, но почему-то bus i2c будто указывает на hdmi. Без понятия, должно ли быть так:
Код:
root@Repka-Pi:~# ls -l /sys/bus/i2c/devices/i2c*
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-0
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/soc/1c2ac00.i2c/i2c-1
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/soc/1f02400.i2c/i2c-2

Автор сообщения в Telegram: Suren Khorenyan

Ссылка на сообщение в Telegram
 
Привет
Я полдня проковырялся с управлением i2c из питона, не справляюсь, нужна помощь кого-то из разработчиков репки / низкоуровневых прогеров / знакомых с железками людей
Я допускаю, что дело может быть в таймингах (времени обращения), так как проблема чутка плавающая.

Что делаю:
- Через Python пытаюсь обратиться к файлу, записать туда байты. Обычно запись проходит успешно, но в какие-то моменты нет. Закономерность вижу, причину не вижу. Вывел два примера проблематичных вызовов, при этом иногда первый проходит успешно (без проблем)
Код:
addr = 64

print("problematic write 1")
buf = b"\x00\x14"
bus.write_bytes(addr, buf)

print("problematic write 2")
buf = b"\x06\x00\x00\xff\x07"
bus.write_bytes(addr, buf)

Внутри write_bytes происходит сначала вызов ioctl, а затем запись байтов в файл.
При этом если записывать ноль, то всегда всё ок, не падает. Хотя через терминал тоже плавающая проблема. Вот неуспех:
Код:
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
-bash: echo: write error: Input/output error
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
-bash: echo: write error: Input/output error
А вот успех:
Код:
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
В чем причина я даже не могу догадаться. Если кто-то готов поучаствовать, хотя бы приложить пример кода на C/C++, в котором всё будет стабильно работать, я готов ещё поковырять. Но пока ставлю это на паузу, так как застрял.

Что удалось накопать:
- Через repka-config сделал режим платы 2, где должен быть один i2c, но почему-то по файлам их будто три:
Код:
root@Repka-Pi:~# ls -l /dev/i2*
crw-rw---- 1 root i2c 89, 0 Jan  5 12:24 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 Jan  5 12:24 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 Jan  5 12:24 /dev/i2c-2
Распиновка

Не знаю, даёт ли это что-то, но почему-то bus i2c будто указывает на hdmi. Без понятия, должно ли быть так:
Код:
root@Repka-Pi:~# ls -l /sys/bus/i2c/devices/i2c*
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-0
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/soc/1c2ac00.i2c/i2c-1
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/soc/1f02400.i2c/i2c-2

Автор сообщения в Telegram: Suren Khorenyan


https://en.wikipedia.org/wiki/Display_Data_Channel
Вот почему один из i2c ведёт на HDMI. DDC второй версии и старше базируется на i2c шине. DDC2 is not exclusive to the VGA interface. Both DVI and HDMI feature dedicated DDC2B wires.

Есть даже такой вот проект https://www.reddit.com/r/raspberry_pi/comments/ws1ale/i2c_on_the_hdmi_port_raspberry_pi_4/ который позволяет использовать пины DDC в HDMI-разъёме как i2c шину (пины 15-17).

Автор сообщения в Telegram: Fedor Krutey

Ссылка на сообщение в Telegram
 
Привет
Я полдня проковырялся с управлением i2c из питона, не справляюсь, нужна помощь кого-то из разработчиков репки / низкоуровневых прогеров / знакомых с железками людей
Я допускаю, что дело может быть в таймингах (времени обращения), так как проблема чутка плавающая.

Что делаю:
- Через Python пытаюсь обратиться к файлу, записать туда байты. Обычно запись проходит успешно, но в какие-то моменты нет. Закономерность вижу, причину не вижу. Вывел два примера проблематичных вызовов, при этом иногда первый проходит успешно (без проблем)
Код:
addr = 64

print("problematic write 1")
buf = b"\x00\x14"
bus.write_bytes(addr, buf)

print("problematic write 2")
buf = b"\x06\x00\x00\xff\x07"
bus.write_bytes(addr, buf)

Внутри write_bytes происходит сначала вызов ioctl, а затем запись байтов в файл.
При этом если записывать ноль, то всегда всё ок, не падает. Хотя через терминал тоже плавающая проблема. Вот неуспех:
Код:
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
-bash: echo: write error: Input/output error
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
-bash: echo: write error: Input/output error
А вот успех:
Код:
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
В чем причина я даже не могу догадаться. Если кто-то готов поучаствовать, хотя бы приложить пример кода на C/C++, в котором всё будет стабильно работать, я готов ещё поковырять. Но пока ставлю это на паузу, так как застрял.

Что удалось накопать:
- Через repka-config сделал режим платы 2, где должен быть один i2c, но почему-то по файлам их будто три:
Код:
root@Repka-Pi:~# ls -l /dev/i2*
crw-rw---- 1 root i2c 89, 0 Jan  5 12:24 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 Jan  5 12:24 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 Jan  5 12:24 /dev/i2c-2
Распиновка

Не знаю, даёт ли это что-то, но почему-то bus i2c будто указывает на hdmi. Без понятия, должно ли быть так:
Код:
root@Repka-Pi:~# ls -l /sys/bus/i2c/devices/i2c*
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-0
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/soc/1c2ac00.i2c/i2c-1
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/soc/1f02400.i2c/i2c-2

Автор сообщения в Telegram: Suren Khorenyan


Ну смотрите. У вас в примере i2c0 но в схеме i2c0 нет.

Автор сообщения в Telegram: Дмитрий

Ссылка на сообщение в Telegram
 
Ну смотрите. У вас в примере i2c0 но в схеме i2c0 нет.

Автор сообщения в Telegram: Дмитрий


Ага, понял, только заметил. Действительно, я только сейчас увидел, что там единичка. Попробую заново

Автор сообщения в Telegram: Suren Khorenyan

Ссылка на сообщение в Telegram
 
А оно же хранится в каком-то файле? Я хочу из кода понять, то есть прочитать условно файл /etc/repka-config.d/pin-mode, и понять, какой режим. Или так не получится?

Автор сообщения в Telegram: Suren Khorenyan

Ссылка на сообщение в Telegram
 
Привет
Я полдня проковырялся с управлением i2c из питона, не справляюсь, нужна помощь кого-то из разработчиков репки / низкоуровневых прогеров / знакомых с железками людей
Я допускаю, что дело может быть в таймингах (времени обращения), так как проблема чутка плавающая.

Что делаю:
- Через Python пытаюсь обратиться к файлу, записать туда байты. Обычно запись проходит успешно, но в какие-то моменты нет. Закономерность вижу, причину не вижу. Вывел два примера проблематичных вызовов, при этом иногда первый проходит успешно (без проблем)
Код:
addr = 64

print("problematic write 1")
buf = b"\x00\x14"
bus.write_bytes(addr, buf)

print("problematic write 2")
buf = b"\x06\x00\x00\xff\x07"
bus.write_bytes(addr, buf)

Внутри write_bytes происходит сначала вызов ioctl, а затем запись байтов в файл.
При этом если записывать ноль, то всегда всё ок, не падает. Хотя через терминал тоже плавающая проблема. Вот неуспех:
Код:
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
-bash: echo: write error: Input/output error
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
-bash: echo: write error: Input/output error
А вот успех:
Код:
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
В чем причина я даже не могу догадаться. Если кто-то готов поучаствовать, хотя бы приложить пример кода на C/C++, в котором всё будет стабильно работать, я готов ещё поковырять. Но пока ставлю это на паузу, так как застрял.

Что удалось накопать:
- Через repka-config сделал режим платы 2, где должен быть один i2c, но почему-то по файлам их будто три:
Код:
root@Repka-Pi:~# ls -l /dev/i2*
crw-rw---- 1 root i2c 89, 0 Jan  5 12:24 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 Jan  5 12:24 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 Jan  5 12:24 /dev/i2c-2
Распиновка

Не знаю, даёт ли это что-то, но почему-то bus i2c будто указывает на hdmi. Без понятия, должно ли быть так:
Код:
root@Repka-Pi:~# ls -l /sys/bus/i2c/devices/i2c*
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-0
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/soc/1c2ac00.i2c/i2c-1
lrwxrwxrwx 1 root root 0 Jan  5 12:24 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/soc/1f02400.i2c/i2c-2

Автор сообщения в Telegram: Suren Khorenyan


Теперь запись в i2c-1 идёт без ошибок. Спасибо, что указали на ошибку.
Правда, пока что PCA9685 ничего не делает, пытаюсь разобраться, в чем может быть дело. То есть команды отправлены, а у меня не загорается светодиод, не двигается серва. Буду дальше ковырять

Автор сообщения в Telegram: Suren Khorenyan

Ссылка на сообщение в Telegram
 
Теперь запись в i2c-1 идёт без ошибок. Спасибо, что указали на ошибку.
Правда, пока что PCA9685 ничего не делает, пытаюсь разобраться, в чем может быть дело. То есть команды отправлены, а у меня не загорается светодиод, не двигается серва. Буду дальше ковырять

Автор сообщения в Telegram: Suren Khorenyan


(файл из Telegram export не включен в файл экспорта: video.mp4)

Автор сообщения в Telegram: Suren Khorenyan

Ссылка на сообщение в Telegram
 
По серво, первое серьёзное задание 😁 Ставим шахматную доску и начинаем создавать библиотеку (Repka Pi) на питоне по перемещению шахматных фигур. Е2-Е4

Автор сообщения в Telegram: Serj GSG

Ссылка на сообщение в Telegram
 
(файл из Telegram export не включен в файл экспорта: video.mp4)

Автор сообщения в Telegram: Suren Khorenyan


Ура! Удалось запрограммировать на питоне при помощи модифицированных библиотек Adafruit. Завтра причешу и опубликую PR

Автор сообщения в Telegram: Suren Khorenyan

Ссылка на сообщение в Telegram
 
Opencv использовали?

Автор сообщения в Telegram: Denisov Yury


Не-не. Чисто захардкодил позиции. Нужен был proof-of-concept, что с Репки получается управлять через питон. Остальное всё ещё впереди

Автор сообщения в Telegram: Suren Khorenyan

Ссылка на сообщение в Telegram
 
Статус
Закрыто для дальнейших ответов.