Страница 134 из 135 ПерваяПервая ... 3484124132133134135 ПоследняяПоследняя
Показано с 1,331 по 1,340 из 1349

Тема: Hardella IDE

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

    По умолчанию

    Цитата Сообщение от 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. #1332

    По умолчанию

    Цитата Сообщение от 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. #1333

    По умолчанию

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

  4. #1334

    По умолчанию

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



    Ещё вспомнил: в 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... сейчас вычисляется на КДС стороне, поэтому, да, если иногда циклы долгие, то можно не заметить.

  5. #1335

    По умолчанию

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

  6. #1336

    По умолчанию

    Цитата Сообщение от 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нс).

  7. #1337

    По умолчанию

    Подал на in1 1..0..1..0 -- программа выполняется за 21..48 тактов (==0.25мкс).

    Честно говоря, не понял зачем такие case, у которых все ветки одинаковые (у case всегда выполняется только одна ветка).

  8. #1338

    По умолчанию

    По bool команде вкл. выход. Частота начнёт расти. По достижении заданного значения программа выключает выход.
    Проблемма в том что оказыватся частота моя очень (за короткий промежуток времени) не стабильна. Как раз ~70 Гц. (судя по осциллографу)
    А требуется точность огого (( По расчётам точность получается 37 импульсов. А требуется 56. Теоретически конечно укладываюсь, но практически... пока не получается.
    Пока пишу разные варианты. В пн. буду пробовать.

  9. #1339

    По умолчанию

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

  10. #1340

    По умолчанию

    Вроде стабилизировалось значение.
    Пришёл к выводу что мне 2 канала всё равно не надо. Сложил и их, да усреднил как принято)
    В покое, - только 1 единица скачет.
    Но при этом чувствует зараза))) Рядом станок зашевелился, показания "в пляс"
    Дискретность не наращивал. Т.к. по данным с осциллографа точность измерения слабо увеличится (достаточно низкая частота и довольно большие периоды). А вот разброс из за плавания частоты, прямопропорционально.

Страница 134 из 135 ПерваяПервая ... 3484124132133134135 ПоследняяПоследняя

Ваши права

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