Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Raspberry Pi
  3. Формирование сигнала на порту GPIO (разработка в С++

Формирование сигнала на порту GPIO (разработка в С++

Запланировано Прикреплена Закрыта Перенесена Raspberry Pi
9 Сообщения 1 Posters 120 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано
    #1

    Здравствуйте! Задача стоит в том: необходимо формировать импульсы с периодом в 100мкс. Реализованние это как бесконечный цикл (пишу на С/С++) но если смотреть на осциллографе периодически фронты импульса двигуются (просиходит задержка, связанная видимо с внутренними прерываниями )
    Не подскажете как можно избавится от этих задержек?

    1 ответ Последний ответ
    0
    • piP Не в сети
      piP Не в сети
      pi
      написал в отредактировано
      #2

      Для формирования импульсов используйте прерывания по таймеру, а не бесконечный программный цикл.

      1 ответ Последний ответ
      0
      • piP Не в сети
        piP Не в сети
        pi
        написал в отредактировано
        #3

        man2000 (2014-11-12 15:29:26):Для формирования импульсов используйте прерывания по таймеру, а не бесконечный программный цикл.
        для этого необходимо писать драйвер?

        1 ответ Последний ответ
        0
        • piP Не в сети
          piP Не в сети
          pi
          написал в отредактировано
          #4

          Нет, драйвер не нужен. Используйте библиотеку BCM2835, но модуль лучше выполнять в режиме ядра — так генерация будет точнее.

          1 ответ Последний ответ
          0
          • piP Не в сети
            piP Не в сети
            pi
            написал в отредактировано
            #5

            man2000 (2014-11-20 00:44:54):Нет, драйвер не нужен. Используйте библиотеку BCM2835, но модуль лучше выполнять в режиме ядра — так генерация будет точнее.
            А можно по подробнее. Я не понял, как можно использовать прерывания с помощью этой библиотеке. пришлось для формирования сигнала привязывать по UART микроконтроллер, который уже и формирует сигнал. Если бы можно эту же задачу сделать без него(МК), это сильно упростило бы схему.

            1 ответ Последний ответ
            0
            • piP Не в сети
              piP Не в сети
              pi
              написал в отредактировано
              #6

              Функция bcm2835_delayMicroseconds() как раз использует прерывание по таймеру и предназначена для точной выдержки интервала времени. Просто вызывайте эту функцию в Вашем цикле, который формирует импульсы. Должно работать. ИМХО.

              1 ответ Последний ответ
              0
              • piP Не в сети
                piP Не в сети
                pi
                написал в отредактировано
                #7

                man2000 (2014-11-27 21:47:45):Функция bcm2835_delayMicroseconds() как раз использует прерывание по таймеру и предназначена для точной выдержки интервала времени. Просто вызывайте эту функцию в Вашем цикле, который формирует импульсы. Должно работать. ИМХО.
                так изначально и делал, я так понимаю системные прерывания «мешают» формировать нормальный сигнал

                1 ответ Последний ответ
                0
                • piP Не в сети
                  piP Не в сети
                  pi
                  написал в отредактировано
                  #8

                  Если при использовании bcm2835_delayMicroseconds() фронты импульсов сдвигаются на недопустимую величину (кстати, какая величина для Ваших целей допустима, и какой сдвиг получается на практике ?), то дело плохо… Предположу, что наряду с формированием импульсов Малинка нагружена ещё какими-то ресурсоёмкими задачами.
                  Постарайтесь максимально оптимизировать фрагмент программы, формирующий очередной импульс. Например, категорически нельзя использовать в этом месте файловые операции и обращения к другим устройствам. Исключите из программы все функции, которые можно выполнить в других, параллельно исполняемых программах.
                  Если не поможет, то можно попробовать запускать формирователь импульсов как «демона», ну и как последнее средство — запуск в режиме ядра.

                  1 ответ Последний ответ
                  0
                  • piP Не в сети
                    piP Не в сети
                    pi
                    написал в отредактировано
                    #9

                    man2000 (2014-11-28 19:20:11):Если при использовании bcm2835_delayMicroseconds() фронты импульсов сдвигаются на недопустимую величину (кстати, какая величина для Ваших целей допустима, и какой сдвиг получается на практике ?), то дело плохо… Предположу, что наряду с формированием импульсов Малинка нагружена ещё какими-то ресурсоёмкими задачами.
                    Постарайтесь максимально оптимизировать фрагмент программы, формирующий очередной импульс. Например, категорически нельзя использовать в этом месте файловые операции и обращения к другим устройствам. Исключите из программы все функции, которые можно выполнить в других, параллельно исполняемых программах.
                    Если не поможет, то можно попробовать запускать формирователь импульсов как «демона», ну и как последнее средство — запуск в режиме ядра.
                    Запускал программу состоящую из единственного цикла с постоянным изменением сигнала (демоном тоже). больше ничего не было запущенно. Осциллографом видно, периодически проскакивают задержки большей длины чем положено. (длина импульса ~100мкс, приемлимое отклонение 1-3%)
                    Я так понимаю что единственный выход писать драйвер, буду в свободное время просвещаться.

                    1 ответ Последний ответ
                    0

                    • Войти

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

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