• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Mega2560 + ENC28J60 + EtherShield - zawiesza program
#1
Witam, 

wykonałem beta testy, przygotowanie kodu, itp. na UNO, gdzie program pięknie działał, stabilnie przez 2 dni. Postanowiłem przenieść to na Mega2560 które steruje automatyką w domu i error, program zawiesza się na inicjowaniu karty sieciowej (wyrzucałem linia po linii załadowanie każdego wiersza, aż znalazłem co wiesza). Gdy wyłączę linię e.setup, program idzie bez problemu.

Doczytałem, że problem jest w pinach SPI i że dla EtherCard.h trzeba zdefiniować pin SS na 53. Kwestia jak to zrobić w przypadku etherShield? Żaden ze sposobów znalezionych w necie nie pomaga.. Ewentualnie gdzie dokładnie wpiąć moduł, żeby zadziałał w przypadku tej biblioteki? Próbowałem:
50 SO
51 SI
52 SCK
53 SS/CS

Poniżej kod, mocno skrócony, o dane, mało istotne dla pytania:
Kod:
#include "etherShield.h"
#include "ETHER_28J60.h"
static uint8_t mac[6] = {0x54, 0x58, 0x58, 0x10, 0x00, 0x24};  
static uint8_t ip[4] = {192, 168, 10, 200};                      
static uint16_t port = 80;                                    
ETHER_28J60 e;

void setup() {
 e.setup(mac, ip, port);
 }

void loop(){
const char* params;
 if (params = e.serviceRequest())
 {

  if (strcmp(params, "all") == 0)
   {
     e.print("<center>");
     e.print("Temperatura : ");
     e.print(temperature);
     e.print("<br>Wilgotnosc powietrza : ");
     e.print(humidity);
   }
  if (strcmp(params, "kit_auto") == 0)
  {
   pilot = 0;
  e.print("<center><br><br><br><br>");
  e.print("kit auto!");
  e.print("<br><A HREF='all'><button>BACK</button></A>");
 }
  if (strcmp(params, "kit_on") == 0)
  {
   pilot = 2;
  e.print("<center><br><br><br><br>");
  e.print("Kit on");
  e.print("<br><A HREF='all'><button>BACK</button></A>");
 }
 if (strcmp(params, "kit_off") == 0) {
   pilot = 1;
  e.print("<center><br><br><br><br>");
  e.print("Kit off");
  e.print("<br><A HREF='all'><button>BACK</button></A>");
 }
  e.respond();
 }
}
 
Odpowiedź
#2
Przecież jest opisane jakie piny używać:
Cytat:Arduino communicates with the shield using the SPI bus. This is on digital pins 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used as SS. On the Mega, the hardware SS pin, 53, is not used to select the W5100, but it must be kept as an output or the SPI interface won't work.

Źródło: https://www.arduino.cc/en/Reference/Ethernet
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
namok wszystko fajnie, ale próbowałem zarówno 53 pin jak i 10, a nawet w akcie desperacji 8 Smile

Znalazłem też coś takiego:
Kod:
When the Ethercard library is used with Arduino Mega a little piece of code needs to be adjusted. Thus, the begin()-method has to be called with a reference to the Pin53.

ale to nadal odnosi się do lib. ehternet.h (w etherShield niema takiego wywołania jak begin()), która zjada bardzo dużo pamięci (czysty example z biblioteki, zajmuje więcej niż cały mój projekt z testów). Minus etherShield jest taki, że trzeba go kompilować z IDE 1.0.5, bo w nowszych nie jest już wspierany.
No i tutaj jest całe moje pytanie, jak zdefiniować w programie ten pin 53 jako właściwy dla obsługi cs/ss przez enc28j60.
 
Odpowiedź
#4
Z tego co ja rozumie to dla MEGA pin 53 ma być skonfigurowany jako wyjście ale nie uzywany w projekcie. Jako SS jest używany pin 10.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#5
czyli po prostu:

void setup(){
boolean ss = 53;
pinMode(ss, OUTPUT);
}

a CS w module wpiąć w pin 10 MEGA2560?
 
Odpowiedź
#6
(23-01-2017, 13:40)Mad_Maxs napisał(a): czyli po prostu:

void setup(){
boolean ss = 53;
pinMode(ss, OUTPUT);
}

a CS w module wpiąć w pin 10 MEGA2560?
Jak nie sprawdzisz to nie będziesz wiedział.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#7
Bez wątpienia Wink chciałem się upewnić czy dobrze Cię zrozumiałem Smile
 
Odpowiedź
#8
Trochę to zajęło, ale w końcu zebrałem się w sobie (może dlatego że apka na androida jest, a dostępu przez LAN nie ma) i podpiąłem to zgodnie z sugestiami, czyli SS na pin 10 i pin53 output.

Nie wiesza całkowicie skryptu, ale przy inicjacji stoi jakieś 20 sekund, jakby miał problem z przypisaniem adresu IP. Potem skrypt leci dalej. Działa wszystko, poza LANem Wink
Przypominam że używam ehterShield.h a nie zwykłego Ethernet.h

//EDIT:

Powiem szczerze, że nie mam pojęcia o co chodzi. Nawet example nie działają Sad SO = 50, SI = 51, SCK = 52, CS = 10. Pin 53 podniesiony jak OUTPUT. Sprawdziłem moduł na UNO i działa bez problemu. Moduł który używam z UNO podłączyłem do Mega i nie działa. Zapiąłem ponownie do Uno i działa jak działał.
Próbowałem nawet odpalić przykłady z biblioteki Ethernet. Wszystko się ładnie kompiluje (o ile podniosę 53 pin), niby aplikacji nie wiesza, ale ping nie wraca
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości