5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
POR NAVAISMO
Conectando un
PIC aEthernet(M ETH-BOARD)2
Guía
1
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
Introducción.odos tenemos las necesidad de experimentar con los diferentes tipos de comunicación con
nuestros PIC’s, hemos visto gratamente como podemos implementar comunicación via USB, RF,con el Puerto serie de nuestra PC, es quizás por ello que me nació la cosquilla por comunicar esta
vez el PIC con la PC vía Ethernet..
Lasherramientasque encontrépara este finfueron el PIC18F4520, elENC28J60que es uncontrolador
ethernet alque seaccede víaSPI y elcompiladorMIKROBASIC,este ultimoposee rutinaspara
establecer
comunicacióncon elENC28J60 sinnecesidad detocar losregistros delPIC ni delENC28J60.
Por ultimo
usaremos Visual Basic para hacer nuestras aplicaciones.
Esta es unaguía quesolopersigue elpublicar misexperiencias
y unamanerasencilla deconectar unPIC a la
PC a través de un cable de red. No es nada profesional pero sirve para iniciarse en el tema.
El Hardware: M ETH-BOARD.2
El hardware
queutilizaremosse divide en2 partes. Laprimera esla interfazde la placaethernet lacual
conecta elcable deRED con elENC28J60:la M ETH-BOARD yla segundaparte es elHardwaredel PIC.
2
La M ETH-BOARD esta basada en el hardware que la misma hoja de datos del controlador propone:2
1 T
By Navaismo Página - 1 -28/08/2008 www.micros.mforos.com
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
Como en la misma hoja de datos del ENC28J60 proponen hay que cuidar los valores de lasresistencias, en mi caso uso las siguientes:
6 resistencias de 182 Ω a 1%, son usadas para los LED’s del controlador y las salidas
del SPI del controlador
1 resistencia de. 2.32K Ω a 1% para el pin RBIAS del controlador
4 resistencias de 49.9 Ω a 1% para las salidas del RJ45
Uno de losdispositivosmasdifíciles deconseguir
es elconectorRJ45 con losfiltrosintegradospero nada
quemouserelectronicsno nos
puedaresolver. Elnúmero departe demouser esel 673- J0012D21y es tal
como se ve en el esquemático.
Y por
ultimo elHardwaredel PIC,como seve en lafigura nose usaMCLRpero siustedeslo
necesitanlo
pueden activar.
By Navaismo Página - 2 -28/08/2008 www.micros.mforos.com
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
El Software del Microcontrolador
Para programarelmicrocontroladoruso Mikrobasiccomo ya lo habíacomentado, nopretendo
explicar la
librería si nodar unademostraciónde ella. Parareferirse alas librerías
esta la ayudadel manual yel ejemplo
que posee.
La libreríaquevamos ausar es laSPIEthernetLibraryestalibreríanosahorramuchotrabajopues
como
decíaanteriormentesabe dondeestán losregistros delENC28J60 locual permiteusar lassubrutinas de
manerasimple.Estalibreríanos sirvepara PICde másde 4KBde ROM yconhardwareSPI
integradopor
lo que no todos los PICs son compatibles. Para el uso de PICs de la familia 16F existen algunas
limitaciones, es por ello que uso un PIC18.
“Pingeando”
Una vez quecontamoscon elHardwarearmadonecesitamossaber sinuestraplacaresponde yque manera
massencilladehacerlosi nocon unPING, loqueequivalea un“estavivo”.Pararealizarel Pingusamos
la
subrutinaSpi_Ethernet_DoPacket(), estasubrutinarespondeautomáticamentea solicitudes ARPe
ICMP por lo que sitodo marcha biennuestro PICresponderáautomáticamente.Para hacer estoharemos
este sencillo Programa:
2
program ping‘nombre del programa
include "eth_enc28j60" ‘ Librerias que usa el compiladorinclude "eth_enc28j60_api"
dim mymacaddr as byte [6] ‘ Variables para la MAC, IP, DNS, GW y Mascara de REDdim myipaddr as byte [4]dim gwipaddr as byte [4]dim dnsipaddr as byte [4]dim ipmask as byte [4]dim i as byte
‘/// Estas 2 funciones son llamadas por la Rutina DoPacket por eso es necesario definirlas.‘////// La funcnion USERTCP sirve para la recepcion de paquetes TCP como esto solo es un ping no nos interesa y la declaramos como 0
sub function Spi_Ethernet_UserTCP(dim byref remoteHost as byte[4],dim remotePort, localPort, reqLength as word) as wordresult=0end sub
‘////// La funcnion USERUDP sirve para la recepcion de paquetes UDP como esto solo es un ping no nos interesa y la declaramos como 0sub function Spi_Ethernet_UserUDP(dim byref remoteHost as byte[4], dim remotePort, destPort, reqLength as word) as word
result=0end sub
main: ‘ Iniciamos el Programaadcon0=0 ‘ sin comparadores, sin ADC, Puerto A B y D como Salidaadcon1=15cmcon=7trisa=0porta=0trisb=0portb=0trisd=0portd=0
‘ Direccion Fisica de nuestroPIC la MAC A3:12:45:B3:22:F1mymacaddr[0]=0xA3mymacaddr[1]=0x12mymacaddr[2]=0x45
mymacaddr[3]=0xb3mymacaddr[4]=0x22mymacaddr[5]=0xf1
By Navaismo Página - 3 -28/08/2008 www.micros.mforos.com
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
myipaddr[0]=192myipaddr[1]=168‘ Direccion IP del PIC 192.168.1.20myipaddr[2]=1myipaddr[3]=20
ipmask[0]=255ipmask[1]=255 ‘ Mascara del PIC255.255.255.0ipmask[2]=255ipmask[3]=0
dnsipaddr[0]=192dnsipaddr[1]=168‘ Direccion del DNS 192.168.1.1dnsipaddr[2]=1dnsipaddr[3]=1
gwipaddr[0]=192gwipaddr[1]=168‘ Direccion del Gateway o Puerta de enlace 192.168.1.1gwipaddr[2]=1gwipaddr[3]=1
spi_init() ‘ Inicializamos el Hardware SPI del PICspi_ethernet_init(portc,0,portc,1,mymacaddr,myipaddr,1) ‘ Ponemos RC0 como Reset, RC1 Como el CS, metemos la MAC y la IP
spi_ethernet_confnetwork(ipmask,gwipaddr,dnsipaddr) ‘ Configuramos la RED del PIC
for i=0 to 2portd.7=0 ‘ Hacemos un Blink en el PORTD.0 para saber que vive el PICdelay_ms(500)portd.7=1delay_ms(500)next i
tryping: ‘ Comenzamos el programa principal
while trae ‘ Abrimos un bucle infinitospi_ethernet_dopacket() ‘ Llamamos la subrutina DoPacket la cual procesa los paquetes provenientes de la interfaz ethernetwendgoto tryping ‘ Vamos a repetirlo.end.
Para grabar nuestro programa uso el WinPIC800 y la configuración es la siguiente:
By Navaismo Página - 4 -28/08/2008 www.micros.mforos.com
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
Y el resultado es un PING contestado desde el PIC:
Jugando con el PORTD
Vamos aencender yapagar losBits delPORTDusando elprotocoloUDP, paraellonecesitamosmodificar
el programa anterior; además de usar Visual Basic para “togglear” el PORTD.
El código del PICprogram ping‘nombre del programa
include "enc_m2eth"' modulo donde se implementa el codigoinclude "eth_enc28j60"' modulo usado por el compilador
dim mymacaddr as byte [6] ‘ Variables para la MAC, IP, DNS, GW y Mascara de REDdim myipaddr as byte [4]dim gwipaddr as byte [4]dim dnsipaddr as byte [4]dim ipmask as byte [4]dim i as byte
main: ‘ Iniciamos el Programa
adcon0=0 ‘ sin comparadores, sin ADC, Puerto A B y D como Salidaadcon1=15cmcon=7trisa=0porta=0trisb=0portb=0
trisd=0portd=0
‘ Direccion Fisica de nuestro PIC la MAC A3:12:45:B3:22:F1mymacaddr[0]=0xA3mymacaddr[1]=0x12mymacaddr[2]=0x45mymacaddr[3]=0xb3mymacaddr[4]=0x22mymacaddr[5]=0xf1
By Navaismo Página - 5 -28/08/2008 www.micros.mforos.com
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
myipaddr[0]=192myipaddr[1]=168‘ Direccion IP del PIC 192.168.1.20myipaddr[2]=1myipaddr[3]=20
ipmask[0]=255ipmask[1]=255 ‘ Mascara del PIC255.255.255.0ipmask[2]=255ipmask[3]=0
dnsipaddr[0]=192dnsipaddr[1]=168‘ Direccion del DNS 192.168.1.1dnsipaddr[2]=1dnsipaddr[3]=1
gwipaddr[0]=192gwipaddr[1]=168‘ Direccion del Gateway o Puerta de enlace 192.168.1.1gwipaddr[2]=1gwipaddr[3]=1
spi_init() ‘ Inicializamos el Hardware SPI del PICspi_ethernet_init(portc,0,portc,1,mymacaddr,myipaddr,1) ‘ Ponemos RC0 como Reset, RC1 Como el CS, metemos la MAC y la IP
spi_ethernet_confnetwork(ipmask,gwipaddr,dnsipaddr) ‘ Configuramos la RED del PIC
for i=0 to 2portd.7=0 ‘ Hacemos un Blink en el PORTD.0 para saber que vive el PIC
delay_ms(500)portd.7=1delay_ms(500)next i
tryping: ‘ Comenzamos el programa principal
while trae ‘ Abrimos un bucle infinitospi_ethernet_dopacket() ‘ Llamamos la subrutina DoPacket la cual procesa los paquetes provenientes de la interfaz ethernetwendgoto tryping ‘ Vamos a repetirlo.end.
Hasta
estemomentotodopareceigual,perohemosañadidoel modulo“enc_m2eth” que
es donde
implementamosnuestro códigopara hacer quenuestro PORTDresponda, estavez la funciónUSERUDP
no seráiguala acero puessiqueremosevaluarlospaquetesquetengan
esteprotocolo.Sinembargola
función USERTCP si será igualada a cero pues no la necesitamos.
El código del modulo “enc_m2eth”module enc_m2eth‘nuestro modulo
include "eth_enc28j60_api"' Modulo del compilador
dim getRequest as byte[20]' variables de uso generaldyna as byte[30]txt as string[20]i as byte
‘/////// No evaluamos paquetes TCP por lo que la funcion es 0sub function Spi_Ethernet_UserTCP(dim byref remoteHost as byte[4], dim remotePort, localPort, reqLength as word) as wordresult=0
end sub
'/////// ' Implementamos la recepcion de paquetes UDP reseteando siempre el resultado a 0sub function Spi_Ethernet_UserUDP(dim byref remoteHost as byte[4], dim remotePort, destPort, reqLength as word) as wordresult = 0 ' reseteo de la funcion
If destport = 200 then ‘ El puerto donde vamos a escuchar los paketes es el 200 cualquier peticon a otro no es evaluada.for i=0 to 3 ' captamos los bytes entrantes del buffer ethernetgetRequest[i]=spi_ethernet_getbyte() 'captamos 3 esta ocasion debido al codigo de VBnext i
By Navaismo Página - 6 -28/08/2008 www.micros.mforos.com
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
'//////////// RUTINA PARA ENCENDER BITS EN EL PORTDif getrequest[0]="R" then
if getRequest[1]="D" thenif getRequest[2]="O" then
select case getRequest[3]case "0"PORTD.0=1txt = "RD0 ENCENDIDO"case "1"PORTD.1=1txt = "RD1 ENCENDIDO"case "2"PORTD.2=1txt = "RD2 ENCENDIDO"case "3"PORTD.3=1txt = "RD3 ENCENDIDO"case "4"PORTD.4=1txt = "RD4 ENCENDIDO"case "5"PORTD.5=1txt = "RD5 ENCENDIDO"case "6"PORTD.6=1txt = "RD6 ENCENDIDO"case "7"PORTD.7=1
txt = "RD7 ENCENDIDO"end selectclslcd_out(1,1,txt)
end if end if
end if
'/////////// RUTINA PARA APAGAR BITS EN EL PORTDif getrequest[0]="R" then
if getRequest[1]="D" thenif getRequest[2]="F" then
select case getRequest[3]case "0"PORTD.0=0txt = "RD0 APAGADO"case "1"PORTD.1=0txt = "RD1 APAGADO"case "2"PORTD.2=0txt = "RD2 APAGADO"case "3"PORTD.3=0txt = "RD3 APAGADO"case "4"PORTD.4=0txt = "RD4 APAGADO"case "5"PORTD.5=0txt = "RD5 APAGADO"case "6"PORTD.6=0
txt = "RD6 APAGADO"case "7"PORTD.7=0txt = "RD7 APAGADO"
end selectclslcd_out(1,1,txt)
end if end if
end if
result = 13 + reqLength ' el resultado es la longitud del texto a enviar mas lo que nos llega del bufferspi_ethernet_putbytes(@txt,13) ' Ponemos el mensaje en el buffer de transmision
'Aqui enviamos los paquetes (sacado de la libreria original)while(reqLength <> 0)
Spi_Ethernet_putByte(Spi_Ethernet_getByte())reqLength = reqLength - 1wend
end if end sub
By Navaismo Página - 7 -28/08/2008 www.micros.mforos.com
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
Prácticamente lo que hacemos es evaluar los paquetes que entran al puerto 200 UDP de la M ETH-2
BOARD. Filtrandola cadena enviadadesde la PC. Ycuando esrecibido
automáticamentese regresa la
cadena con el Bit que se encendió o se apago.
El código de Visual Basic.
Para podermanipularlos bits delPIC víaEthernetnecesitamosusar unprograma,en este casouso el Visual
Basic debido a su facilidad por acceder a estos puertos usando el control WINSOCK.
Para esta miniguia propngo el siguiente codigo ya que cumple con las condicionesdel programa del PIC:
Private sub Form_Load()' puerto PORTDWinsock1.Protocol = sckUDPProtocol ‘Protocolo que usa el socketWinsock1.RemoteHost = "192.168.1.20" ‘ IP remota la del PICWinsock1.RemotePort = 200 ‘ Puerto a enviar los paquetesWinsock1.Bind 1002 ‘ Puerto donde escucha la PC
End sub
'Cachamos datos para funcniones del PORTDPrivate Sub winsock1_DataArrival(ByVal bytesTotal As Long)Dim strData As StringWinsock1.GetData strData Text3.Text = strDataEnd Sub'Enviamos datos para toggle de bits del PORTDPrivate Sub Check1_Click()If Check1 = 1 ThenWinsock1.SendData "RDO0"ElseWinsock1.SendData "RDF0"End If End Sub
Private Sub Check2_Click()If Check2 = 1 Then
Winsock1.SendData "RDO1"ElseWinsock1.SendData "RDF1"End If End Sub
Private Sub Check3_Click()If Check3 = 1 ThenWinsock1.SendData "RDO2"ElseWinsock1.SendData "RDF2"End If End Sub
Private Sub Check4_Click()If Check4 = 1 Then
Winsock1.SendData "RDO3"ElseWinsock1.SendData "RDF3"End If End Sub
Private Sub Check5_Click()If Check5 = 1 ThenWinsock1.SendData "RDO4"ElseWinsock1.SendData "RDF4"End If End Sub
Private Sub Check6_Click()If Check6 = 1 ThenWinsock1.SendData "RDO5"
ElseWinsock1.SendData "RDF5"End If
By Navaismo Página - 8 -28/08/2008 www.micros.mforos.com
5/12/2018 Conectando Un Pic a Athernet Con La m2eth Board 205 - slidepdf.com
http://slidepdf.com/reader/full/conectando-un-pic-a-athernet-con-la-m2eth-board-205
Private Sub Check7_Click()If Check7 = 1 ThenWinsock1.SendData "RDO6"ElseWinsock1.SendData "RDF6"End If End Sub
Private Sub Check8_Click()If Check8 = 1 ThenWinsock1.SendData "RDO7"ElseWinsock1.SendData "RDF7"End If End Sub
'Encendemos todo el PORTDPrivate Sub Command1_Click()Check1 = 1Check2 = 1Check3 = 1Check4 = 1Check5 = 1Check6 = 1Check7 = 1Check8 = 1End Sub
'Apagamos Todo El PORTDPrivate Sub Command2_Click()Check1 = 0Check2 = 0Check3 = 0Check4 = 0Check5 = 0Check6 = 0Check7 = 0Check8 = 0End Sub
Con esto podemos observar como responde nuestro programa:
By Navaismo Página - 9 -28/08/2008 www.micros.mforos.com
Top Related