Частотомер на ESP32

volatile unsigned int int_tic=0; 
volatile unsigned long tic; 

void setup() {
Serial.begin(115200);
TCCR1A=0; TIMSK1 = 1<<TOIE1; //прерывание по переполнению
}
ISR (TIMER1_OVF_vect){ int_tic++; }

void loop() {

pinMode (5,INPUT); // вход сигнала T1
TCCR1B = (1<<CS10)|(1<<CS11)|(1<<CS12);//тактировани от входа Т1
delay(1000);
TCCR1B=0;
tic= ((uint32_t)int_tic<<16) | TCNT1; //сложить что натикало
int_tic=0; TCNT1 = 0; 
Serial.print(tic);
Serial.println(" Hz  ");
}

Помогите адаптировать код под ESP32 (код написан под ATMEGA328)
Компилятор ругается на все эти строки:

TCCR1A=0; TIMSK1 = 1<<TOIE1; 
TCCR1B = (1<<CS10)|(1<<CS11)|(1<<CS12);
TCCR1B=0;
tic= ((uint32_t)int_tic<<16) | TCNT1; 
ISR (TIMER1_OVF_vect){ int_tic++; }

ну еще бы, таких регистров таймера, в ESP наверное и в помине нет.

Таймеры есп программируются совсем по другим принципам. Адаптировать не получиться. Надо писать с нуля.

hw_timer_t * timer = NULL;
volatile unsigned int int_tic=0; 
volatile unsigned long tic; 

void IRAM_ATTR onTimer() {
   int_tic++; 
}

void setup() {
  Serial.begin(115200);
  timer = timerBegin(0, 80, true);
  timerAttachInterrupt(timer, &onTimer, true);
  timerAlarmWrite(timer, 1000000, true);
  timerAlarmEnable(timer);
}

void loop() {
pinMode (1, INPUT); // вход сигнала 
tic= int_tic;
int_tic=0; 
Serial.print(tic);
Serial.println(" Hz  ");
}

Мои попытки не увенчались успехом.

Попытка 2 тоже не дала результата

Может поможет:

https://kotyara12.ru/iot/esp32_timers/

Достаточно подробно расписано.

Не верю что нет готового кода для таких камня и задачи …

Можно поинтересоваться у ТС зачем понадобился данный переезд, да ещё и измерительного (индикатороного) прибора? Если цель получить опыт, то правильно выше сказали, просто перепишите всё заново самостоятельно. Не понятно зачем тратить время своё, и особенно других людей на совершенно бесполезный в наше время показометр, если есть осциллограф, для любых измерений формы и параметров. ТС скажите какова всё же ваша цель?

От 1 Герца до 40 Мегагерц, если устроит

1 лайк

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

1 лайк

Пытаюсь повторить эту тему, Универсальный Ардуино пробник | Аппаратная платформа Arduino
Только на amoled дисплее, а он идëт со встроенное esp32-s3 пока только получилось повторить измерение напряжения и сопротивления, сейчас хочу частометр ещë добавить, что бы при обнаружении частоты включался режим осциллографа, ясное дело, что это будет не точный прибор, но для пробника самое то, если нужно будет получить точные данные, придëтся топать за осциллографом.

Спасибо. Сегодня попробую отпишусь.

Спасибо за информацию.

Спасибо за уточнение.

Пипец! У меня без VPN не открывается. Уж он-то чем провинился?

У меня открылся без vpn

1 лайк

У Вас, что-то с интернетом, без VPN всё открывается.

1 лайк

У нас у всех

Мы их они нас и в конце концов всё ёх нах.

YouTube главная загружается по полминуты, ролик - 40 секунд и “Опа, что-то пошло не так”, на Амперку уже года два через vpn.

Из ящика с апельсинами торчат огромные уши, еще пару месяцев - и весь вылезет.

К сожалению код написан под ESP32 и на ESP32-S3 он вначале сильно ругался на всякие: LEDC_HIGH_SPEED_MODE, SIG_IN_FUNC226_IDX, но несмотря на то, что я победил эти ошибки и скетч откомпилировался, ESP32-S3 мне всё равно показывает 0HZ.

Пока приходит в голову мысль вынести частометр отдельно на Attiny13, так как измерение частоты у ESP32 забирает приличное время и на другое ядро не повесишь, так как хочу на нём веб сервер развернуть, а тут “доп. ядро” в виде Attiny13

Странно. Ютуб работает. Ампера тоже.
Без смс и впн.

Мы полигон, на нас обкатывают.

Не исключено. Или у вас просто больше серверов гугла померло.
У себя заметил - главная страница гугла не всегда сразу грузится.

Попробуй через ейдж посмотреть. У меня куча сайтов только через эйдж открывается. Тот же фэйсбук.