Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
piP

pi

@pi
Сводка
Сообщения
6.3k
Темы
1.6k
Группы
1
Подписчики
0
Подписки
0

Сообщения

Последние Лучшие сообщения Спорные

  • Ошибка 443 при git clone
    piP pi

    Время (часы) на малинке? Надо попробовать!


  • Разработка приложения, использующее карту памяти Raspberry Pi
    piP pi

    @lednevandrey04#6851 Есть Raspberry Pi с видеокамерой, которая ... получает скорость

    Видеокамера скорость НЕ получает. Скорость автомобиля нужно брать от спидометра, с CAN шины, если есть такая возможность. Но можно и с GPS. Там точность показаний будет пониже, но на скорости 150 км/час это уже не будет играть особой роли.

    @lednevandrey04#6851 размещен Банк из 1000 фотографий.

    Что это означает? Есть каталог на SD-в котором лежат 1000 файлов JPG ?

    @lednevandrey04#6851 показывает это ролик на экране монитора

    Это совсем не сложно (Статья😞

    avconv -r  1 -i frame%03d.jpg -r 10 animation.h264
    

    При этом используется программа под названием avconv, которая берет неподвижные изображения в папке и конвертирует их в видео под названием animation.h264. В зависимости от того, сколько кадров вы сделали, этот процесс может занять какое-то время и вы узнаете, что видео готово, когда снова увидите приглашение терминала.

    Чтобы воспроизвести видео, найдите файл animation.h264 в папке animation и дважды щелкните его, чтобы открыть. Кроме того, вы можете воспроизвести его из Терминала, набрав следующее:

    omxplayer animation.h264
    

    Как только видео загрузится, вы увидите, как оживает ваша покадровая анимация. Поздравляем: вы превратили Raspberry Pi в мощную анимационную студию!

    @lednevandrey04#6851 Точнее нужно исследование по этому вопросу.

    Я думаю, что вы и сами сможете повторить эти действия и засечь время подготовки видеофайла. Если понадобится более конкретная помощь - задавайте вопросы.


  • Ошибка 443 при git clone
    piP pi

    У меня нормально всё. А время правильно выставлено? Если время сильно неправильное, То могут быть проблемы с ssl сертификатом


  • Ошибка 443 при git clone
    piP pi

    У меня клонировалось всё секунд за 30 без всяких проблем:

    $ git clone https://github.com/th33xitus/kiauh.git
    Клонирование в «kiauh»…
    remote: Enumerating objects: 2624, done.
    remote: Counting objects: 100% (706/706), done.
    remote: Compressing objects: 100% (406/406), done.
    remote: Total 2624 (delta 472), reused 471 (delta 298), pack-reused 1918
    Получение объектов: 100% (2624/2624), 738.23 КиБ | 766.00 КиБ/с, готово.
    Определение изменений: 100% (1840/1840), готово.
    
    

  • Ошибка 443 при git clone
    piP pi
    sudo apt-get install git -y
    cd ~
    git clone https://github.com/th33xitus/kiauh.git
    cd kiauh
    chmod +x kiauh.sh scripts/*
    ./kiauh.sh
    

  • Ошибка 443 при git clone
    piP pi

    полностью команду скинь. могу у себя проверить


  • Автозапуск программы на RP1
    piP pi

    /home/pi/.config/lxsession/LXDE-pi/autostart - попробуй сюда прописать.
    если не получится, смотри после загрузки лог /home/pi/.xsession-errors - там должны быть причина почему твоя программа не стартует.

    проверь права на файле sunvox. У юзера pi должны быть права на запуск этого файла.

    chmod  0777 /home/pi/sunvox/sunvox
    chmod +x /home/pi/sunvox/sunvox
    

  • Автозапуск программы на RP1
    piP pi

    Спасибо, пробовал сделать автозагрузку, но ничего не происходит

    sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
    

    Далее вставляю строку

    @/home/pi/sunvox/sunvox
    

    Сохраняю.
    Путь написал, там в папке лежит исполняемый файл.
    Ничего.


  • Выбор производительной серверной ОС для Raspberry pi 4
    piP pi

    dietpi


  • Автозапуск программы на RP1
    piP pi

    В этот файл - /etc/xdg/lxsession/LXDE-pi/autostart нужно добавить последней строкой путь до исполняемого файла твоей программы
    Отредактировать файл можно в терминале. Запускаешь терминал и в командной строке пишешь

    sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
    

  • Точное управление GPIO
    piP pi

    @VBDUnit#6838, то что у Вас импульсы получаются очень короткими, это очень очень странно.
    Попробуйте посмотреть внутренности функции ndalay или похожей, а также обратите внимание на счётчик тактов процессора, искать можно по слову rtdsc, возможно счётчиков несколько.
    https://raspberrypi.stackexchange.com/questions/24882/armv6-instruction-set-for-getting-timestamp-counter-tsc

    Конечно частота может проседать(при перегреве например), но это решение на первый взгляд лучше nop, по крайней мере не хуже. На первый взгляд коротких импульсов, при её применении, быть не должно.


  • Точное управление GPIO
    piP pi

    @Crush#6833 Как на счет попробовать вместо Delay (или wait, как в этом коде), делать счет циклов, которые равны времени такта процессора (если ничто другое, конечно его не прерывает).
    Как вариант, который иногда применяю, можете делать В каждом цикле явное сравнение пройденного времени dT:
    Прошло 400 then Do.
    Это часто решает вопрос. По началу я только так с ШИМами и работал.

    Пробовал, но для 400 нс оно выдавало то 800, то 500, в итоге сделал просто пачку nop'ов.

    @sv-lary#6830 Да, ESP32 и STM32 тоже ко мне едут 🙂 но что-то долго.

    @Mity999#6835 1) Использовать для работы лент ESP32, а его соединить с raspberry pi например через com порт, ваше время тоже денег стоит, и если разработка единичная, то это может быть самый лучший вариант.

    Мне почему-то тоже кажется что выход будет примерно такой.

    @Mity999#6835 )Обратите внимание на библиотеку https://github.com/sarfata/pi-blaster там через dma сразу выводится на несколько каналов вроде до 32, но там выводится в другом формате. Можно попробовать адаптировать этот код с исходным кодом для одноканального драйвером ленты.

    Очень интересно, пытаюсь сейчас понять как они это сделали.

    @Mity999#6835 Писать в регистры ввода вывода на прямую(предварительно промэпировав их в адресное пространство процесса), минуя какие либо вызовы функций

    Уже 🙂


  • Точное управление GPIO
    piP pi

    Сделал модуль ядра, блокировку прерываний, DMA с возможностью контролировать 20 пинов параллельно (возможно, больше), двойную буферизацию и барьеры памяти. Oсциллограмма пульсирует где-то раз в секунду, удлинняясь-укорачиваясь пропорционально на 10%, но в целом интервалы выдерживаются в пределах допустимых 400+- нс. Пoдмаргиваний стало меньше, но всё еще иногда встречаются раз в 2-3 секунды.

    Ключевое место работает так:

    volatile register uint32_t m;
            while (smallBufferCurPos < smallBufferEnd)
            {
                 //делаем это, только обмазывая всё в три слоя memorybarriами на всякий случай
                //*setReg = *smallBufferCurPos++;
                //*clrReg = *smallBufferCurPos++;
                
                m = READ_ONCE(*smallBufferCurPos);
                barrier();
                WRITE_ONCE(*setReg, m);
                smallBufferCurPos++;
     
                barrier();
     
                m = READ_ONCE(*smallBufferCurPos);
                barrier();
                WRITE_ONCE(*clrReg, m);
                smallBufferCurPos++;
     
                barrier();
                            
                //wait 400 ns
                asm volatile(A_LOT_OF_NOP);
            }
    

    Буферы состоят из uint32_t. По бoльшому буферу бежим указателем с шагом 24 * 3 * 3 * 2. На каждом шаге копируем 24 * 3 * 3 * 2 значения в маленький буфер. smallBuffer содержит в себе 24 * 3 * 3 * 2 значения, каждое значение - это 32 битный uint, в котором хранятся первые 20 бит для выставления/сброса уровней на 20 пинах. Значения в буфере чередуются - биты установки, пoтoм биты сброса, потом снова биты установки и т.п. После каждой пары установки-сброса ждем 400 нс с помощью нопов.

    На oсциллограмме среди нормальных пачек импульсов сумел oткопать битую пачку, где видно причины, по которым вcпыхивают светодиоды (в приложении).

    Описание
    Описание
    Описание
    Описание

    Я не oчень понимаю, почему оно так выглядит. Я бы пoнял, если бы местами осциллограмма была растянута, т.к. комп тормознул и что-то там где-то подгрузил/прерывание прорвалось через блокировку/ещё что-нибудь. Но встречается не только растягивание, но и, наборот, ускорение, где высокий уровень вместо 400 нс длится почти мгновение (Screenshot_2022-01-12-12-53-44.png). То ли я тупой и не умею в барьеры памяти, то ли это ещё какой-то фактoр, который я пока не понимаю.

    Есть ещё мысль большой буфер разместить в некешируемой памяти, чтобы кешировался только маленький, но я пока не мoгу разобраться с линуксовской kernel-функцией dma_alloc_coherent - оно хочет от меня указатель на устройство, а у меня его нет, я просто хочу выделить некешируемую память. NULL не передашь - падает, проверил. Возможно, нужно использовать другую функцию.


  • Точное управление GPIO
    piP pi

    И ещё:
    В основе Raspberry pi лежит процессор, который снижает свою скорость при перегреве, при недостатке питания, возможно ещё когда-то. Также там есть кеш команд/памяти, который разделяется с другими потоками/процессами, спекулятивное исполнение на конец. Поэтому ждать от него точных временных интервалов выполнения команд, как-то странно.
    И система реального времени вряд ли здесь поможет, хотя кто его знает. Но даже если и поможет, то решение получается какое то ненадёжное.


  • Точное управление GPIO
    piP pi

    Несколько абстрактных мыслей, возможно автору они чем то помогут.

    1. Использовать для работы лент ESP32, а его соединить с raspberry pi например через com порт, ваше время тоже денег стоит, и если разработка единичная, то это может быть самый лучший вариант.
      2)Обратите внимание на библиотеку https://github.com/sarfata/pi-blaster там через dma сразу выводится на несколько каналов вроде до 32, но там выводится в другом формате. Можно попробовать адаптировать этот код с исходным кодом для одноканального драйвером ленты.
    2. Писать в регистры ввода вывода на прямую(предварительно промэпировав их в адресное пространство процесса), минуя какие либо вызовы функций

  • Выход GIPO
    piP pi

    @VVladimir#6478 Вы можете делать шесть (и более) потоков с программными ШИМами, на каждый Пин. И управляйте сплкойно драцверами Мосфетов, Ir2101 или что там вы используете.


  • Точное управление GPIO
    piP pi

    @VBDUnit#6829 Как на счет попробовать вместо Delay (или wait, как в этом коде), делать счет циклов, которые равны времени такта процессора (если ничто другое, конечно его не прерывает).
    Как вариант, который иногда применяю, можете делать В каждом цикле явное сравнение пройденного времени dT:
    Прошло 400 then Do.
    Это часто решает вопрос. По началу я только так с ШИМами и работал.


  • Проблемы с Wi FI распберри
    piP pi

    Спасибо за помощь, все работает. Как оно все начало работать сам не знаю, просто неожиданно заработало.


  • Проблемы с Wi FI распберри
    piP pi

    @sv-lary#6827 Не пингуется всё кроме компютера подключенного через кабель. В PuTTY через WiFi. Я и сам понимаю, что такой ситуации быть не может, но так уж вышло.


  • Точное управление GPIO
    piP pi

    @VBDUnit#6829 я не видел драйверов, которые это смогут с таким количеством диодов сделать на нормальной скорости.

    Я в этой области не разбираюсь совсем, но просто пошёл на гуглу и вбил там в строке поиска ESP32 LED. И очень много ссылок выскочило. Например:

    Board with 25 RGB LEDs is offered with ESP32-C3 or ESP32-Pico-D4
    https://www.cnx-software.com/2022/01/07/board-with-25-rgb-leds-is-offered-with-esp32-c3-or-esp32-pico-d4/

    На алибабе этот модуль стоит 1200 рублей.

    @VBDUnit#6829 это довольно дорого

    Не знаю, но это всяко сопоставимо с ценой самой ленты.

    @VBDUnit#6829 получилось притащить DMA для малины

    Драйвера конкретно для малины я не писал. Но, насколько мне известно, поддержка DMA там есть и так. Если же Вы планируете использовать DMA в своём драйвере LED, то может быть Вам окажется полезным перевод, который я когда-то делал для себя, в процессе разработки своих драйверов. Сайт

    http://larionov.mytomsk.ru/

    Там на закладке "Переводы" есть статья "Применение динамческого мапирования DMA для драйверов обычных устройств" - может быть пригодится.

    Моё мнение такое: нужно использовать аппаратные драйверы LED. Если готовых таких не найти, то надо обратиться к железячникам, которые работают с PLIS-ками. Они за три дня сделают такой драйвер. Им это будет гораздо проще, чем Вам писать драйвер с DMA...

  • 1
  • 2
  • 13
  • 14
  • 15
  • 16
  • 17
  • 313
  • 314
  • 15 / 314
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи