проблема с enc28j60+arduino

Dmitry K
Offline
Зарегистрирован: 11.08.2011

помогите разобраться в проблеме: имеется ардуино точнее клон craftduino

http://robocraft.ru/blog/RoboCraft/97.html]http://robocraft.ru/blog/RoboCraft/97.html- описание, для тех кому интересно
и недавно пришедший по почте модуль ethernet на enc28j60

http://www.evodbg.com/doc/ep_eth.pdf]http://www.evodbg.com/doc/ep_eth.pdf- распиновка разьема
http://starterkit.ru/html/index.php?nam ... view&id=57 - описание
подключал по данной табличке, согласование уровней проигнорировал

так как на сайте http://we.easyelectronics.ru/electro-and-pc/podklyuchenie-mikrokontrolle...
цитата"Питание — 3.3 В. Но входы микросхемы совместимы с 5-вольтовыми TTL уровнями."
3.3 вольта взял с платы ардуино помеченно маркером 10 на фото сверху
результат как всегда не ответа не привета пробовал стандартные примеры из ардуино айди полный ноль enc-шка подключена к роутеру прямым кабелем так как в статье
http://www.kiranjose.com/blog/2011/09/connect-to-internet-with-arduino-m... говорится что для прямого соендинения нужен старинный вариант кросс кабель которого у меня увы нет. прошу помощи у тех кто применял и применяет данные модули вместо оригинальных ethernet шилдов 

leshak
Offline
Зарегистрирован: 29.09.2011

 > пробовал стандартные примеры из ардуино айди

Так в них же всех написанно для " using an Arduino Wiznet Ethernet shield. " какое они имеют отношение к enc28j60?

Совсем другой чип, соответсвенно и другие библиотеки нужны. Гуглите "enc28j60 arduino library" их несколько есть. Но все немного похуже чем для "официального шишлда". Хотя почти год прошел как с ней игрался, может счас что уже и получше стало в этом смысле.

Я подключал вот по этим двум статьяем: http://figleymigley.livejournal.com/tag/enc28j60

Потом нашел какую-то более удобную либу, чем в статях, но счас уже не упомню какую и где (на вначале все запустилось на либах из статитьи). 

И еще,  зарбота-ть она заработала, но частенько "висла". То пингуется, то нет. Пока не померял напряжение на 3.3 пине (у меня мега). Оно там "проседало". Собрал для нее отдельный регулятор питания (который брал с 5v пина и в 3.3-переделывал) - начала стабильно работать.

Я не уверен, но как я понял, на 3.3v пине, на некоторых платах,  напряжение генерируется FTDI чипом (в качестве побочной функции). И там максимальные токи довольно маленькие. Хилый он для этого.

Dmitry K
Offline
Зарегистрирован: 11.08.2011

большое спасибо за развернутый ответ :), поясните пожалуйста насчет согласования уровней? обязательно ли? или все и так стабильно работает? и если не затруднит обьясните чем лучше viznet?  

leshak
Offline
Зарегистрирован: 29.09.2011

 >поясните пожалуйста насчет согласования уровней?

Год назад с этим копался. Сейчас не помню. Зрительная память говорит что не согласовывал. И к первой  статье, ссылку на которую я дал, вижу что сам поднимал этот вопрос к автору статьи. Он рекомендовал "согласовывать", но я нашел в даташите что "можно плюнуть", плюнул и заработало :) (в комментах там тоже об этом отписал).

> или все и так стабильно работает?

У меня стабильно заработало после того как обеспечил качественное питание.

>и если не затруднит обьясните чем лучше viznet?

В первую очередь тем что он стандартный (с точки зрение официальной ардуины), следовательно готовых проектов написанных "под него" - на порядок больше. Но учитывае разницу цен,  enc28j60 тоже набирает популярность (хотя где-то и видел жалобы типа "глючные чипы это").

Говорить что сам чип-шилд лучше хуже - не готов. В тяжелых условиях - не гонял. Так, поигрался чуток. Лучше библиотеки для работы с wiznet. Но за год может и для enc28j60 ситуация улучшилась - не знаю. Опять-таки лучше не "принципиально", просто удобней. Больше низкоуровневой работы спрятанно в саму библиотеку.

Сейчас уже не вспомню в чем именно отличие, можете сами просто сравнить семплы идущие с одной и другой библиотекой. Посмотрите где меньше нужно кода самому писать :)   Я говорю про разницу типа: "одна библиотека дает только функцию вычитывания байтов в буффер, а другая еще и функцию readln предоставляет", в одной уже реализованн, к примеру, dhcp, а в другой самому руками это нужно делать....

Вообщем принципиально что можно сделать на одном чипе - можно и на другом. Вопрос - удобства. Но это персонально, да со временем меняется.

Dmitry K
Offline
Зарегистрирован: 11.08.2011

примного вам благодарен, большое спасибо 

leshak
Offline
Зарегистрирован: 29.09.2011

 Беглое гугление показало вот на такую библиотеку

https://github.com/turicas/Ethernet_ENC28J60/

Авторы общещают что у нее такое же API как и у стандартной. Цель авторов что-бы один и тот же код мог работать и Wiznet и c ENC2860. Насколько у них получилось - не знаю. Можете попробовать. Когда я игрался - еще небыло таких библиотек. А сейчас нет времени "искать/пыль сдувать", хотя в планах - имеется :)

Dmitry K
Offline
Зарегистрирован: 11.08.2011

доброго вечера по вашим рекомендациям подобрал себе библиотеку для работы с encшкой все отработало на ура(тестовый скетч с термодатчиком), но сталкнулся с небольшими трудностями имеется блок питания(12в) к нему подключен стабилизатор крен5а, а к ней уже (noname) стабилизатор на 3.3в так вот суть проблемы: все было повешенно на этот БП (ардуина на 5в), а encшка на 3.3в так вот весьма удевительный казус кренка и noname стабилизатор разогрелись не на шутку прелепил к ним по очереди термодатчик из тестового скетча температура оказалась 70 градусов это нормально или стоит подобрать другие стабилизаторы для питания? если да то посоветуйте

п.с. тестировал периодами боясь что стабилизаторы выйдут из строя

leshak
Offline
Зарегистрирован: 29.09.2011

 >доброго вечера по вашим рекомендациям подобрал себе библиотеку для работы с encшкой

А ссылочку на библиотеку, которая в итоге заработала? Может и после вас кто-нибудь захочет с таким шилдом поигратся захочет. А тут глядишь и ответ готовый.

По поводу нагрева - на 12в - вполне реально. Поэтому и говорят что "лучше питать от 7.5 д 9 в". Не совсем понятно зачем крен5а? Разве на плате нет стабилизатора? (кстати там они тоже говорят что 12в - может грется).

Смотретие тут логика проста: стабилизатор должен выдать 5v. Все что ему дали на вход "лишнего" - он выбрасывает в виде тепла в воздух. Логично что при понижении с 9v до 5v меньше атмосфера греется больше чем с 12v до 5v. Ну и плюс все это умножается на проходящий ток. Так что можно, еще померять амперметром какой ток потребляется, потом смотреть в даташит - похоже на "нормальную работу или нет".

На у сказать нормально ли что греется noname с неизвестными характеристиками - как возможно? Смотрите что по паспорту он позволяет через себя пропускать и что в реальности идет.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Как сейчас обстоят дела с ENC28J60? У кого работает как клиент?

leshak
Offline
Зарегистрирован: 29.09.2011

У меня работает. Буквально вчера "имел секс с ним". Вам повезло :)  : воспоминания свежи и контекст, пока, в голове.

Работать заставил, но "все очень грустно" с библиотеками для него. Куча библиотек с одинаковыми именами, в разной степени готовности.

В данный момент у себя на винте наблюдаю три библиотеки:

Родную - смотрел год назад. Тогда работала, в этот "заход" почему-то не захотелось завестить. Но я долго и не мучал, изначально не нравится то что много протокольного уровня положенно на плечи скетча. Так что "не пошла" и бог с ней.

Ethernet_ENC28J60  ( https://github.com/turicas/Ethernet_ENC28J60/ ) - самая симпатичная по "использованию". Главная идея - совместимость по API с winznet шилдом. Но похоже автор ее забросил, а список ToDo/Bug - пугает. Так что не рискнул тратить на нее время для запуска в продакшн. Хотя именно "вот такую" и хотел-бы....

EtherCard (не помню точно где брал, но возможно тут http://jeelabs.org/ethercard или https://github.com/jcw/ethercard/) - вообщем та которую использую на данный момент. Работает и API относительно симпатично, но "внутри у нее" - тихий ужас (лично для меня). Документации - практически нет (смотреть примеры и "сам код библиотеки"), одновременно есть "два API" (и какой пример на каком - фиг догладаешься). Но главное - работает, авторы вроде "развивают" ее, плюс, по отзывам библиотека где наиболее полно учтены всякие "заглюки" чипа (а, опять-таки по отзывам, он довольно глючиный). Ну и всякий плюшки типа "отвечать на ping запросы",  DNS, DHCP, гейтвеи и т.п. - у нее уже есть "на борту" самому код для этого сочинять не нужно. Плюс некоторое количество хелперов для конструирования/парсинга запросов

ustas
Offline
Зарегистрирован: 12.03.2012

Добавлю и свои "3 копейки". 

Работает и вот эта библиотека: http://trollmaker.com/article11/arduino-1-0-with-enc28j60-ethernet-shield-v1-1/

автор в комментариях к этому посту отвечает (но не на все вопросы, к сожалению ;))

leshak
Offline
Зарегистрирован: 29.09.2011

 

ustas пишет:

Добавлю и свои "3 копейки".

Работает и вот эта библиотека: http://trollmaker.com/article11/arduino-1-0-with-enc28j60-ethernet-shiel...

автор в комментариях к этому посту отвечает (но не на все вопросы, к сожалению ;))

Спасибо за ссылочку, не попадалась на глаза. Беглый осмотр показал:

  • API действительно простое
  • Библиотека является оберткой над стандартной либой, как раз видимо что-бы упростить ее использование наиболее типичных операций. 
  • Очень "молода". Фактический есть реализация только простейшего сервера, но не клиента (про который спрашивал .c8r), всяких DNS/dhcp - на беглый взгляд - тоже не видно.

Так что ссылку "в копилку однозначно". Для реализации  сервера  типа "хочу через веб включать-выключать диод" она очень не плоха. Но что-то более существенное, на ней строить IMHO рановато.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Большое спасибо за ответы. У меня уже три неуспешных подхода за два дня.

С библиотеками не просто печально, а беда. Как уже сказано куча библиотек с одинаковым именем или мега-паки на си и асемблере.

Сервер на этом чипе это единственное что, наверное, на данный момент работает без нариканий (и то, я не тестил, а просто поигрался).

Про клиента. В голове есть как докрутить обертку над стандартной библиотекой (в которой куча страшных методов) чтоб сделать юзабельной функцию клиента. Ведь, в примерах то оно есть, только...Только фиг поймеш с первого раза.

Про подсети. В той же обертке нет поддержки подсетей. В моем случае два роутера, один в сети второго. Ардуина коннектится ко второму. В стандартной либе есть метод void ES_client_set_gwip(uint8_t *gwipaddr), который не то что не поддерживает обертка, этот метод еще и вырезан автором из исходной библиотеки.

Вобщем, вечером секс с ENC28J60.

По ходу буду отписываться и ждать Ваших решений.

 

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

leshak пишет:

EtherCard (не помню точно где брал, но возможно тут http://jeelabs.org/ethercard или https://github.com/jcw/ethercard/) - вообщем та которую использую на данный момент. Работает и API относительно симпатично, но "внутри у нее" - тихий ужас (лично для меня). Документации - практически нет (смотреть примеры и "сам код библиотеки"), одновременно есть "два API" (и какой пример на каком - фиг догладаешься). Но главное - работает, авторы вроде "развивают" ее, плюс, по отзывам библиотека где наиболее полно учтены всякие "заглюки" чипа (а, опять-таки по отзывам, он довольно глючиный). Ну и всякий плюшки типа "отвечать на ping запросы",  DNS, DHCP, гейтвеи и т.п. - у нее уже есть "на борту" самому код для этого сочинять не нужно. Плюс некоторое количество хелперов для конструирования/парсинга запросов

Не получилось добиться результата. Компилирует, заливает и молчит...Можете кинуть сюда коротенький пример?

P.s. добиваюсь функции клиента.

leshak
Offline
Зарегистрирован: 29.09.2011
По стандартную не подскажу не вникал в нее, а про EtherCard может и помогу с чем.

Только "ждать решений" не стоит. По крайней мере не задав конкретный вопрос. Бо разные задачи решаются больно "по разному".

Например даже такая банальщина как "послать дополнительный хедер", решается ВООБЩЕ ПО РАЗНОМУ в случае если нужно послать GET-том или POST-том.

Дать свой скетч целиком - я не могу. Во первых "объем", во вторых "писался для клиента". А вот "поделится кусочками" на конкретный вопросы (или подсказать в какой пример смотреть нужно) - возможно.

Если будете пробовать эту библиотеку предупрежу об одний "граблях по умолчанию" (мой клиент "наступил на них", учень удобно они подложенны :)

По дефолту эта библиотека предполагает что CS-пин  это D8, а многие примеры в инете предполагают что это D10. Но, к счастью, при старте можно указать какой юзать. Третим параметром функции begin.

Вместо 

if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 

писать

 

if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0) 

Ну и гейтвеем вроде не особо сложно

    ether.staticSetup(board_ip, gateway_ip);

Третим параметром можно еще dns_ip передать.

Ну либо не морочится со всем этим,в ключить DHCP на ротере и вызвать

if (!ether.dhcpSetup())	Serial.println("DHCP failed");

 

 

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

и так, дела начали двигаться, ура.

Вот подправленный скетч из примера:

//>>> The latest version of this code can be found at https://github.com/jcw/ !!

// Demo using DHCP and DNS to perform a web client request.
// 2011-06-08 <jcw@equi4.com> http://opensource.org/licenses/mit-license.php
// $Id: webClient.pde 7763 2011-12-11 01:28:16Z jcw $

#include <EtherCard.h>

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

static uint8_t board_ip[4]={192,168,2,133};
static uint8_t gateway_ip[4]={192,168,2,1};

byte Ethernet::buffer[700];
static uint32_t timer;

char website[] PROGMEM = "www.google.com";

// called when the client request is complete
static void my_callback (byte status, word off, word len) {
  Serial.println(">>>");
  Ethernet::buffer[off+300] = 0;
  Serial.print((const char*) Ethernet::buffer + off);
  Serial.println("...");
}

void setup () {
  Serial.begin(9600);
  Serial.println("\n[webClient]");

  ether.staticSetup(board_ip, gateway_ip);

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0) 
    Serial.println( "Failed to access Ethernet controller");
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  

  if (!ether.dnsLookup(website))
    Serial.println("DNS failed");
    
  ether.printIp("SRV: ", ether.hisip);
}

void loop () {
  ether.packetLoop(ether.packetReceive());
  
  //if (millis() > timer) {
    timer = millis() + 5000;
    Serial.println();
    Serial.print("<<< REQ ");
    ether.browseUrl(PSTR("/foo/"), "bar", website, my_callback);
  //}
}

Молчит...В сериал ничего не выдает...

leshak
Offline
Зарегистрирован: 29.09.2011

.c8r пишет:

Не получилось добиться результата. Компилирует, заливает и молчит...Можете кинуть сюда коротенький пример?

P.s. добиваюсь функции клиента.

Стандартную "граблю" проверили (CS_PIN)?

Молчать он может если пытаетесь использовать DHCP и DNS, а они при этом неверно сконфигурены или нет их. Долго может молчать. До минут. Пока не скажет что "обломс". Но что-то сказать должен (ну смотря какой пример вы пытаетесь завести)

Например webClient.ino должен квакнуть 

"Failed to access Ethernet controller" или "DHCP failed"

Ну или, если все хорошо, то вывести какие IP-шники будут юзатся.

Если "без DHCP", то смотрите как инитится шилд в getStaticIP.ino , там же фактически и сразу пример клиента есть, который GET запрос шлет ( browseUrl это они так обозвали httpGet)

>добиваюсь функции клиента.

Это понятно. Вопрос в том, что клиент "посылать должен" (каким методом, нужно ли доп. хедеры, нужно ли "получать ответ"). Больно разные партитуры для этих случаев выходят :)

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Хотя. Блин, события разворачиваются в онлайне)) Подумал, подумал и выдал

114.57.6.124
192.0.5.2
17.45.0.2

т.е. скетч работает

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

О клиенте: добиваюсь простого ГЕТ запроса на сервер. Слушаясь ваших советов, чую, сейчас нарою)

leshak
Offline
Зарегистрирован: 29.09.2011

 >Молчит...В сериал ничего не выдает...

Быть не может. Как минимум "[webClient]" должен написать.

Ну и строки 32 и 36-37 - взаимоисключащи. Вы решите юзаете вы DHCP или руками все указываете. Если "руками", то выкидываем 36-37 и вместо на их место пишем staticSetup

и 43-44 - тоже нафиг, если мы все IP-шники сами будем указывать (если ваш сервер локальный и роутер не умеет его резолвить по имени DNS нам нафиг упал).

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

И еще подмечу, часа два потерял в муках над железкой, оказалось, что скайп занял 80й порт.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Все, примеры заработали. Как я понимаю проблеммы были в ether.begin(sizeof Ethernet::buffer, mymac,10).

Спасибо leshak!

Развиваем дальше...

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Все! Муки закончены! И клиент и dhcp, полный фарш!

Спасибо! *чуть не прыгает от радости*

leshak
Offline
Зарегистрирован: 29.09.2011

Два часа - это просто "заработало почти сразу" :)

> что скайп занял 80й порт

Я тоже пару раз танцевал так с ним. Причем у меня на 80-том висит IIS обычно. Но раз в пару месяцев скайп, вдруг, почему-то решает что "ему нужней". И хотя знаю про эту подляну, каждый раз забываю и тоже часок трачу :)

Что-бы быть увереным что порт не занят, можно свой сервер перевесить на другой порт. А в скетче, если порт не 80-тый, сделать что-то типа

ether.hisport=8080;
 

кстати, что-бы два раза не вставать, указать руками IP-сервера куда слать запросы, можно так:

ether.copyIp(ether.hisip, server_ip);

и потом убедится (или посмотреть куда DNS разрезовил имя сервера) так ether.printIp("SRV: ", ether.hisip);

 

leshak
Offline
Зарегистрирован: 29.09.2011

 По поводу скайпа можно попробовать вот эту галку снять

Но сам не пробовал, обычно у меня IIS, все-таки, успевает первым схватить 80-тый порт на себя

leshak
Offline
Зарегистрирован: 29.09.2011

.c8r пишет:

Как я понимаю проблеммы были в ether.begin(sizeof Ethernet::buffer, mymac,10).

По всей видимости. У меня он завелся без этой поправки. Хотя у меня мега и подключен он к 53-тьему пину :) Почему у меня "заработало" сразу я так и не понял :)

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Работаем над enc28j60. День третий.

Вроде все работает как надо. Железо не тупит, не греется. Библиотека "норм", куча всяческих фишек и возможностей.

Но, что делать, если памяти в МК 14кб, а сама библиотека занимает почти 10кб?

Подмечу, что пока я обхожусь простым get запросом. Что и где можно урезать, чтоб выиграть хотябы несколько килобайт под сторонние библиотечки?

leshak
Offline
Зарегистрирован: 29.09.2011

 >Но, что делать, если памяти в МК 14кб, а сама библиотека занимает почти 10кб

За "фишки" платить нужно :) Самый "тупой вариант" перейти на мегу где памяти больше :)

