Наносекундный счетчик импульсов 328p

Тема в разделе "Arduino & Shields", создана пользователем postal2201, 28 май 2021.

  1. postal2201

    postal2201 Нерд

    Друзья подскажите, может ли Arduino Uno считать импульсы с высокой точностью? В частности длина одного импульса 250ns, пауза между импульсами 4.5625us
     
  2. parovoZZ

    parovoZZ Гуру

    Длительность такта у МК с кварцем 16МГц - 62.5 нС. Так что считайте сами.
     
  3. postal2201

    postal2201 Нерд

    parovoZZ, мне бы пример как считать. А то все что я нахожу то с micros, то с millis
     
  4. akl

    akl Гуру

  5. parovoZZ

    parovoZZ Гуру

    Перевести таймер в режим capture. По прерыванию с таймера забрать данные и перевести их в человеческий интервал. Но лучше для этой цели взять что-то более быстродействующее, ибо результат всегда будет кратен 1/Fcpu.
     
  6. akl

    akl Гуру

    дак ТСу вроде не нужно ничего измерять - ему надо тупо считать импульсы. достаточно обычного прерывания. хотя возможно понадобится засекать что серия импульсов закончилась
     
  7. Рокки1945

    Рокки1945 Гуру

  8. parovoZZ

    parovoZZ Гуру

    Если не нужна длительность импульсов, значит одним действием меньше.
    делать не надо
     
  9. parovoZZ

    parovoZZ Гуру

    прерывания не годятся.
     
  10. Unixon

    Unixon Оракул Модератор

    Измерение времени на таких скоростях должно быть аппаратным, генератор на 1+ГГц, очень быстрый счетчик, не менее быстрый FIFO буфер и уже потом микроконтроллер, желательно тоже адекватный по скорости, чтобы успевал забирать данные каждые 250ns. Можно утолкать часть логики в FPGA, если не найдется готовых чипов для клея.
     
  11. Рокки1945

    Рокки1945 Гуру

    Период его длительность 4.5625 + 0.25 = 4.8125 микросекунд - частота = 207792 Герца. Сам импульс 1/18 от его времени. Если амплитуда к 5 вольт
     
  12. akl

    akl Гуру

    но почему?
     
  13. Unixon

    Unixon Оракул Модератор

    А что конкретно нужно считать, количество импульсов или измерять интервалы времени между ними с точностью до наносекунд?
     
  14. parovoZZ

    parovoZZ Гуру

    время перехода на вектор прерывания сравним с минимальной длительностью импульса. Режим capture, наверное, не просто так придумали.
     
  15. akl

    akl Гуру

    но между импульсами же 4,5 микросекунды. пусть себе переходит на вектор, главное чтоб засекло
     
  16. parovoZZ

    parovoZZ Гуру

    пусть таймер считает. Иначе на кой хер он там.
     
  17. b707

    b707 Гуру

    не будет оно считать такие импульсы, там вход в прерывание по захвату, если не ошибаюсь, занимает минимум 4 такта - то есть 62*4 = 256 ns А у вас сам импульс такой длины.
    Берите что-то посерьезнее 328-й, например STM32
     
  18. parovoZZ

    parovoZZ Гуру

     
  19. Рокки1945

    Рокки1945 Гуру

    у него до прихода следующего импульса времени вагон и маленькая тележка
     
  20. akl

    akl Гуру

    объясните мне :mad:
    если взять обычное прерывание по фронту, то ему чтобы зарегистрировать фронт нужно больше чем 2 такта? то есть если импульс длится допустим 1 такт (или минимум 2), то оно не засечет фронт? но это же никуда не годится!

    вот и Рокки солидарен со мной