Автоматический Reset
- Войдите на сайт для отправки комментариев
Втр, 08/10/2013 - 20:40
Использую MEGA 2560 c Ethernet Shield`ом.
Залил скетч - работает.
Отключил питание. Включил. Не работает.
Нажал кнопу Reset. Работает.
Как сделать так, чтоб Reset был после повторного включения питания? Какой код добавить? Или перемычку воткнуть?
на кнопку ресет конденсатор навесить
а, вообще какая-то схемотехническая фигня, если устройство после включения не выходит на рабочий режим - возможно не хватает мощности блока питания.
А разве после выключения-включения питания не должен быть авто Reset?
А разве после выключения-включения питания не должен быть авто Reset?
Именно, но если мощности блока питания не хватает, то возможно разное.
...это я предполагаю самое простое - возможны иные варианты, почему халабуда начинает работать после ручного ресета.
Поставил БП на 100Вт. Не помогло. Может это из-за Ethernet Shield`a ???
WDT Вам в помощь
Поставил БП на 100Вт.
Смысл? - на выходе из атомной электростанции, помощнее трансформаторы стоят.
Нужно смотреть, сколько Ethernet Shield кушает и на что рассчитан стабилизатор напряжения дуино - возможно не хватает мощности.
Так ведь не факт что имеет место быть простой Зависон. Если какие либо настройки Ресета?
Пример скетча брал из Интернета. Менял только IP. ТОчно никаких перемычек не надо?
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес byte ip[] = { 192, 168, 0, 2 }; // IP адрес (В броузере вводим 192.168.0.2) EthernetServer server(80); int numPins = 4; int pins[] = { 2, 3, 4, 5 }; // Пины для реле int pinState[] = {0, 0, 0, 0}; // Состояние пинов void setup() { // Изначально выключаем все реле for (int i = 0; i < numPins; i++) { pinMode(pins[i], OUTPUT); digitalWrite(pins[i], 1); } Serial.begin(9600); Ethernet.begin(mac, ip); server.begin(); } void loop() { EthernetClient client = server.available(); if (client) { // Проверяем подключен ли клиент к серверу while (client.connected()) { // Проверяем идет ли запрос к серверу int dataCount = client.available(); if (dataCount > 0) { // Считываем данные передаваемые серверу с клиента (броузера) for (int i = 0; i < dataCount; i++) { char ch = client.read(); // Если данные передаются, то они будут переданы POST запросом, который начинается с символа 'P' if (i == 0 && ch != 'P') break; if (ch == '\n' && i < dataCount - 1) { // Находим строку, в которой содержатся передаваемые данные char chNext = client.read(); // Формат строки r2=on&r3=on&r4=on (Пример если нужно включены 2,3,4 реле) if (chNext == 'r') { // Выключаем все реле pinState[0] = 0; pinState[1] = 0; pinState[2] = 0; pinState[3] = 0; // Считываем первый номер реле, который нужно включить char relayNum = client.read(); pinState[relayNum-'0'] = 1; Serial.write(relayNum); // Считываем вспомогательную информацию (=on&) relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); // Пока есть данные об остальных реле, считываем и заносим в массив pinState while (relayNum != -1) { relayNum = client.read(); relayNum = client.read(); pinState[relayNum-'0'] = 1; Serial.write(relayNum); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); } } else { // Если не было передано данных, то выключаем все реле pinState[0] = 0; pinState[1] = 0; pinState[2] = 0; pinState[3] = 0; } } } } // В соответствие с переданными данными включаем реле for (int i = 0; i < 4; i++) { digitalWrite(pins[i], !pinState[i]); } // Выводим HTML страницу, на которой пользователь может включить или выключить нужные ему реле client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println("<html>"); client.println("<head>"); client.println("<title>Zelectro. Relay + Ethernet shield.</title>"); client.println("</head>"); client.println("<body>"); client.println("<h3>Zelectro. Relay + Ethernet shield.</h3>"); client.println("<form method='post'>"); client.print("<div>Relay 1 <input type='checkbox' "); if (pinState[0] == 1) client.print("checked"); client.println(" name='r0'></div>"); client.print("<div>Relay 2 <input type='checkbox' "); if (pinState[1] == 1) client.print("checked"); client.println(" name='r1'></div>"); client.print("<div>Relay 3 <input type='checkbox' "); if (pinState[2] == 1) client.print("checked"); client.println(" name='r2'></div>"); client.print("<div>Relay 4 <input type='checkbox' "); if (pinState[3] == 1) client.print("checked"); client.println(" name='r3'></div>"); client.println("<input type='submit' value='Refresh'>"); client.println("</form>"); client.println("</body>"); client.println("</html>"); client.stop(); } } }Поставил БП на 100Вт.
Смысл? - на выходе из атомной электростанции, помощнее трансформаторы стоят.
Нужно смотреть, сколько Ethernet Shield кушает и на что рассчитан стабилизатор напряжения дуино - возможно не хватает мощности.
А чего ж оно тады после Ресета начинает работать? Если типа мощности не хватает...
никаких настроек для ресета не нужно, перемычек никаких по этому поводу тоже нет
соглашусь с коллегами - скорее всего дело в параметрах питания и дело не только в мощности вашего блока
вашим блоком вы питание установленные на меге стабилизаторы, вот с ними и может быть засада. Я столкнулся с тем, что при втыкании ethernet в мегу 5в превращались в 4.2В. Можете у себя посмотреть. Решил подключением внешнего стабилизатора на 5в напрямую к пианм 5в ардуины отключив питание от внешнего разъема. USB при этом совершенно спокойно можно подключать. В качестве внешнего стабилизатора лучше всего брать импульсный, например настраиваемый step-down модуль
А чего ж оно тады после Ресета начинает работать? Если типа мощности не хватает...
Даже думать не хочу почему так, но против факта не попрёшь - на холодную не работает.
Что ж, господа, попробую с отдельным питанием. Проверю - отпишусь в теме. Спасибо.
Подцепил отдельное питание 5В на шилд. Проблема осталась. Нету линка. Попытки типа есть. Светодиоды пытаются загорется, но тутже гаснут.
Подцепил отдельное питание 5В на шилд. Проблема осталась. Нету линка. Попытки типа есть. Светодиоды пытаются загорется, но тутже гаснут.
И, напряжение питания на ногах контроллера шилда и дуино равно 5V?
Добрый день, скорее всего у Вас 2560 ревизия 1 и Ethernet Shield не оригинал....у них проблемма с автозапуском, т.к используется упрощенная схема автозапуска. Это происходит из за того что сигнал сброса появляется раньше чем питание приходит в норму
Рекомендую заменить 2560 на ревизию 3, если нет возможности сделайте на отдельной платке супервизор питания(1 имс+конденсатор) - который будет сбрасывать мегу через 20-30 мс после появления напряжения на 5 вольт....делов на 15 минут.
Программным способом вы не победите, так как микроконтроллер не запускается либо запускается непонятно с какого места в адресном пространстве, соответственно система команд слетает.....
Чего именно не стартует ? Ethernet шилд или мега ?
Есть у меня одна MEGA 2560 -запускается не сразу ,надо подождать
А так же есть Ethernet шилд на WD5100 -он требудет сброса.До этого был заказан такой же шилд в том же магазине и с ним проблем не было..
Решается электролитом на reset
Хоть тема и старая, я всеже дополню, у меня мега и китайский шилд всё работает, вот мой исходник, брал тоже с сайта какогото, и чесно не помню но вроде тоже допиливать пришлось....
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес byte ip[] = { 192, 168, 100, 2 }; // IP адрес (В броузере вводим 192.168.0.2) EthernetServer server(80); int numPins = 8; int pins[] = { 2, 3, 4, 5, 6, 7, 8, 9 }; // Пины для реле int pinState[] = { 1, 1, 1, 1, 1, 1, 1, 1 }; // Состояние пинов void setup() { // Изначально выключаем все реле for (int i = 1; i < numPins; i++) { pinMode(pins[i], OUTPUT); digitalWrite(pins[i], 0); } Serial.begin(9600); Ethernet.begin(mac, ip); server.begin(); } void loop() { EthernetClient client = server.available(); if (client) { // Проверяем подключен ли клиент к серверу while (client.connected()) { // Проверяем идет ли запрос к серверу int dataCount = client.available(); if (dataCount > 0) { // Считываем данные передаваемые серверу с клиента (броузера) for (int i = 0; i < dataCount; i++) { char ch = client.read(); // Если данные передаются, то они будут переданы POST запросом, который начинается с символа 'P' if (i == 0 && ch != 'P') break; if (ch == '\n' && i < dataCount - 1) { // Находим строку, в которой содержатся передаваемые данные char chNext = client.read(); // Формат строки r2=on&r3=on&r4=on (Пример если нужно включены 2,3,4 реле) if (chNext == 'r') { // Выключаем все реле pinState[0] = 0; pinState[1] = 0; pinState[2] = 0; pinState[3] = 0; pinState[4] = 0; pinState[5] = 0; pinState[6] = 0; pinState[7] = 0; // Считываем первый номер реле, который нужно включить char relayNum = client.read(); pinState[relayNum-'0'] = 1; Serial.write(relayNum); // Считываем вспомогательную информацию (=on&) relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); // Пока есть данные об остальных реле, считываем и заносим в массив pinState while (relayNum != -1) { relayNum = client.read(); relayNum = client.read(); // по логике нужно продублировать pinState[relayNum-'0'] = 1; Serial.write(relayNum); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); } } else { // Если не было передано данных, то выключаем все реле pinState[0] = 0; pinState[1] = 0; pinState[2] = 0; pinState[3] = 0; pinState[4] = 0; pinState[5] = 0; pinState[6] = 0; pinState[7] = 0; } } } } // В соответствие с переданными данными включаем реле for (int i = 0; i < 8; i++) { digitalWrite(pins[i], !pinState[i]); } // Выводим HTML страницу, на которой пользователь может включить или выключить нужные ему реле client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println("<html>"); client.println("<head>"); client.println("<title>Relay.</title>"); client.println("</head>"); client.println("<body>"); client.println("<h3>Relay.</h3>"); client.println("<form method='post'>"); client.print("<div>Relay 1 <input type='checkbox' "); if (pinState[0] == 1) client.print("checked"); client.println(" name='r0'></div>"); client.print("<div>Relay 2 <input type='checkbox' "); if (pinState[1] == 1) client.print("checked"); client.println(" name='r1'></div>"); client.print("<div>Relay 3 <input type='checkbox' "); if (pinState[2] == 1) client.print("checked"); client.println(" name='r2'></div>"); client.print("<div>Relay 4 <input type='checkbox' "); if (pinState[3] == 1) client.print("checked"); client.println(" name='r3'></div>"); client.print("<div>Relay 5 <input type='checkbox' "); if (pinState[4] == 1) client.print("checked"); client.println(" name='r4'></div>"); client.print("<div>Свет на кухне<input type='checkbox' "); if (pinState[5] == 1) client.print("checked"); client.println(" name='r5'></div>"); client.print("<div>туалет<input type='checkbox' "); if (pinState[6] == 1) client.print("checked"); client.println(" name='r6'></div>"); client.print("<div>Вентиляция <input type='checkbox' "); if (pinState[7] == 1) client.print("checked"); client.println(" name='r7'></div>"); client.println("<input type='submit' value='Refresh'>"); client.println("</form>"); client.println("</body>"); client.println("</html>"); client.stop(); } } }сап /p/, братишки!
std пытается победить то же самое с RF24, поэтому внимание вопрос:
скока вешать в граммахсколько точно ёмкость электролита на reset? От reset до плюса сейчас резистор 10k.Или одновибратор на 555 обязателен?
Эксперементально, чем больше емкость, тем дольше она будет заряжаться и тем дольше ресет будет прижат к земле, весь вопрос в том, чтобы она успела разрядиться, при кратковременном пропадании питания.