запуск железного таймера esp8266 (nodemcu) на arduino ide . Вопросов нет!
- Войдите на сайт для отправки комментариев
началось все с того что попросили меня помочь научиться работать с мк ,чел хотел собрать часы не матрицах max7219 с бегущей строкой. Все юзают и и видимо довольны библиотеками от адафрута?
Я посмотрев на готовые решения использовал их написал прогу забирающую с моего сайта данные (строку стринг) которую отдает обработчик запросов на php.
Посмотрел на матрицы и ох... нул.Покопался в нете не кто об этом не пишет, вроде как все нормально. Народ вы как это юзаете? при статике нормально, но бегущая строка у меня разьехалась перед глазами. Особенно это заметно при записи бегущей строки на видео, короче редко выводит ... но не в этом дело это затравка...
решил вызывать вывод по таймеру и ... оказывается ардуина иде не поддерживает железные таймеры esp8266! во е.. есть только совтовое ... начил лазить по мануалам референсам, смотреть адреса регистров чтоб добавить, но наткнулся на esp-open-sdk ( NONOS) там это уже есть.
короче решается все закидыванием файла hw_timer.c из sdk в папку ядра esp. я инклюдил файл непосредственно в своей программе, не закидывая в хедер ядра.
пример использования:
#define REG_READ(_r) (*(volatile uint32 *)(_r))
#define WDEV_NOW() REG_READ(0x3ff20c00)
#include <hw_timer.c>
uint32 tick_now2 = 0;
static uint32 j = 0;
void setup() {
Serial.begin(115200); //Serial connection
delay(500);
Serial.println("Waiting for connection");
hw_timer_init(FRC1_SOURCE,1);
hw_timer_set_func(hw_test_timer_cb);
hw_timer_arm(1000);
Serial.print(" hw_timer_init ");
}
void loop() {
} //end loop
void hw_test_timer_cb() {
j++;
if( (WDEV_NOW() - tick_now2) >= 800000 ) {
static uint32 idx = 1;
tick_now2 = WDEV_NOW();
os_printf("b%u:%d\n",idx++,j);
j = 0;
Serial.print("idx= ");
Serial.println(idx);
}
Serial.print("tick_now2 ");
Serial.println(tick_now2);
Serial.print("j= ");
Serial.println(j);
}
завелось, но уходит в перезагрузку по вочдогу, может быть из-за работы с сериал, надо сбросывать вочдог в программе (функция в esp работающая дольше 6 сек (кажись столько) вызывает перезагрузку, почему обьяснять думаю не надо).
ЗЫ в который раз убеждаюсь что ардуино иде есть универсальные грабли для любого мк, даже для тех же ардуин 328, меги... вот в очередной раз наступил...
М б вы не умеете их готовить
Ну так дергайте ватчдог сами, или отключайте в нужные вам периоды. Уж если залезли в сдк то там и про ватчдог все написано :)
А вообще в рекомендациях написато, что код для 8266 в ардуино необходимо разбавлять делеями, для обработки системных функций. Вы что всерьез считаете, что вашему вайфаю в бекграунде ничего не требуется ? :)
ТС , Вы случайно не в Мытищах живете ?
так я все сделал, и дергаю вачдог. поделился с ардуиноманами как готовить на ардуино иде.
для дерганья добавил
что отдает WDEV_NOW(); ? что лежит тутREG_READ(0x3ff20c00) ?милисикунды со старта?научите ?
Ну так дергайте ватчдог сами, или отключайте в нужные вам периоды. Уж если залезли в сдк то там и про ватчдог все написано :)
А вообще в рекомендациях написато, что код для 8266 в ардуино необходимо разбавлять делеями, для обработки системных функций. Вы что всерьез считаете, что вашему вайфаю в бекграунде ничего не требуется ? :)
ТС , Вы случайно не в Мытищах живете ?
где написано про делеи ткните носом. моего вайфая в приведенном выше коде вроде как нет, если только он своей жизнью на уровне системы возится. не не в мытищах, на недалеко от щуки.
зы респект москау
где написано про делеи ткните носом.
https://arduino-esp8266.readthedocs.io/en/latest/reference.html - раздел Timing and delays:
Remember that there is a lot of code that needs to run on the chip besides the sketch when WiFi is connected. WiFi and TCP/IP libraries get a chance to handle any pending events each time the
loop()function completes, OR whendelayis called. If you have a loop somewhere in your sketch that takes a lot of time (>50ms) without callingdelay, you might consider adding a call todelayfunction to keep the WiFi stack running smoothly.