Autor Tema: PIC18F4550 + ICMP + C18  (Leído 2011 veces)

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

Desconectado EduSky

  • PIC10
  • *
  • Mensajes: 37
PIC18F4550 + ICMP + C18
« en: 30 de Abril de 2012, 22:50:54 »
Buenas  a toda la gente del foro. Buena mi idea es poder usar el pic mencionado y protocolo ICMP y enviar un PING a la PC (y viceversa). No tengo el hardware completo porque me faltan algunos componentes necesarios para hacer funcionar el ENC28J60. Encontre en el foro informacion util para ver por donde empezar. Por ahora arranque con la parte de software asi que instale el stack de microchip y voy a usar el C18. Seguramente no es nada nuevo, pero el stack tiene demos de las que pude orientarme un poco. Tambien espero quien alguien pueda ayudarme tambien.
Para el proyecto los headers serian:
ARP.h
Compiler.h
Delay.h
ENC28J60.h
Hardware profile.h
Helpers.h
ICMP.h
IP.h
MAC.h
TCPIP.
TCPIPConfig.h
Tick.h
StackTsk.h

Comence modificando el TCPIPConfig.h para habilitar los siguientes modulos:
#define STACK_USE_ICMP_SERVER
#define STACK_USE_ICMP_CLIENT

¿Son los unicos que deberia habilitar? o necesito algo mas??
Ahora estoy modificando el hardwareprofile para ajustarlo a mi placa.
Espero que me puedan ayudar y asi a medida que avance publicar resultados.
Gracias y saludos!

Desconectado EduSky

  • PIC10
  • *
  • Mensajes: 37
Re: PIC18F4550 + ICMP + C18
« Respuesta #1 en: 01 de Mayo de 2012, 22:39:22 »
Buenas noches!. Bueno siguiendo con lo anterior descartando varias cosas el hardware mapping para la placa seria:

// Hardware mappings
#if defined(YOUR_BOARD)
// Define your own board hardware profile here

// ENC28J60 I/O pins
   //#define ENC_RST_TRIS      (TRISBbits.TRISB5)
   //#define ENC_RST_IO      (LATBbits.LATB5)
   #define ENC_CS_TRIS      (TRISBbits.TRISB3)
   #define ENC_CS_IO         (LATBbits.LATB3)
   #define ENC_SCK_TRIS      (TRISBbits.TRISB1)
   #define ENC_SDI_TRIS      (TRISBbits.TRISB0)
   #define ENC_SDO_TRIS      (TRISCbits.TRISC7)
   #define ENC_SPI_IF         (PIR1bits.SSPIF)
   #define ENC_SSPBUF         (SSPBUF)
   #define ENC_SPISTAT         (SSPSTAT)
   #define ENC_SPISTATbits      (SSPSTATbits)
   #define ENC_SPICON1         (SSPCON1)
   #define ENC_SPICON1bits      (SSPCON1bits)
   #define ENC_SPICON2         (SSPCON2)

#else
   #error "Hardware profile not defined.  See available profiles in HardwareProfile.h and modify or create one."
#endif


#if defined(__18CXX)   // PIC18
   // UART mapping functions for consistent API names across 8-bit and 16 or
   // 32 bit compilers.  For simplicity, everything will use "UART" instead
   // of USART/EUSART/etc.
   #define BusyUART()            BusyUSART()
   #define CloseUART()            CloseUSART()
   #define ConfigIntUART(a)      ConfigIntUSART(a)
   #define DataRdyUART()         DataRdyUSART()
   #define OpenUART(a,b,c)         OpenUSART(a,b,c)
   #define ReadUART()            ReadUSART()
   #define WriteUART(a)         WriteUSART(a)
   #define getsUART(a,b,c)         getsUSART(b,a)
   #define putsUART(a)            putsUSART(a)
   #define getcUART()            ReadUSART()
   #define putcUART(a)            WriteUSART(a)
   #define putrsUART(a)         putrsUSART((far rom char*)a)
#endif


#endif

Lo revise y creo que esta bien. ¿Algun comentario?
¿Alguien podria ayudarme con el tema del SPI? De acuerdo a la errata del ENC el SCK tiene que estar entre 8MHz y 10MHZ pero no tengo muy claro como hacerlo. Espero que alguien pueda responder. Gracias.
Saludos!!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: PIC18F4550 + ICMP + C18
« Respuesta #2 en: 01 de Mayo de 2012, 23:32:35 »
Para usar el stack de Microchip, mínimo un micro de 64kB. Salvo que uses una versión vieja, pero vieja xD El Stack utiliza ciertos archivos de configuración global *.h que permite decir que frecuencia de clock FCY utilizas y a partir de ello configura el clock SPI, por lo menos debería  :mrgreen:


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

Desconectado EduSky

  • PIC10
  • *
  • Mensajes: 37
Re: PIC18F4550 + ICMP + C18
« Respuesta #3 en: 02 de Mayo de 2012, 00:55:12 »
Suky, gracias por responder. La version de stack que tengo es la 5.10. Con los archivos que mencione mas arriba pude compilar con el MPLAB. Modifique (nose si esta bien) la funcion pingdemo. Solo quiero que el pic le mande un ping a la pc (para esto solo habilite los modulos ICMP). Cuando lo compile no salto ningun error en cuanto a la memoria.
Por otra parte en archivo fuente del ENC tenes:
   // Set up SPI
    ClearSPIDoneFlag();
#if defined(__18CXX)
    ENC_SPICON1 = 0x20;     // SSPEN bit is set, SPI in master mode, FOSC/4,
                            //   IDLE state is low level
    ENC_SPISTATbits.CKE = 1;// Transmit data on rising edge of clock
    ENC_SPISTATbits.SMP = 0;// Input sampled at middle of data output time
Comparando con los registros del pic la configuracion para el SPI "seria" la que necesito pero el problema es que en el pin SCK tengo 5MHz cuando necesito almenos 8MHZ (de acuerdo a  errata)
Cuando dice FOCS/4, ¿podrias por favor decirme si refiere al cistal que uso para el pic?? o si el la frecuencia a que trabaja el PIC luego que configuras los fuses??
Gracias!
Saludos!!