RP2040 и таймер
- Войдите на сайт для отправки комментариев
Ср, 12/10/2022 - 23:50
У платы RP2040 надо посчитать количество тактов опорной частоты с определенного момента. Например если частота работы платы 125 МГц а интервал 2 секунды количество тактов должно быть 250М. Может кто нибудь подсказать как это сделать на Си или написать ссылку на статью?
Пока код такой.
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 10, 9, 8, 7);//(RS,E,D4,D5,D6,D7) int main() { unsigned long t1,t2,t3; lcd.begin(20, 4); while (true) { t1=micros(); delayMicroseconds(1000000); t2=micros(); t3=t2-t1; lcd.setCursor(0, 0); lcd.print(t1); lcd.setCursor(0, 1); lcd.print(t2); lcd.setCursor(0, 3); lcd.print(t3); delay(1000); } }Считываю значение Т1 затем делаю задержку в 1000000 мкс. (эта задержка только для демонстрации). Затем считываю значение Т2.
Значение Т3 конечный результат, который мне нужен. Но у него точность только 1 мкс. Нашел по ссылке переменную time.monotonic_ns() но не знаю как ее применить в данном коде?
https://digitology.tech/docs/python_3/library/time.html
вы в чем программируете? в инете куча рецептов как с LCD1602 работать , а в SDK есть готовый пример, в том числе и с таймерами, а то получается что у вас код под Arduino IDE, а ссылку вы привели для Питона. Определитесь уже.
Я программирую в Arduino IDE. Как работать с таймерами я нашел только для Питона. Поэтому ссылку и написал для питона. Если есть готовый пример для Arduino IDE прошу скинуть ссылку. Я не нашел как работать с таймером. Надо измерить интервал времени между двумя событиями с точностью до десятков наносекунд.
Возможно ли, что это то, что мне надо?
https://habr.com/ru/post/422443/
Не уверен, но думаю не найдёте такой пример под ide.
Так во 2 посте Вы пишите, что есть готовый пример под SDK. Вот и прошу ссылку на этот пример.
дык вы его все равно без костылей не прикрутите к Arduino IDE
https://arduino.ru/forum/apparatnye-voprosy/raspberry-pi-pico#comment-66...
pico-examples/i2c/lcd_1602_i2c at master · raspberrypi/pico-examples · GitHub
pico-examples/timer_lowlevel.c at master · raspberrypi/pico-examples · GitHub
вот из примеров уже в реальный проект миллисекундный таймер, есть микросекундный, наверняка если покапаться по документации, то есть еще более быстрый счетчик .
bool repeating_timer_callback(struct repeating_timer *t) { ++_dmfMillis; static unsigned long s1timer = 0; if ((_dmfMillis-s1timer) >= 1000UL) { s1timer = _dmfMillis; if (callbackF1SEChandler) callbackF1SEChandler(); if (callbackS1SEChandler) callbackS1SEChandler(); } // -- return true; } void startMillisTimer(void) { callbackF1SEChandler = NULL; add_repeating_timer_ms(1, repeating_timer_callback, NULL, &timer); // start millis timer }У платы RP2040 надо посчитать количество тактов опорной частоты с определенного момента. Например если частота работы платы 125 МГц а интервал 2 секунды количество тактов должно быть 250М. Может кто нибудь подсказать как это сделать на Си или написать ссылку на статью?
а чем определяется "определенный момент"?
Навскидку вроде все просто - на старте запускаете таймер на тактовой частоте, без делителя. В "определенный момент" просто читаете значение его счетчика, вот и все.
Это при условии, что измеряемый интервал меньше времени переполнения. Если больше - придется добавить счетчик числа переполнений на прерывании.