На днях, возможно, сам столкнусь с этой проблемой, нужно будет упихивать готовую работу в более мелкий контроллер чем тот на котором девелопилось, но общий подход примерно такой:  главными "пожирателями" оперативки являются текстовые строки. Всякие Serial.print("Bla-bla-bal"). Выход - либо нафиг их, либо читать руководства по PROGMEM и PSTR (но это позволит съекономить только оперативку, но не флеш память).

Далее: Попытатся уменьшить буфер для чтения byte Ethernet::buffer[700], если вы не ожидаете "развернутых ответов от сервера" (но не забываем, что "ответ" влючает не только "тело", но еще и всякие http заголовки, для которых тоже место требуется).

Ну а дальше либо искать "более скромную библу", либо "хардкор".

Лезть в саму библиотеку и потрошить ее. Искать всякие буферы и тоже пытаться их уменьшать (до тех пор пока все не навернется), искать куски кода которые вы не используете и выкидывать их (например icmp ответы - для работы ping. dhcp, dns и т.п. сервисы, выпиливать webserver поддержку и творить прочие пакости)

Что-бы не "корежить все с концами", можно вместо выкидывания оборачивать в конструкции типа

// помещаем этот дефайн где-то в верху, конфиге, вообщем "предсказуемом месте"
#define DISABLE_SOME_FEATURE // если фича нужна - закооментируйте эту строчку


// а вот тут мы нашли какой-то код которым хотим "пожертвовать"
#ifndef DISABLE_SOME_FEATURE
.... тут идет код, который мы хотим "запретить" ....
#endif

Тогда что-бы "вернуть как было" достаточно будет закоментить #define DISABLE_SOME_FEATURE

>Подмечу, что пока я обхожусь простым get запросом

Ну так в http протоколе GET от POST/PUT/DELETE и т.п. вообщем-то принципиально не отличается. И то и то просто "набор строк-комманд" которые вы шлете серверу. Разница "в пару слов".

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Все выше перечисленное пробовал, выигрыш 1кб максимум.

Упоминая только гет запросы, я имел ввиду как раз то, что все остальное можно выкинуть, но толку мало, скорее всего при компиляции лишнее и так отбрасывается.

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну 1кб. это не так уж и мало. Почти 10%. В нее "собственной логики" можно напихарить достаточно много. В одном из предыдущих моих проектов 1кб - это то что вообще было на камне заказчика.

Но вообщем-то такова специфика восьмибитников. Как ни крути, а полноценная реализация tcp/ip стека для них "тяжела". Даже если "памяти хватает" - все равно медленноваты они для этого. Так что если что-то "сурьезнозное" монстрячить нужно смотреть в сторону более взрослых камней и/или искать ether-нет чипы со встроенным tcp/ip стеком.

А "ограниченные ресурсы" - так в этом же и "симус". В 128гига оперативы любой дурак влезет :)

leshak
Offline
Зарегистрирован: 29.09.2011

leshak пишет:

нужно смотреть в сторону более взрослых камней и/или искать ether-нет чипы со встроенным tcp/ip стеком.

Кстати, похоже для этого не нужно смотреть "очень далеко". "Официальный шилд", на wiznet-е, говорят, как раз и есть пример такого чипа, где tcp/ip реализован аппаратно, а не ложится на плечи камня. Поэтому и дороже, быстрее, надержней... и памяти жрать меньше должен.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Имею дело и с тем и с тем.

Как следствие аппаратной поддержки таких "фишек" - это возможность работы с несколькими клиентами и серверами. Wiznet'ы куда удобнее и производительней. Но в некоторых проектах вполне хватит enc28j60.

Пользуясь случаем задам вопрос: не возникали ли у Вас проблемм при "вторичном" вызове browseUrl ?

К примеру:

void callback(){
	char t[100];
    strcpy(t,"data="); 
    strcat(t,data);
    ether.packetLoop(ether.packetReceive()); //С данной строчкой result вызывается, без неё - нет
    ether.browseUrl(PSTR("/"), t, website, result);
}

void loop(){
	ether.packetLoop(ether.packetReceive());
    ether.browseUrl(PSTR("/"), "", website, callback);
}

Проблемма: в callback() не отрабатывает ether.browseUrl, в логах сервера нет "обращений".

leshak
Offline
Зарегистрирован: 29.09.2011

 Можно конечно попытся выяснить "почему так", но я бы, "интуитивно" так не писал.

Я бы завел какой-то флаг, взводил его callback, и в loop проверял, если он true - вызвал-бы, опять-таки в loop(), browseUrl

Я можно, еще, попробовать работать через их "новый API".

Функцией Stash::prepare(...) подготавливать запрос для отправки (кстати тогда можно не только get, а вообще все что хочешь в него пихнуть, дополнительные header, PUT/DELETE и т.п. запросы).

Фунией session_id=ether.tcpSend(); делать саму отправку запроса, а 

reply= ether.tcpReply(sessionId);
 if(reply != 0){
.....
}

Проверять собственно что нам ответили именно на этот запрос.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Спасибо, вечерком попробую.

leshak
Offline
Зарегистрирован: 29.09.2011

