Доброго времени суток.
Небольшой проект проект немного расширился и с UNO пришлось перейти на ESP32. Данное интересное сообщение выводится при взаимодействии с датчиком холла LM393 3144 при работе с прерыванием. На UNO прекрасно отрабатывало. На ESP32 периодически выдает в ошибку и перезагружается. Частота для датчика холла генерируется довольно стабильно и низкая - 1500Гц. В сети довольно мало информации и нашел только то что можно настроить чтобы игнорировало и мгновенно перезапускалось. Но это думаю не выход.
Код довольно простой.
unsigned long lastflash;
int RPM;
void setup() {
Serial.begin(115200);
attachInterrupt(25,sens,RISING);
pinMode(26, OUTPUT);
digitalWrite(26, HIGH);
}
void sens() {
RPM=60/((float)(micros()-lastflash)/1000000);
lastflash=micros();
}
void loop() {
if ((micros()-lastflash)>1000000){
RPM=0;
}
Serial.println(RPM);
delay(1000);
}
И сама паника )))
Guru Meditation Error: Core 1 panic’ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x400846a4 PS : 0x00050a31 A0 : 0x800f29f4 A1 : 0x3ffbfa4c
A2 : 0x00000040 A3 : 0x00018040 A4 : 0x000637ff A5 : 0x3ffbfa1c
A6 : 0x00000000 A7 : 0x3ffc2360 A8 : 0x3ffc20a0 A9 : 0x400890f2
A10 : 0x3ffbdcd4 A11 : 0x3ffbdbc0 A12 : 0x00000000 A13 : 0x00000001
A14 : 0x00000000 A15 : 0x00000000 SAR : 0x00000001 EXCCAUSE: 0x0000001c
EXCVADDR: 0x800f2a00 LBEG : 0x40083f99 LEND : 0x40083fa1 LCOUNT : 0x00000027
Backtrace: 0x400846a1:0x3ffbfa4c |<-CORRUPTED
ELF file SHA256: fbfca8158
Rebooting…
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4916
load:0x40078000,len:16436
load:0x40080400,len:4
ho 8 tail 4 room 4
load:0x40080404,len:3524
entry 0x400805b8
Прошу совета в какую сторону копать.
BOOM
18.Декабрь.2024 13:20:01
3
Первое что в голову пришло (может быть и не имеет отношения к проблеме) - почему дата 8 июня 2016 года?
v258
18.Декабрь.2024 13:23:15
4
Это дата внутренних часов esp.
Если бы это было так, она бы менялась, а она всегда такая.
На самом деле - это время компиляции ROM. Оно у все практически одинаковое с точностью до секунд.
BOOM
18.Декабрь.2024 13:25:10
6
Почти взрослый парень, так то ))) третий класс )))
Возможно. Но дата и время “Jun 8 2016 00:22:57” все время одинаково. Выходит перезапускается и обнуляет свои внутренние часы …
v258
18.Декабрь.2024 13:28:27
8
Как бы там ни было, к проблеме отношения не имеет
Попробуйте в начала строк №№ 1 и 2 добавить слово volatile
Примерно понял что изменилось в состоянии этих переменных. Но увы не помогло. (( Периодичность и содержание “паники” не изменились.
BOOM
18.Декабрь.2024 14:45:13
11
А мне интересно - что из всего представленого в коде относится к 1 ядру, а что ко второму?
SAB
18.Декабрь.2024 16:34:13
12
Да проблема не в коде, а в железе. Пробуйте отсоединять последовательно периферию от контроллера.
Установите расширение ESP Exception Decoder. С ним можно найти строку, которая вызывает сбой.
Методом исключения к esp остался подключенным только датчик холла.
volatile int lastflash;
int RPM;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
attachInterrupt(12, Isr, RISING);
digitalWrite(13, HIGH);
}
void Isr() {
RPM=60/((float)(micros()-lastflash)/1000000);
lastflash=micros();
}
void loop() {
if ((micros()-lastflash)>1000000){
RPM=0;
}
Serial.println(RPM);
delay(1000);
}
По инструкции к esp переписал код с “родными” функциями. Но это не помогло от слова совсем. Та же “паника” и с тем же периодом (((
Так датчик то, вроде как на 5в, а esp 3.3 надо.
Может в этом дело?
P.S. И ещё была тут об этом тема. Прерывания в ESP, объявленные подобным образом, выполняются довольно медленно.
Возможно, накапливается очередь…
питание датчика от стаба esp 3.3в. компаратор lm393 на котором построен датчик по даташиту от 2в.
ua6em
20.Декабрь.2024 16:04:31
18
тут дело не в питании датчика
В поиске по форуму ещё до создания темы искал про прерывание в esp. Не нашел или не заметил. Если кто вспомнит тыкните пальцем пожалуйста. )))
Уверен что нет. При первой же ошибке обвязку проверил. На осциллографе пульсации есть и совпадают по частоте что выводятся в порт.