RP2040 Измерение времени менее 1 мкс

Сейчас переменная М в строке 13 считает количество микросекунд. за 1 секунду переменная прибавляет свое значение на 1000000. Нужно чтобы переменная меняла свое значение более часто, например каждые 50 нс.

volatile unsigned long M;
unsigned long M_old;
//--------
void setup()
{
  multicore_launch_core1(main2);
  Serial.begin(115200);
  while (!Serial);
}
//--------
void loop()
{
  M=micros();
}
//--------
void loop2()
{
  if ((M-M_old)>=1000000)
  {M_old=M;Serial.print(" M= ");Serial.println(M);}
}
//--------
void main2() { while (1) {loop2();} }

точно 50нс?

Кому нужно? Зачем нужно? Кто из людей сможет среагировать на такие интервалы? Даже если зарядить хардверный таймер на 50 нс то часть времени займёт вход-выход из процедуры прерывания и в самом прерывании сделать можно будет не много. Да ещё надо как то обработать это событие. Может быть всё же надо измерить интервал с такой точностью? Тогда не надо переменных, а только в конце интервала один раз прочитать регистр таймера.

3 лайка

Ну чё пристали, нужно значит нужно, а то что за это время тока пин поднять можно, так это мелочи. Он пытается сериалу напихать чего то.

2 лайка

“Эстетов” просьба не заморачиваться, я сам знаю, что и как можно за это время сделать…

да хоть 500 пикосекунд,( быстрее пока что не делал))) )

  1. сколько бабла за проект ?
  2. вы уверенны что ваше железо на такой частоте работает ?
    или вам просто сделать, а железо потом сами найдете ?

на чем делал замер интервалов 500пкс? это какая частота должна быть, 2ГГц минимум?

1 лайк

flexprint
недавно вы мне вкручивали в уши какую то дичь…
не отвечали на вопросы, и вели какой то монолог…
а ведь можно было дать ссылку, а я бы объяснил моменты которые вы не могли понять…
ну да ладно, вопрос не в этом, а в том где гарантии что у вас не случится и в этот раз помутнение рассудка, или что то вам не покажется ?)))
у меня есть хребет, и пока вы не докажете мне что достойны что бы отвечали на ваши вопросы, от меня вы ответов больше не получите)))

Все верно. Просто я не знаю как можно прочитать регистр таймера. Поэтому и надо чтобы переменная М читала регистр таймера. Тогда я в конце интервала один раз и прочитаю.

абдурина на avr (nano,uno,mega) работает на частоте 16МГц, один такт это 62.5 наносека. соответственно в лучшем случае можно замерять время интервалами не менее этой величины.

ЗЫ: увидел только что малинка пико, там да, там конечно на порядок точнее можно.

я тебе вкручивал в ответ на твое мычание.
забудем распри.
расскажи, чем, как замерил и с какой точностью интервалы по 0,5нс. Очень интересно, никакой дичи.

В заголовке темы указан RP2040, а это даже без оверклокинга 133 МГц

да, теперь увидел что про пико разговор. там всё можно, она в два раза от номинала гонится как нечего делать.

на RP2040 конечно, у нее частота 133 МГц, более чем достаточно для 500 пкс, не знаешь что ли? :slight_smile:

Ну что ты на него реагируешь? видишь же, что пишет пацан лет 14-ти, он просто не научился еще за базаром следить, ляпает что в голову взбредет

450 я лично разгонял, ядро повышает темперетуру с 41С до 43С

не сомневаюсь, скажу что частота дохренильон герц, и точно не ардуино, как минимум логика на транзисторах, как вариант кеш 1го уровня)))

бред какой-то написан… “не знаю как прочитать регистр… поэтому пусть переменная читает”
а переменная откуда знает, как регистры читать, если вы не знаете? Ж)

По сути - возьмите описание RP2040 СДК, таи и регистры и таймеры подробно описаны

Секундочку, калькулятор возражает: 1 / 133000000 = 0,000000007518797

Т.е. один такт длится 7,5 нс. Так каким образом можно зафиксировать интервал в 15 раз меньший?

это ты у @BABOS спроси :slight_smile:

Блин, увидел бред, зеленую иконку и подумал, что это он и есть. Сорри, сарказм не понят )))