.c8r пишет:

Пользуясь случаем задам вопрос: не возникали ли у Вас проблемм при "вторичном" вызове browseUrl ?

Алаверды: а у вы не замечали что первый, после старта ардуины, запрос "теряется". Нет ответа, а "дальше" идут нормально?

Мне вообщем-то не критично. У меня, если нет ответа больше таймаута - запрос повторяется, так что я не "докапывался", но просто любопытно. 

leshak
Offline
Зарегистрирован: 29.09.2011

leshak пишет:

.c8r пишет:

Как я понимаю проблеммы были в ether.begin(sizeof Ethernet::buffer, mymac,10).

По всей видимости. У меня он завелся без этой поправки. Хотя у меня мега и подключен он к 53-тьему пину :) Почему у меня "заработало" сразу я так и не понял :)

Дернул черт "сделать по правильному". Написать инициализацию так что-бы и на меге работало и на Nano (у клиента). Типа раз есть оперделенная константа SS (при компиляции на меге она равна 53, при компиляции на Nano = 10).

Написал 

ether.begin(sizeof Ethernet::buffer, mymac,SS).

И получил "болт". Не инициализируется. Шилд начал пугающе грется. Полез в библиотеку, смотрю что там "по дефолту", там дефолный пин 8-мой.

  static uint8_t begin (const uint16_t size, const uint8_t* macaddr,uint8_t csPin =8);  

Пробую

ether.begin(sizeof Ethernet::buffer, mymac,8)

работает. Пробую ",10" - не работает. Выпадаю в осадок. У меня же к нему ничего не подключено (как и к 10-тому)!!! У меня же мега, 53-тий!!! И на него подключено. То есть с "правильным пином" (53) - не работает. С одним "неправильным" (8) - работает, с другим (10) - не работает.

В чем магичность 8-мого пина? Лезу в схематику. Нет на ICPS коннектор он не выведен (я через него шилд подключал).

Отключают проводок от 53-тего (проверяю что он вообще используется) - перестало работать. Подключают на 43-тий (ну вдруг оно просто подтяжку к питанию хочет) - не работает. Значит нет. все-таки 53 нужен, правилен и используется.

Тихо шизею. Как оно вообще работает если я говорю ему не правильный пин?

Опять лезу в библиотеку. И нахочу такой прелестный кусок кода

 selectBit = csPin - 8;  
 bitSet(DDRB, selectBit);

То есть оно напрямую порту B выставляет нулевой бит (при csPin=8), лезем в пинмаппинг меги смотрим какой пин соотвествет PB0? Оппа. 53-тий!!!!!!

Итого. Для этой библиотеки. В конструкторе цифра 8-мь третим параметром, в случае Arduino Mega, на самом деле, означает 53-ти пин :)  , а цифра 53-три - вообще непойми что :)  (приводит к попыткам устновить 45 бит в байте. :)

Надеюсь что это поможет это избежать "битья лбом о стол" :) Так что для "Мега-водов" либо не использовать третий параметр либо пихать туда 8-рку, а подключать на 53.

 

 

Zveruga
Offline
Зарегистрирован: 29.09.2011

Я что-то не могу понять как в этой библиотеке сервер поднять? Или тут это не реализовано? 

MMax
Offline
Зарегистрирован: 27.11.2012

Решил апнуть тему, а не создавать новую. Имею обсуждаемый шилд и мегу. Все завелось с библиотекой ETHER_28J60 (скачал с одной из ссылок этой темы). 

