Autor Tema: enc28j60.inc  (Leído 2292 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
enc28j60.inc
« en: 25 de Agosto de 2010, 11:07:00 »
por favor borren esta pregunta.se ha repetido dos veces.por culpa de los errores de conexion.
« Última modificación: 25 de Agosto de 2010, 11:10:48 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: enc28j60.inc
« Respuesta #1 en: 25 de Agosto de 2010, 11:11:47 »
Y todo lo que puedas encontrar va a estar en C. Ariel realizo una traducción de algunos capítulos del datasheet, lo puedes ver en ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo.

Con una librería en C puedes darte una idea de los pasos que hay que seguir.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: enc28j60.inc
« Respuesta #2 en: 25 de Agosto de 2010, 16:39:12 »
ya vi lo que hizo ariel.muy buen trabajo.pero claro.hace falta mucha mas informacion al repecto.

es muy posible que tenga que analizar una libreria en C para este dispositivo.pero no se donde encontrarla.ya que poco entiendo de C.

gracias.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: enc28j60.inc
« Respuesta #3 en: 25 de Agosto de 2010, 16:55:08 »
Aca te dejo un par de funciones que sirven solo para inicializar el ENC en C:

Código: C
  1. void ENC_WriteReg(char Reg, char Data){
  2.    output_low(CS_ENC);
  3.    spi_write(WCR|Reg);
  4.    spi_write(Data);
  5.    output_high(CS_ENC);
  6. }
  7.  
  8. char ENC_ReadMAC(Char Reg){
  9. char b;
  10.    output_low(CS_ENC);
  11.    spi_write(RCR|Reg);
  12.    spi_write(0x00);
  13.    b =spi_read();
  14.    output_high(CS_ENC);
  15.    return(b);
  16. }
  17.  
  18. char ENC_ReadETH(char Reg){
  19. char b;
  20.    output_low(CS_ENC);
  21.    spi_write(RCR|Reg);
  22.    b =spi_read();
  23.    output_high(CS_ENC);
  24.    return(b);
  25. }
  26.  
  27. void ENC_BFCReg(char Reg,char Data){
  28.    output_low(CS_ENC);
  29.    spi_write(BFC|Reg);
  30.    spi_write(Data);
  31.    output_high(CS_ENC);
  32. }
  33.  
  34. void ENC_BFSReg(char Reg, char Data){
  35.    output_low(CS_ENC);
  36.    spi_write(BFS|Reg);
  37.    spi_write(Data);
  38.    output_high(CS_ENC);
  39. }
  40.  
  41. void ENC_SetBank(char Bank){
  42.      ENC_BFCReg(ECON1,0x02);
  43.      ENC_BFSReg(ECON1,Bank);
  44. }
  45.  
  46.  
  47. void ENCPut(char Data){  
  48.    output_low(CS_ENC);
  49.    spi_write(WBM);
  50.    spi_write(Data);
  51.    output_high(CS_ENC);  
  52. }
  53.  
  54. char ENCGet(void){  
  55. char b;
  56.    output_low(CS_ENC);
  57.    spi_write(RBM);
  58.    b=spi_read();
  59.    output_high(CS_ENC);  
  60.    return(b);
  61. }
  62.  
  63. void ENC_SendReset(void){
  64.    output_low(CS_ENC);
  65.    spi_write(SRC);
  66.    output_high(CS_ENC);
  67. }
  68.  
  69. void ENC_GetArray(char *Buffer, long Len){
  70.    output_low(CS_ENC);
  71.    spi_write(RBM);
  72.    while(Len--){
  73.       *Buffer++=spi_read();
  74.    }
  75.    output_high(CS_ENC);
  76. }
  77.  
  78. void ENC_PutArray(char *Buffer,long Len){
  79.    //bufSize += len;
  80.    output_low(CS_ENC);
  81.    spi_write(WBM);  
  82.    while(Len--){
  83.       spi_write(*Buffer++);
  84.    }
  85.    output_high(CS_ENC);
  86. }
  87.  
  88.  
  89. void ENC_WritePHY(char Reg, long Data){
  90.    ENC_SetBank(2);
  91.    ENC_WriteReg(MIREGADR,Reg);
  92.    ENC_WriteReg(MIWRL,Data);
  93.    ENC_WriteReg(MIWRH,(Data>>8));
  94.  
  95.    ENC_SetBank(3);
  96.    while(bit_test(ENC_ReadMAC(MISTAT),0));
  97. }
  98.  
  99. long ENC_ReadPHY(char Reg){
  100. char h,l;
  101.    ENC_SetBank(2);
  102.    ENC_WriteReg(MIREGADR,Reg);
  103.    ENC_WriteReg(MICMD, 0x01);  
  104.  
  105.    ENC_SetBank(3);
  106.    while(bit_test(ENC_ReadMAC(MISTAT),0));
  107.  
  108.    ENC_SetBank(2);
  109.    ENC_WriteReg(MICMD,0x00);  
  110.    h=ENC_ReadMAC(MIRDH);
  111.    l=ENC_ReadMAC(MIRDL);
  112.    return(make16(h,l));
  113. }
  114.  
  115. void Init_ENC(void){
  116.  
  117.    setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_XMIT_L_TO_H);
  118.    delay_us(1);
  119.  
  120.    ENC_WritePHY(PHLCON,0b0000110110110000);     // configurazione LED  (per test)
  121.  
  122.  
  123.    ENC_SetBank(0);
  124.    ENC_WriteReg(ERXSTL,RX_BUF_START);   //
  125.    ENC_WriteReg(ERXSTH,(RX_BUF_START>>8));  // Inicio Buffer de lectura
  126.    ENC_WriteReg(ERXRDPTL,RX_BUF_END);     //
  127.    ENC_WriteReg(ERXRDPTH,(RX_BUF_END>>8));    // Puntero de Buffer de Lectura
  128.    ENC_WriteReg(ERXNDL,RX_BUF_END);     //
  129.    ENC_WriteReg(ERXNDH,(RX_BUF_END>>8));    // Fin Buffer de Lectura
  130.    ENC_WriteReg(ETXSTL,TX_BUF_START);   //
  131.    ENC_WriteReg(ETXSTH,(TX_BUF_START>>8));  // Incicio de Buffer de Escritura.-
  132.  
  133.  
  134.    ENC_SetBank(2);
  135.    ENC_WriteReg(MACON1,0x0D);           // MARXEN  TXPAUS  RXPAUS
  136.    ENC_WriteReg(MACON3,0x30);          // Half Duplex, Padding 60byte, CRC
  137.    ENC_WriteReg(MAIPGL,0x12);             //
  138.    ENC_WriteReg(MAIPGH,0x0C);             //
  139.    ENC_WriteReg(MABBIPG,0x12);             // Inter-Packet Gap
  140.  
  141.  
  142.    ENC_WriteReg(MAMXFLL,1500);  
  143.    ENC_WriteReg(MAMXFLH,(1500>>8));
  144.  
  145.  
  146.    ENC_SetBank(3);
  147.    ENC_WriteReg(MAADR1, MY_MAC1);
  148.    ENC_WriteReg(MAADR2, MY_MAC2);
  149.    ENC_WriteReg(MAADR3, MY_MAC3);
  150.    ENC_WriteReg(MAADR4, MY_MAC4);
  151.    ENC_WriteReg(MAADR5, MY_MAC5);
  152.    ENC_WriteReg(MAADR6, MY_MAC6);
  153.  
  154.    ENC_WritePHY(PHCON2,0b0000000100000000);  // disabilita il loopback
  155.    ENC_WritePHY(PHCON1,0);                  // habilita il PHY
  156.  
  157.    ENC_SetBank(1);
  158.    ENC_WriteReg(ERXFCON,0b10100001);             // imposta i filtri di ricezione
  159.    ENC_BFSReg(ECON1,0b100);                     // abilita la ricezione
  160.  
  161.    ENC_WriteReg(EIR,0);
  162.    ENC_WriteReg(EIE,0b11000000);               // abilita l'interrupt RX
  163. }


Y algunas definiciones:
Código: C
  1. #define WCR (0b01000000) // Write Control Register command
  2. #define BFS (0b10000000) // Bit Field Set command
  3. #define BFC (0b10100000) // Bit Field Clear command
  4. #define RCR (0b00000000) // Read Control Register command
  5. #define RBM (0b00111010) // Read Buffer Memory command
  6. #define WBM (0b01111010) // Write Buffer Memory command
  7. #define SRC (0b11111111) // System Reset command


Además te adjunto la librería que implementa Microchip.

Suerte  :mrgreen:

No contesto mensajes privados, las consultas en el foro

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: enc28j60.inc
« Respuesta #4 en: 26 de Agosto de 2010, 10:43:34 »
muchas gracias suky.con esto tengo para mucho tiempo de estudio.o digo muuuucho. :D
Montando mi primera impresora 3D (Raprep Prusa i3)


 

anything