Страница 115 из 117 ПерваяПервая ... 1565105113114115116117 ПоследняяПоследняя
Показано с 1,141 по 1,150 из 1349

Тема: Hardella IDE

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,195

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    не брезгуйте конструкцией IF...ELSIF
    И вместо ФБ ловли фронтов используйте
    Код:
    foo :=  inputs.in1
    (*где то потом*)
    IF foo and NOT bar THEN
       ...
    ELSIF NOT foo and bar THEN
       ...
    END_IF;
    bar := foo;
    должно стать более читаемо и менее затратно
    Код:
    if input.in1 xor x then
      x := not x;
      if x then
        .. 
      else
        ..
      end_if
    end_if
    имхо еще менее затратно. Тут же какие-то мкс/нс ловят )) ?

  2. #2

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    не брезгуйте конструкцией IF...ELSIF
    И вместо ФБ ловли фронтов используйте
    [CODE]
    foo := inputs.in1
    (*где то потом*)
    IF foo and NOT bar THEN
    ...
    Смысл понятен. Спасибо за ответ.

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Если усреднять за 16, то вместо деления можно использовать сдвиг -- будет гораздо быстрее.
    ЭТО ГЕНИАЛЬНО!!! ))) Если придётся усреднять, то именно так и сделаю!

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    IF ... IF F_TRIG -- с этим поосторожнее нужно быть. Сам по себе триггер же сбрасывать нужно, а, если внешняя проверка не выполнена, то и триггер не сбросится.
    Пытаюсь родить что то иное. Спс за подсказку. Пока, получается, что через раз я должен наблюдать измеренное значение = 1. Надо конечно исправить.

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Если есть Hardella проект -- могу прогнать на эмуляторе -- посмотреть сколько тактов занимает программа
    По самым грубым подсчётам, 37 команд. То есть примерно 185нСек. (я, правда, да же близко не представляю сколько м.ц. занимают используемые мной команды)
    Но тут до 1000 нСек как до луны. Должен уложиться.
    Упаковать проект и выложить сюда конечно нет проблем. Но надо ли это...

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    На какой частоте приходят данные?

    Вообще говоря, обмен с КДС выполняется как часть задержки между циклами. Иначе говоря, PRU прогамма могла бы просто сделать задержку до следующего цикла, но перед этим происходит обмен (если нужен).

    Сам обмен довольно быстрый. Вроде, 20нс на переменную или около того.
    Насчёт обмена понял. С учётом моих частот у меня да же длительность импульса закончится не успеет.
    Минимальная частота примерно 700 Гц. То есть по расчётам не более 1428 импульсов.
    Максимальная частота 10100 герц. То есть моя программа теоретически пройдёт почти 100 оборотов между импульсами.
    Так что ни о каких мкСек речи не идёт))


    Цитата Сообщение от Валенок Посмотреть сообщение
    все ничего, но это что то вирусное
    Не понял юмора? что не так? (без сарказма. Действительно не понимаю что не так)

    Цитата Сообщение от Валенок Посмотреть сообщение
    Тут же какие-то мкс/нс ловят )) ?
    Неее...))) 10КГц макс.
    И ещё один ламерский вопрос))) Надо ли заморачиваться делать защиту от дребезга? или это уже встроено по умолчанию? На харделла.ком вижу 1 строчку что fast_inputs учитывает настройку фильтрации. А где эти настройки по смотреть или\и поменять не нахожу...
    (осцилом я вижу не большие помехи на входе... вот и болит голова)
    Последний раз редактировалось TV13M; 26.07.2020 в 16:28.

  3. #3

    По умолчанию

    Если усреднять за 16, то вместо деления можно использовать сдвиг -- будет гораздо быстрее.

    IF ... IF F_TRIG -- с этим поосторожнее нужно быть. Сам по себе триггер же сбрасывать нужно, а, если внешняя проверка не выполнена, то и триггер не сбросится.

    Если есть Hardella проект -- могу прогнать на эмуляторе -- посмотреть сколько тактов занимает программа

  4. #4

    По умолчанию

    На какой частоте приходят данные?

    Вообще говоря, обмен с КДС выполняется как часть задержки между циклами. Иначе говоря, PRU прогамма могла бы просто сделать задержку до следующего цикла, но перед этим происходит обмен (если нужен).

    Сам обмен довольно быстрый. Вроде, 20нс на переменную или около того.

  5. #5
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,195

    По умолчанию

    все ничего, но это что то вирусное
    Counter1 := Counter1 + 1; (* прибавляем 1 к счётчику *)

  6. #6

    По умолчанию

    Владимир здравствуйте!
    Можете глянуть сколько времени занимает программа?
    Что то с усреднением выходит медленно(
    На после усреднения я получаю значение 104 импульса. (примерная частота 3КГц)
    Вложения Вложения
    Последний раз редактировалось TV13M; 02.08.2020 в 12:02.

  7. #7

    По умолчанию

    Вроде, программа-то простая.
    Что значит "с усреднением выходит медленно"?



    Ещё вспомнил: в program configuration есть галочка "report statistics". Её пробовали?

    Тогда в генерируемых Pru0MemoryRead будет возвращаться статистика:

    Код:
    output maxCycleTimeMicros : REAL; (* maximum time it took to perform PRU cycle, microseconds *) 
    output lastCycleTimeMicros : REAL; (* last duration of the PRU cycle, microseconds *) 
    output maxOutputWriteTimeMicros : REAL; (* max timestamp of the output write time, microseconds *) 
    output lastOutputWriteTimeMicros : REAL; (* last timestamp when outputs were written, microseconds *)
    Можно прямо в КСД открыть и смотреть сколько времени работает PRU программа.
    CycleTimeMicros -- это длительность работы PRU программы (вроде, общая)
    OutputWriteTimeMicros -- это длительность обмена из PRU в КДС

    max... сейчас вычисляется на КДС стороне, поэтому, да, если иногда циклы долгие, то можно не заметить.

  8. #8

    По умолчанию

    Медленно: - осцилограф говорит что время паузы между импульсами ~285мкСек. А ПРУ программа при добавлении усреднения выводит значение 105.
    За совет, спасибо. Попробую.
    Пока буду искать косяк в своей программе.

  9. #9

    По умолчанию

    Цитата Сообщение от TV13M Посмотреть сообщение
    Медленно: - осцилограф говорит что время паузы между импульсами ~285мкСек. А ПРУ программа при добавлении усреднения выводит значение 105.
    За совет, спасибо. Попробую.
    Пока буду искать косяк в своей программе.
    А что всё-таки должна делать программа?
    Измерять частоту? И что потом?
    Как-никак, если указан цикл 0.5мкс, то программа 570 раз прокрутится за 28

    Ещё наблюдение: есть блок PRU_CURRENT_TIME с помощью которого можно получать "количество тактов, пройденных PRU процессором" -- totalCycles
    С его помощью можно относительно измерять интервалы времени.

    FUNCTION_BLOCK PRU_CURRENT_TIME
    output totalCycles : DWORD; (* Total CPU ticks elapsed *)
    output prevOutputWriteTime : DWORD; (* Absolute time when previous outputs were written (in CPU ticks) *)
    output cycleLength : DWORD; (* PRU cycle length in CPU ticks *)
    Например:

    Код:
    FUNCTION_BLOCK FREQ 
      variables: 
        input in : BOOL; 
         
        output cnt : WORD; 
        output delta : DWORD; 
         
        totalCycles : DWORD; 
        prevRtrigTime : DWORD; 
        timer : PRU_CURRENT_TIME; 
       
      body: 
        IF R_TRIG(CLK := in).Q THEN 
          cnt := cnt + 1; 
          totalCycles := timer.totalCycles; 
          delta := totalCycles - prevRtrigTime; 
          prevRtrigTime := totalCycles; 
        END_IF;
    Тогда detla и будет интервалом между передними фронтами импульсов (единица измерения -- 1 такт, который равен 5нс).

  10. #10

    По умолчанию

    По изменению AverCount измеренное значение пишется в разные регистры. Потом это дело складывается и сдвигается(делим на 16)...
    Но потом я понял что проще сразу складывать...
    А теперь я понял что и действительно не нужены эти CASE))

Страница 115 из 117 ПерваяПервая ... 1565105113114115116117 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •