Здравствуйте,
читать все 279 страниц форума нет желания (прочёл первую и три последние) и хочу сказать следующее:
программист виноват всегда! и когда невнимательно изучит документацию на процессор,и когда ТЗ изменяют по нескольку раз до завершения проекта, и даже тогда, когда использует кривой компилятор (+ Arduino IDE только в простоте, поэтому и пользуемся).
1) WDT (сторожевая @) прекрасно справляется со своей задачей и никому ещё не вредила, а лишь помогала в надёжности, поэтому я всегда её использую. Ведь всего то и нужно:
#include <avr/wdt.h>
void setup(){
wdt_enable(WDTO_2S); // активировали таймер для сброса, 15 ms, 30 ms, 60 ms, 120 ms, 250 ms, 500 ms, 1s, 2s (ATMEGA328=+ 4s, 8s)
// WDT0_15MS; WDT0_30MS; WDT0_60MS; WDT0_120MS; WDT0_250MS; WDT0_500MS; WDT0_1S; WDT0_2S
}
void loop() {
while(1){
...
wdt_reset(); // говорим собаке "В Багдаде все спокойно", новый отсчет до сброса (как в фильме LOST:).
}}
____________________________________________________________
Установите ядро
https://github.com/MCUdude и будет счастье.
2) В AMS (arduino_mega_server.ino) добавьте:
void loop() {
unsigned long time_start = millis();
....
unsigned long time_stop = millis();
time_tmp = time_stop-time_start;
if(time_tmp>2){ Serial.print(F("time_work: ")); Serial.println(time_tmp); }
}
и увидите сколько времени тратит мега на выполнение кода, который НИЧЕГО сверх естественного не делает. Поэтому при грамотном подходе всё это можно запустить на ATmega328 c частотой 8 MHz (на внутреннем резонаторе) и результат будет ОДИНАКОВЫМ! Как? см ниже:
3) Используемые библиотеки в Ардуино либо глючные, либо жирные, (поэтому они и обновляются на новые версии), а мы от них используем лишь менее половины заложенных возможностей, зато компилируются они полностью.
4) SD карта и LAN используют шину SPI, но попробуйте добавить в программу:
SPI.setClockDivider(SPI_CLOCK_DIV2); - результата нет! НИЧЕГО не выйдет, нужно править библиотеки, т.к. в библиотеке SD установлен режим SPI.setClockDivider(SPI_CLOCK_DIV128) - это самый медленный (HARDware) режим! А некоторые устанавливают ещё и медленные карты (write <10Мб/s), что также тормозит обмен. W5100 работает также медленно + греется и иногда (раз в неделю или месяц) "повисает" от направления ветра (поэтому спасает @).
Библиотеки для DS18B20 (Dallas) и DS1307(DS3231) также могут "повесить" мегу из-за случайного сбоя по шине (почти как UART, но у этого хотя бы есть время ожидания), а Wire и OneWire которые используют эти библиотеки - почему то не "вешают" мегу и размер у них меньше. При одинаковой архитектуре (пример blink) скомпилированный код для 2560, 328 и 8 в ардуиновской IDE будет отличаться размером.
5) С W5500 последняя версия AMS не работает (не компилируется), требуются исправления. Устранение мелких косяков типа: номер пина использует 2 байта и согласно документации
http://ww1.microchip.com/downloads/en/D ... asheet.pdf стр.256: скорость обмена без ошибок составляет 250К и т.д. тоже помогают в надёжности и экономии ресурсов.
6) Как при обмене AMS данными каждые 0,5 сек она может рисовать на ПК 3D панорамы? Тогда о какой нагрузке CPU AMS идёт речь? О 160-250 мсек выполнения кода относительно какого времени? А может стоит почистить (поправить) код библиотек для удаления из них delay и мега будет показывать использование вместо 0 отрицательную загрузку? А если все страницы и скрипты храним на SD карте, тогда зачем нам много памяти в меге?
________
P.S.: Моя умная квартира реализована на CAN шине (независимость модулей надёжнее системы централизованного управления).
но данный проект AMS в плане "красочности" управления и контроля мне понравился, хотя супруге и детям больше, поэтому нужно ещё подумать, а нужен ли удалённый контроль за пределами своей квартиры для "большого брата" ? Верьте в свои силы - и всё получится! Best regards.