запуск железного таймера 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 whendelay
is 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 todelay
function to keep the WiFi stack running smoothly.