Вопрос следующий: Т.к. шилду нужно питание 3.3V, собрал стабилизатор на LM317T (точнее два, второй на 5V для Arduin'ы). Вход от 12V. Все работает, и не греется. Проблема в том, что при таком подключении перестал работать SERIAL к компьютеру. При попытке открыть Serial Monitor или залить скетч в Arduino IDE, пишет, что порт занят. Если все собрать без внешнего питания, т.е. Arduino питается через USB, а питание шилда от +5 или +3,3 Arduin'ы, то все работает. В чем может быть причина такого поведения? И как можно исправить?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

MMax пишет:

При попытке открыть Serial Monitor или залить скетч в Arduino IDE, пишет, что порт занят. Если все собрать без внешнего питания, т.е. Arduino питается через USB, а питание шилда от +5 или +3,3 Arduin'ы, то все работает. В чем может быть причина такого поведения? И как можно исправить?

Питание выше, чем идет с компьютера: для определения USB устройства на шине надо, чтобы это устройство "сосало" по ней ток... Иначе умный чип со стороны компьютера считает шину свободной и не передает по ней ничего. Я у себя на время заливки скетча просто переключаюсь на питание с USB шнурка. Померяйте - сколько у Вас идет по USB, и можно попробовать 5 вольт внешнего питания чуть просадить вниз... Хотя у меня на ноуте такой фокус не проходит.

arturmon
Offline
Зарегистрирован: 02.07.2011

добрый день подскажите пожалуйста основные различия между библиотеками ethernet.h и EtherCard (https://github.com/jcw/ethercard/)

у меня есть код написанный под wiznet 5100 , а у меня шилд на enc28j60 вот теперь и думаю как его перелопатить (

leshak
Offline
Зарегистрирован: 29.09.2011

arturmon пишет:

добрый день подскажите пожалуйста основные различия между библиотеками ethernet.h и EtherCard (https://github.com/jcw/ethercard/)

Разница примерно как между ВАЗ и фурой с прицепом.

По легкости управления - winznet - это жигули, enc28j60 - фура.

По возможностям (грузоподъемности) - wiznet - фура, enc28j60 - жигули.

Пересесть с одного на другой - примерно так же просто. У одного TCP стек реализован аппаратно, у другого програмно. У одного - высокоуровневое API (бортовой комьютера), где про детали протокола не нужно думать (WizNet), у в второго все низкоуровнево (не забудть "вытянуть подсос", подкачать руками бензин в карьюратор и т.п.)

Поищите по форуму. Где-то летом уже обсуждался enc2860. Там есть ссылки на разные его библиотеки (у  них разный уровень глючности и легкости использования). Мелькала и библиотека с таким же API (именами функций классов), как и у визнетовской. С нет, теоретически, код вообще переписывать не нужно. Но... автор ее кажись забросил. По крайней мере у меня она "не завелась".

Так что вариант один. Много ковыряния. Разбиратся как на enc2860 сформировать  запрос, как его послать (у него это разный процесс), как получит ответ, как распарсить из него данные.... вообщем лазить по примерам.

А потом пытатся реализовать свой скетч. Вообщем "поменять одну функцию на другую" - не выйдет. Слишком разная у них логика работы. Так что свой основной код прейдется "перепахивать" основательно (если он изначально не писался что-бы работу с сетью "выделить" в какой-то отдельный слой-класс).

arturmon
Offline
Зарегистрирован: 02.07.2011

leshak пишет:

arturmon пишет:

добрый день подскажите пожалуйста основные различия между библиотеками ethernet.h и EtherCard (https://github.com/jcw/ethercard/)

Разница примерно как между ВАЗ и фурой с прицепом.

По легкости управления - winznet - это жигули, enc28j60 - фура.

По возможностям (грузоподъемности) - wiznet - фура, enc28j60 - жигули.

Пересесть с одного на другой - примерно так же просто. У одного TCP стек реализован аппаратно, у другого програмно. У одного - высокоуровневое API (бортовой комьютера), где про детали протокола не нужно думать (WizNet), у в второго все низкоуровнево (не забудть "вытянуть подсос", подкачать руками бензин в карьюратор и т.п.)

Поищите по форуму. Где-то летом уже обсуждался enc2860. Там есть ссылки на разные его библиотеки (у  них разный уровень глючности и легкости использования). Мелькала и библиотека с таким же API (именами функций классов), как и у визнетовской. С нет, теоретически, код вообще переписывать не нужно. Но... автор ее кажись забросил. По крайней мере у меня она "не завелась".

Так что вариант один. Много ковыряния. Разбиратся как на enc2860 сформировать  запрос, как его послать (у него это разный процесс), как получит ответ, как распарсить из него данные.... вообщем лазить по примерам.

А потом пытатся реализовать свой скетч. Вообщем "поменять одну функцию на другую" - не выйдет. Слишком разная у них логика работы. Так что свой основной код прейдется "перепахивать" основательно (если он изначально не писался что-бы работу с сетью "выделить" в какой-то отдельный слой-класс).

 

Красиво описал )

код там действительно выглядит красиво и просто http://arduino.ru/forum/programmirovanie/pomogite-skrestit-dva-koda-dlya...

все что у меня получилось это присобачить библиотеку ethercard

и вывести саму "страничку" в браузер ), логика пока у меня отдыхает ( к сожалению

paf
Offline
Зарегистрирован: 25.01.2013

Итак, меня тоже постиг выворот мозга на наборе MEGA2560 и ENC28J60.

Но! Уважаемый leshak не позволил пасть духом и повелел все проверив победить эту парочку! За что ему отдельное спасибо!

Значит, подключил я ее так как должно подключать к Меге т.е. 50 - 53 Раза по два по три испробовав все возможные библиотеки уже трудно соображаю...

Скайпа нет. IP статичный. Подключаю через роутер. Шнурок обычный.

Питание 3.2в от платы Меги. Всего шесть проводов. Включая CND и 3.3в.

Еще раз, пожалуйста, какую библиотеку использовать и нужно ли, что-то менять или дополнять в содержащихся в ней файлах? 

leshak
Offline
Зарегистрирован: 29.09.2011

paf пишет:

Питание 3.2в от платы Меги. Всего шесть проводов. Включая CND и 3.3в.

Пост #1 последние два абзаца

paf пишет:

Еще раз, пожалуйста, какую библиотеку использовать и нужно ли, что-то менять или дополнять в содержащихся в ней файлах? 

Я использую пост #9 последний абзац.

P.S. И не расчитывайте что кто-то сможет вам помочь на "ничего не работает". Какой скетч, какие логи... и т.п.

paf
Offline
Зарегистрирован: 25.01.2013

:) И за это спасибо! Плохо когда неизвестных совсем много. Мне бы убедиться, что шилд вообще работает. Пока со мной разговаривает только скетч и выдает ошибки и нулевые адреса. Скетч из примера.

Кх-м... шилд заработал. Проходит  ping. Но только после того как были исправлены косяки с подключением. На штырьки шилда одел 10ти пиновую розеточку и напутал в ленточке шлейфа. 

paf
Offline
Зарегистрирован: 25.01.2013

"Я использую пост #9 последний абзац."  

Нет ли Вас рабочего примера. Примеры из либы не отвечают, шилд не пингуется. Примеры из Ethernet_ENC28J60  тоже не работают, но шилд пингуется.  Пины Reset и INT необходимо подключать?  

 

leshak
Offline
Зарегистрирован: 29.09.2011

Из рабочего проекта код я дать, естественно не могу (там куча всего что вас только собъет с толку), но ведь начал "рабочий" я делать именно с запуска библиотечных примеров и copy-paste кусков из них. Так что примеры в библиотеке - рабочие.

Но проигнорировали

>P.S. И не расчитывайте что кто-то сможет вам помочь на "ничего не работает". Какой скетч, какие логи... и т.п.

Все таки пошли по пути "аааааа... .у меня ничего не работает".  Так вам никто помочь не сможет. Раз не работает - значит что-то не так. Не буду же я перебирать/угадыть что вы не так сделали.

Может при подключении MOSI/MOSI перепутали, может библиотечный пример чуть-чуть подправили там где не нужно было (сам когда-то убил пару дней из-за того что решил подправить MAC адресс, а оказалось что не любые цифры в него можно пихать), что с питанием - тоже не ведемо (даже какая именно у вас ревизия меги), откуда питаете, что пробовали отдельный регулятор или нет.... и т.д. и т.п.

Да банально что в логе видно - и то не сказали. А ведь не может скетч полностью отмалчиватся, что-то он да говорит...

paf
Offline
Зарегистрирован: 25.01.2013

Не справился...:(  Питание подавал отдельно. Шилд не греется светодиод горит. Напряжение 3.28. 

Шилд пингуется только при заливке скетчей из либы Ethernet_ENC28J60. В браузере не откликается. Где смотреть логи я не знаю.  Не уверен, что шилд рабочий. Может быть IDE 1.0.3 виновата? Нужно попробовать на UNO. 

leshak
Offline
Зарегистрирован: 29.09.2011

 

paf пишет:

В браузере не откликается. Где смотреть логи я не знаю.  

В Serial Monitor. В ArduinoIDE (кнопочка похожая на лупу спарава в тулбаре)

paf пишет:

Не уверен, что шилд рабочий. Может быть IDE 1.0.3 виновата? Нужно попробовать на UNO. 

Ну раз на одной библиотеки пингуется, то скорее всего рабочий и подключен верно.

Ну а какой пример вы заливаете я  телепатически должен угадать? Ну хотя-бы представлять себе что вы пытаетесь запустить и что у вас должно происходить "по нормальному"?

Название примера или код давайте сюда (особенно если что-то меняли в нем, хоть букву).

Как из браузера вызываете - тоже признайтесь. Вдруг вы "дергаете не так", не тот урл или еще что-то. Но для начала - нужно добится что-бы он тоже пинговался (или сам что-то из сети смог увидить).

Можете дать сюда еще и пример "который пингуется", посморим какие у него настройки используются и найти разницу с примером из ethercard

Вообщем поймите же, я у вас за плечом не сижу. Ваш монитор - не вижу. Только то что вы напишите, то я и знаю. А важной может оказатся любая деталь.. 

leshak
Offline
Зарегистрирован: 29.09.2011

А еще желательно знать как у вас сеть сконфигурена.

Кнопку Start (в винде), набираем

cmd.exe<enter>,

в открывшемся черном окошке набираем 

ipconfig<enter>

что он выведет - копируем сюда.

Если копирование из этого черного окошка вызвает проблемы, то можно сделать

ipconfig > ipconfig.txt<enter>

Оно создаст файл ipconfig.txt в котором и будет "описание ваших IP-шников", вот их сюда и показать.

Ну или просто руками перенабрать, интересует что оно выведет, для вашей сетевой карты, там должно быть что-то типа такого

Ethernet adapter Local Area Connection:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::1e6:8e91:a339:97cc%11
   IPv4 Address. . . . . . . . . . . : 192.168.1.8
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.1.1

 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

paf пишет:

Шилд пингуется только при заливке скетчей из либы Ethernet_ENC28J60. В браузере не откликается. Где смотреть логи я не знаю.  Не уверен, что шилд рабочий. Может быть IDE 1.0.3 виновата? Нужно попробовать на UNO. 

У шилда своих мозгов нету, так что на пинги откликается софтовая часть. Значит физика - работает. А дальше, чтобы "откликался в браузере" - надо принимать пакеты, парсить и отвечать на них соответствтвующим образом. На enc28 - оно все вручную делается...