2013-05-22 2 views
0

저는 Arduino Mega를 기반으로 WizNET 이더넷 shield 및 포함 된 SD 카드 리더기를 사용하는 보드를 설계했습니다. 표준 이더넷 라이브러리 및 SdFat를 사용하면 문제가 없습니다.ENC28J60 (EtherCard)와 SD 카드 (SdFat)를 Arduino Mega에서 동시에 사용합니다.

이제 하드웨어 디자인을 ElecFreaks의 ENC28J60 Ethernet boardElecFreaks SD card breakout board을 사용하도록 변경했습니다. 전기 캐비닛의 DIN 레일에 장착 할 수있는 케이스를 설계 할 수있는 능력이 향상되었습니다. 나는 SdFat에 머물렀다.하지만 EtherCard 라이브러리를 사용하여 ENC28J60과 통신해야했다.

나는 칩 선택 라인을 위해 메가의 핀 13과 핀 14를 사용하고 두 개의 보드를 SPI 버스에 연결했다. 두 보드 모두 라이브러리의 예제 파일을 사용하여 완벽하게 작동합니다. 필자는 SD 카드의 파일에서 구성을 읽고 파일의 값으로 이더넷을 설정합니다. 여태까지는 그런대로 잘됐다. SD 카드가 올바르게 액세스되고 이더넷 보드가 핑 요청에 응답합니다. 이제 문제는 이더넷 보드에서 TCP 요청을 할 수 없다는 것입니다.

어떻게이 두 보드를 함께 사용할 수 있습니까?

트릭을 수행해야하는 코드는 다음과 같습니다.하지만 그렇지 않습니다.

//Initial request 
char request_uri[] = "/foo/bar/"; 
Stash::prepare(PSTR("GET $F HTTP/1.1" "\r\n" 
    "User-Agent: arduino/1.5.2" "\r\n" 
    "\r\n"), 
    request_uri); 

ether.copyIp(ether.hisip, target_ip); 
ether_sessionID = ether.tcpSend(); 
request_timer = millis() + REQUEST_TIMEOUT; 

//And in the loop 
ether.packetLoop(ether.packetReceive()); 

//Function called after initial request in loop (different state) 
void checkTcpResponse() { 
    const char* reply = ether.tcpReply(ether_sessionID); 

    if (reply != 0) { 
     Serial.println(reply); 
    } 
    else { 
     if (millis() > request_timer) { 
      Serial.println("Timeout reached"); 
      state = STATE_RESET; 
      delay(1000); 
     } 
    } 
} 

//This is just cut from the code, so it is not complete, etc. 

요청하는 동안 연결된 웹 서버의 access.log를보고 있습니다. 아무 일도 일어나지 않습니다 : (이전에 말했듯이, EtherCard 라이브러리의 WebClient 예제를 통해 주어진 웹 서버에 대한 요청이 작동하고 로그에 나타납니다.)

+0

BTW, 이것은 Ethercard 라이브러리의 NoIPClient 예제를 기반으로합니다 ... – pmayer

답변

1

1 년 전에이 질문을 한 적이 있지만 아무도 당신에게주지 않은 것 같습니다. 어떤 도움.

나는 SD 카드 나란히 ENC28J60 이더넷 카드를 사용하여 비슷한 문제가 건너했습니다. 모두 개별적으로가 아니라 함께 일했다.

내가 문제를 해결하지만, 나에게 3.3을 제공하는 별도의 전원 공급 장치를 사용 볼트

나는 브레드 보드 전원 공급 장치 중 하나를 사용하여 3.3 & 5 볼트.

브레드 보드를 통해 연결된 동안 몇 가지 문제가있었습니다.

브레드 보드 연결이 조금 어색하다고 생각하여 추가 전원 핀에서 직접 전원을 공급하여 해결했습니다.

리얼 타임 클럭 및 LCD 디스플레이뿐만 아니라 5V 전원을 공급하기에 충분한 전력이있었습니다.

아마도 지금까지 문제를 해결했을 것입니다 만 다른 사람이 유용하다고 생각할 수 있습니다.

+0

나는 내 목적을 위해 BeagleBoneBlack으로 전환했습니다. 그러나 시간을내어 대답 해 주셔서 감사합니다. 분명히 그것은 전원이어야합니다 : - / – pmayer