Прошу помощи
- Войдите на сайт для отправки комментариев
Пт, 22/12/2017 - 16:57
Доброго всем здравия, уважаема публика.
Прошу помочь. Есть ардуинка уно и горе модуль ENC28J60
Используется для удаленного мониторинга темпеатуры.
Суть проблем:
1. Ююки вместо русских букв. Сначало когда первый раз рагружаю скетч все норм, но потом появляются ююки
2. Не стабильная работа веб-сервера. Захожу на ап в браузере, показывает температуры, но с течением времени ап перестает отвечать
вот такая вот печаль. По железу все норм - подключение проверил, питание 12 В стабильное
скетч ниже:
// Мониторинг температуры
#include <OneWire.h>
#include "etherShield.h"
#include "ETHER_28J60.h"
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,
// so unless you have more than one of these boards
// connected, you should be fine with this value.
static uint8_t ip[4] = {192, 168, 140, 100}; // the IP address for your board. Check your home hub
// to find an IP address not in use and pick that
// this or 10.0.0.15 are likely formats for an address
// that will work.
static uint16_t port = 80; // Use port 80 - the standard for HTTP
ETHER_28J60 ethernet;
OneWire ds( 7 );
byte addr[8];
float getTemp(){
byte data[12];
ds.search(addr);
ds.reset_search();
ds.reset();
ds.select(addr);
ds.write(0x44);
delay(100);
ds.reset();
ds.select(addr);
ds.write(0xBE);
for (int i = 0; i < 9; i++) data[i] = ds.read();
int raw = (data[1] << 8) | data[0];
if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6];
return raw / 16.0;
}
void setup()
{
ethernet.setup(mac, ip, port);
long t = millis() / 100;
}
void loop()
{
if (ethernet.serviceRequest())
{
ethernet.print("<html><head><title>Карла маркса</title> </head>");
ethernet.print("<body><CENTER><H2>Температура корпус №5</H2></BR><H1>");
ethernet.print(getTemp());
ethernet.print("C</H1></CENTER></body></html>");
ethernet.respond();
}
delay(100);
}
помогите люди добрые
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
ПРошу прошения.
вот код
Чувствую, что причина в переполнениии буфера
Как применительно к данному коду выполнить контроль переполнения буфера?
Да не видно тут мест, которые к переполнению ведут.
Все равно виснет
Питание на сетевой модуль от платыу 3.3 приходит
Загружаю скетч, подсоединяюсь через пачкорд - все работает.
Как только вставляют сетевой провод -все. Раза 2 задешь, а третий раз веб сервер не отвечаеет.
Лампочки все моргают как надо
Можете объяснить, как бороться с переполнением на будущее так сказать
Модули на ENC28J60, что с Aliexpress и иже с ним - штука, требующая аккуратности и вдумчивого втыкания в проблему.
Как модуль подключен, от чего питается, что за ардуина его обслуживает?
МОдуль ENC28J60, на сетевом разъеме написано HanRub HR911105A
Плата ардуино УНО
GND – 5V,
SCK – 13,
SO – 12,
VCC – 3.3V,
CS – 10,
SI – 11.
Блок питания ардуины 6В 0.6А
Можно ли подключить клему RESET модуля ENC28J60 к Reset ардуины и время от времени посылать сигнал сброса, чтобы если возникнет "зависание" ENC28J60 перезагрузить его?
Можно ли подключить клему RESET модуля ENC28J60 к Reset ардуины и время от времени посылать сигнал сброса, чтобы если возникнет "зависание" ENC28J60 перезагрузить его?
Зачем подключать ресет модуля к ресету ардуины? - это вы что-то путаете
Вам нужно подключить ресет модуля к любому цифровому выходу ардуины. чтобы вы могли управлять ресетом. Вотподробнее, первая же ссылка в Гугле:
==== цитата ====
There is a Reset pin in the ENC28j60 board, this pin has a pullup of 10k in most boards. One way to do it is to pull this pun low, then release it (or pull it high) This will get the ENC28j60 to reset, and wait for configuration from the arduino.
Then all you need to do is re-implement the ethernet.start sequence. Something like:
3.3 V c ардуино? Они же там вроде совсем хилые. Может от отдельного источника запитать?
Ну, я ни разу ENC за RST не дергал, работает вполне себе успешно месяцами. Конечно тонкости есть.
Первое - это хорошее питание, не с ардуины. 0.2A в пике она жрет, по-моему.
Второе - надежное соединение по SPI. Моей первой ошибкой было вывести SPI наружу (решил перешивать программатором), где он ловил любую статику и вешал ENC в произвольное время. Как только перестал такими оригинальными конструкторскими решениями заниматься - сразу всё нормализовалось. А у вас, думаю, всё на Dupoint-ах висит.
Гарантированно отловить зависание программно вы не сможете, так что ресетить придется по расписанию, если уж решите идти таким путем.
спасибо за советы.
Очевидно это проблемы с питанием и некачественное соединение сетевого модуля с платой.
Попробую спаять шлейф и поставить блок питнаия на 12 вольт
Вам не поможет БП на 12V. С высокой степенью вероятности на вашей Uno нет стабилизатора 3.3V, достаточного для ENC. Так что хоть 220 туда подайте - лучше не станет. Нужен отдельный стабилизатор или сетевой модуль, на котором он уже распаян.
Попробую .... поставить блок питнаия на 12 вольт
Что за бред? Нафига 12в? Вы считаете, чем больше вольт, тем лучше????
ЭзернетМодулю нужно 3.3В - именно столько и нужно подавать!
Duemilanove, если кто помнит.....
9 Вольт 1 Ампер.
Если больше- перегревается стабилизатор и перезагружается.
И именно с ЕНЦ шилдом, уже забыл когда ставил,
несколько лет работают без присмотра и зависаний.
У меня ENC шилды с набортным стабилизатором. А есть ардуины с честными 3.3V. Но нет никакой гарантии, что у ТС именно такая.
Что за бред? Нафига 12в?
Питание самой платы ардуино.
Там же до 12 вольт можно вроде как
Что за бред? Нафига 12в?
Питание самой платы ардуино.
Там же до 12 вольт можно вроде как
Вам уже выше сказали - хоть 220в на ардуину подайте, модулю по шине 3.3 больше не перепадет.
Вам нужен отдельный источник питания 3.3в для Эзернет-модуля.
Организовал отдельно стабильное питание сетевого модуля. Через стабилизатор на сетевой модуль приходит стабильные 3.3В
Веб-сервер поработал 2 денька и опять ушел в небытие (непингуется не отвечает).
Что делать то?
Может все таки попытатся память очищать после 1 дня работы, а не ждать 7 дней для автоматического очищения
ПОмогите, люди добрые.
Еще же ведь надо ставить датчик давления , и вывводить график температуры и давления на веб-страницу. Страшно подумать что будет с ардуиной, если она температуру стабильно не показывает
Знакомая ситуация. Я так пару месяцев промаялся, пока нашел в чем дело. Но у меня висло раз в неделю-две, что крайне затрудняло поиск.
Может вам W5100 взять - забудете о проблемах, как о страшном сне.
Да я бы рад, но "денег нет, держитесь".
Пожалуйста, поделитесь своим опытом, в чем у Вас была проблема.
Вроде скетч прост до безобразия, там нечему забивать память, но все равно виснет
Питание стабильное, провода между ардуиной и сетевым модулем припаял
Я сижу на UIPEthernet, поэтому, возможно, что мое решение вам не поможет.
У ENC есть одна сволочная особенность: если в нее данные летят быстрее, чем МК их забирает, то у нее быстро забивается буфер и она выставляет в своем регистре бит ошибки, переставая что-либо делать до момента сброса этого бита (или ресета модуля). В UIPEthernet эта ситуация не обрабатывалась, потому что решение предполагалось иным и, бывало так, что дома конструкция работала неделями, а на работе, в большой сети - вешалась через неделю-две-полторы-... Автор драйвера ожидал, что в лупе будет вызываться maintain(), который, в свою очередь дергает внутренний tick(), выгребающий из буфера ENC данные,с периодичностью не меньшей, чем 250мс. Однако, если луп длинный или траффик большой (или всё вместе), то карачун всё равно наступает.
Пришлось пересмотреть архитектуру скетча, слегонца подправить драйвер, периодически контролировать бит ошибки буфера приёма и софтресетить модуль по обнаружению проблемы.
Может вам W5100 взять - забудете о проблемах, как о страшном сне.
W5100 mini Red. Беру и не парюсь. Форм-фактор как у ENC, стабилизатор на борту. Но на Uno подключать неудобно что ENC, что Mini Red.
W5100 mini Red. Беру и не парюсь. Форм-фактор как у ENC, стабилизатор на борту. Но на Uno подключать неудобно что ENC, что Mini Red.
Решил попробовать Reset модуля ENC, но терплю неудачу.
Веб сервер вообще перестал отвечать,
ПОхоже что ENC не проходит инициализацию после сброса.
В чем может быть ошибка?
Вывод Reset модуля ENC подключил к выходу №7,
использую прграмку типа мигание светодиода.
Вот собственно сам код
Дак сами подумайте: Hard reset - это короткий Power off/on. Что с модулем при Power on делать нужно?
Я бы и рад подумать, но получается плохо, я только только учусь.
Подскажите пожалуйста, что мне добавить в скейтч чтоб модуль отзыватся начал?
Подскажите пожалуйста, что мне добавить в скейтч чтоб модуль отзыватся начал?
блииин... ну нельзя же так тупить!
Посмотри на свой собственный код. Что ты делаешь при первом старте модуля? - вот тоже самое делай и при ресете.
Прошу отнестись с пониманием я ж совсем новичок
вот что сделал и все равно пишет соединение прервано
мошт, сначала светодиодиком помигать?
я ж просил, отнестись с пониманием. Светодиодиком мигал уже -получилось
Лично я вам и дал совет, понимая, что вы новичок.
Есть три варианта развития решения вашей проблемы:
1) Вы начинаете жестко учить C++, внутреннее устройство ENC и разбирать драйвера, пытаясь их пофиксить, вычисляя систему в рандомные сбоях;
2) За вас эту задачу делает кто-то другой;
3) Вы покупаете W5100 Mini Red за 400р ( https://www.aliexpress.com/item/TOP-Mini-W5100-LAN-Ethernet-Shield-Netwo... ) и пользуетесь стандартной Ethernet.h
Вам отдельное большое спасибо за разъяснения,
но мне хотелось бы узнать, что я делаю не так с ресетом ENC, в чем моя ошибка
Как инициализировать ENC после ресета?
Так же, как вы это делаете в setup() { ... }
Вы уж извените меня за новясчивость.
Вот поместил
и все равно не работает((( пишет соединение прервано
Ну так никто и не обещал лёгкого решения.
Чип может и более 100мс заводится после ресета. Тут уж начинается эксперимент чистейшей воды - подбор задержек. А то и гляди - в конструкторе объекта ETHER_28J60 какая-нибудь преинициализация проводится и без прочесывания кода драйверов не обойтись.
Попробуйте взять UIPEthernet (https://github.com/UIPEthernet/UIPEthernet) - хуже уж точно не будет.
Давай сетаки светодиодом мигать.
Диодиком мигал уже, если Вы такой умный, может поможите?
Со светодиодиком - памагу, такибыть.
Спасибо, с диодиком помощь не требуется
Ха. Черточка. Ха. Черточка. Ха.
Удачи.