Ten post chciałbym poświęcić na opisanie sposobu konfiguracji układu ENC28J60 za pomocą Arduino. Post będzie opisywał podstawowy sposób podłączenia układu do Arduino wraz z prostym programem pozwalającym na pingowanie do układu.
Układ zasilany będzie z 3.3V. Nie ma potrzebny stosowania konwerterów poziomów logicznych ponieważ moduł ENC jak i Arduino przyjmuje sygnały z tego zakresu.
Podłączenie należy wykonać następująco:
Program jaki należy wgrać do Arduino wygląda następująco:
Na początku podawane są dane do połączeń czyli adres mac oraz ip. Kolejnym elementem jest przygotowanie bufora przechowującego odebrane i wysłane dane.
Potem w części setup uruchamiana jest biblioteka. Do niej przekazywana jest informacja odnoście bufora, adresu mac oraz pinu cs. Dalej uruchamiane jest DHCP, bądź w przypadku problemów z połączeniem włączany jest adres statyczny.
W pętli wykonywane są dwie funkcja packetLoop odpowiada na przesłane dane. Do niej podawana jest funkcja odbierająca dane.
[Źródło: https://store.arduino.cc/usa/arduino-uno-rev3]
Podłączenie:
Układ zasilany będzie z 3.3V. Nie ma potrzebny stosowania konwerterów poziomów logicznych ponieważ moduł ENC jak i Arduino przyjmuje sygnały z tego zakresu.
Podłączenie należy wykonać następująco:
- SO - Pin 12;
- SI - Pin 11;
- SCK - Pin 13;
- CS - pin 8;
- VCC - 3.3V;
- GND - GND;
Do obsługi układu wykorzystuje się bibliotekę jaką można pobrać z serwisu github czyli EtherCard. Po jej pobraniu należy ją umieścić w folderze z bibliotekami dla Arduino.
DHCP działa w taki sposób, że wysyłany jest komunikat DHCPDISCOVER , który pozwala na zlokalizowanie serwerów. Następnie z serwera odsyłane jest DHCPOFFER z propozycją adresu dla klienta. Wybiera on dostępny adres po czym przesyła DHCPREQUEST z żądaniem przydzielenia wybranych parametrów. Jeśli następuje potwierdzenie to od serwera przesyłane jest DHCPACK. Możliwe jest też otrzymanie następujących danych:
DHCPNAK - gdy nastąpi odmowa wybranych przez klienta parametrów;
DHCPDECLINE - informacja, że wybrany adres jest już wykorzystywany przez inne urządzenie;
DHCPPRELEASE - zwolnienie adresu siecowego;
DHCPINFORM - przydzielenie danych bez adresu IP;
Cała procedura obsługi DHCP jest wykorzystywana przez bibliotekę.
Programowanie:
Program jaki należy wgrać do Arduino wygląda następująco:
- /*
- vcc - 3.3V
- gnd - gnd
- sck - pin 13
- so - pin 12
- si - pin 11
- cs - pin 8
- */
- #include "EtherCard.h"
- static byte macAddr[] = {0x74,0x69,0x69,0x2D,0x30,0x31}; /* Set mac Address */
- static byte ipAddr[] = {192,168,1,10}; /* Set ip Address */
- byte Ethernet::buffer[700]; /* Buffer for data */
- void setup ()
- {
- Serial.begin(57600);
- Serial.println("Ping to device:");
- /* Start library, need to pass mac address into function */
- if (ether.begin(sizeof Ethernet::buffer, macAddr, 10) == 0){
- Serial.println( "Can't access to Ethernet controller");
- }
- if(!ether.dhcpSetup()){
- Serial.println("DHCP can't be set");
- /* Set Ip Address */
- if (!ether.staticSetup(ipAddr)){
- Serial.println("Can't set IP address");
- }
- }
- else
- {
- ether.printIp("IP: ", ether.myip);
- ether.printIp("GW: ", ether.mymask);
- ether.printIp("GW: ", ether.gwip);
- }
- }
- void loop()
- {
- word message = ether.packetReceive();
- /* Get msg from device */
- ether.packetLoop(message);
- }
Na początku podawane są dane do połączeń czyli adres mac oraz ip. Kolejnym elementem jest przygotowanie bufora przechowującego odebrane i wysłane dane.
Potem w części setup uruchamiana jest biblioteka. Do niej przekazywana jest informacja odnoście bufora, adresu mac oraz pinu cs. Dalej uruchamiane jest DHCP, bądź w przypadku problemów z połączeniem włączany jest adres statyczny.
W pętli wykonywane są dwie funkcja packetLoop odpowiada na przesłane dane. Do niej podawana jest funkcja odbierająca dane.