Autor Tema: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?  (Leído 8407 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #15 en: 15 de Enero de 2013, 14:12:52 »
GetSystemClock() es FOSC, GetInstructionClock() es FCY y GetPeripheralClock() es la de los perifericos.

El stack inicia el SPI según lo establecido en hardwareprofile.

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

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #16 en: 15 de Enero de 2013, 14:42:27 »
GetSystemClock() es FOSC, GetInstructionClock() es FCY y GetPeripheralClock() es la de los perifericos.

El stack inicia el SPI según lo establecido en hardwareprofile.

Saludos!

A ver por que tengo una pájara mental que me tiene sin dormir:
este micro lo tengo con un xtal de 4MHz (FOSC) con el PLL activado que nos da a la salida 96Mhz que son divididos /2 = 48Mhz para USB y entre /3 = 32MHZ que entran en un preescaler que no uso (/1 por asi decirlo) del que salen los 32MHz para los perifericos y 32MHz para la CPU.

Segun esto quieres decir que:

GetSystemClock() es FOSC = 4000000ul
GetInstructionClock() es FCY = GetSystemClock()/2
GetPeripheralClock() es la de los perifericos = 32000000ul

Pues voy a probar y ya les contaré

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #17 en: 15 de Enero de 2013, 15:01:48 »
Bueno ya hay avances, el router me dice que esta conectado pero el nombre del host no es correcto y no responde al ping

Continuara...

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #18 en: 15 de Enero de 2013, 15:32:02 »
Bueno ya hay avances, el router me dice que esta conectado pero el nombre del host no es correcto y no responde al ping

Continuara...

Perfecto, un reset posterior y bingo!!
Con bastante temperatura en el estabilizador pero es normal

Muchísimas gracias a todos!!!!



Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #19 en: 15 de Enero de 2013, 16:18:49 »
enhorabuena y adelante

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #20 en: 15 de Enero de 2013, 16:29:35 »
enhorabuena y adelante

Tengo otra: ¿es posible que tarde una eternidad en coger ip?
Al rato de conectarlo responde, lento pero responde

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #21 en: 15 de Enero de 2013, 19:22:44 »
GetSystemClock() es FOSC, GetInstructionClock() es FCY y GetPeripheralClock() es la de los perifericos.

El stack inicia el SPI según lo establecido en hardwareprofile.

Saludos!

A ver por que tengo una pájara mental que me tiene sin dormir:
este micro lo tengo con un xtal de 4MHz (FOSC) con el PLL activado que nos da a la salida 96Mhz que son divididos /2 = 48Mhz para USB y entre /3 = 32MHZ que entran en un preescaler que no uso (/1 por asi decirlo) del que salen los 32MHz para los perifericos y 32MHz para la CPU.

Segun esto quieres decir que:

GetSystemClock() es FOSC = 4000000ul
GetInstructionClock() es FCY = GetSystemClock()/2
GetPeripheralClock() es la de los perifericos = 32000000ul

Pues voy a probar y ya les contaré

Lo correcto seria:

GetSystemClock() = 32000000ul
GetInstructionClock() = GetSystemClock()/2
GetPeripheralClock() = 16000000ul


GetSystemClock() es la frecuencia de clock que ingresa al CPU. GetInstructionClock() es la frecuencia con la que ejecuta el CPU, GetSystemClock()/4 para PIC16/PIC18, GetSystemClock()/2 para PIC24 y GetSystemClock()/1 para PIC32.


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

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #22 en: 16 de Enero de 2013, 05:34:31 »

Lo correcto seria:

GetSystemClock() = 32000000ul
GetInstructionClock() = GetSystemClock()/2
GetPeripheralClock() = 16000000ul


GetSystemClock() es la frecuencia de clock que ingresa al CPU. GetInstructionClock() es la frecuencia con la que ejecuta el CPU, GetSystemClock()/4 para PIC16/PIC18, GetSystemClock()/2 para PIC24 y GetSystemClock()/1 para PIC32.


Saludos!

Puede ser por esas diferencias por las que vaya tan sumamente lento?
He visto en la ayuda del stack que esos parámetro son usados para cálculos de tiempos y por eso lo pregunto.
« Última modificación: 16 de Enero de 2013, 05:41:14 por alperez »

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #23 en: 16 de Enero de 2013, 14:52:57 »
Bueno despues de unas cuantas pruebas veo que funciona con:

GetSystemClock()            32000000UL
GetInstructionClock()   (GetSystemClock()/2)   
GetPeripheralClock()   (GetSystemClock())   

y

GetSystemClock()            4000000UL
GetInstructionClock()   (GetSystemClock()/2)   
GetPeripheralClock()   (GetSystemClock() *8)   


Pero tarda una eternidad en coger ip y se pierden demasiados paquetes
No sé si el enc estará averiado

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #24 en: 16 de Enero de 2013, 20:01:12 »
Puede que sea otro el problema... Probaste de configurar una menor frecuencia de SPI?


Saludos!





No contesto mensajes privados, las consultas en el foro

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #25 en: 16 de Enero de 2013, 21:12:42 »
Puede que sea otro el problema... Probaste de configurar una menor frecuencia de SPI?


Saludos!

Ahora tengo:

Código: [Seleccionar]
// TCPIP
    #define GetSystemClock()            32000000UL
    #define GetInstructionClock() (GetSystemClock())
    #define GetPeripheralClock() (GetSystemClock())

Resultado:

IP Fija conectado directamente al PC: Conexión inmediata, responde al ping, con un tiempo medio de 4ms, se pierden paquetes y se pierde la          conexión volviendo enseguida

IP dinámica conectado al router: No conecta, por ARP veo que está conectado pero con una IP 169....

¿Falla la negociación full / half duplex? ¿falla el DHCP? ¿falla el SPI?

Al principio pensaba que era la velocidad del SPI como bien dices, buscando encuentro esto:
ENC_SPICON1bits.CKE = 1 wrong value? .Pero es para ENC28J60

Se supone que el stack configura el SPI de la mejor forma posible pero claro, es solo una suposición.
Mañana probaré como bajar la velocidad al SPI a algo más estable pero estoy buscando experiencias de este tipo para saber como y qué cambiar pero no encuentro, sólo me queda probar y probar


Código: [Seleccionar]
#elif defined(__C30__)
// Ensure SPI doesn't exceed processor limit
#if (defined(__PIC24F__) || defined(__PIC24FK__) || defined(__PIC24H__) || defined(__dsPIC33F__)) && ENC100_MAX_SPI_FREQ > 8000000
#undef ENC100_MAX_SPI_FREQ
#define ENC100_MAX_SPI_FREQ 8000000
#endif
#if defined(__dsPIC30F__) && ENC100_MAX_SPI_FREQ > 10000000
#undef ENC100_MAX_SPI_FREQ
#define ENC100_MAX_SPI_FREQ 10000000
#endif
   
    // Calculate optimal primary and secondary prescalers to make an SPI clock no faster than ENC100_MAX_SPI_FREQ
    #define OPTIMAL_PRESCALE ((((~((GetPeripheralClock()/64+ENC100_MAX_SPI_FREQ-1)/ENC100_MAX_SPI_FREQ - 1)) & 0x7)<<2) | 0x0)
    #if GetPeripheralClock()/8/16 <= ENC100_MAX_SPI_FREQ
    #undef OPTIMAL_PRESCALE
    #define OPTIMAL_PRESCALE ((((~((GetPeripheralClock()/16+ENC100_MAX_SPI_FREQ-1)/ENC100_MAX_SPI_FREQ - 1)) & 0x7)<<2) | 0x1)
    #endif
    #if GetPeripheralClock()/8/4 <= ENC100_MAX_SPI_FREQ
    #undef OPTIMAL_PRESCALE
    #define OPTIMAL_PRESCALE ((((~((GetPeripheralClock()/4+ENC100_MAX_SPI_FREQ-1)/ENC100_MAX_SPI_FREQ - 1)) & 0x7)<<2) | 0x2)
    #endif
    #if GetPeripheralClock()/8/1 <= ENC100_MAX_SPI_FREQ
    #undef OPTIMAL_PRESCALE
    #define OPTIMAL_PRESCALE ((((~((GetPeripheralClock()/1+ENC100_MAX_SPI_FREQ-1)/ENC100_MAX_SPI_FREQ - 1)) & 0x7)<<2) | 0x3)
    #endif

// Work around 1:1, 1:1 SPI errata on early PIC24FJ128GA010, PIC24HJ256GP610, dsPIC33FJ256GP710, etc. silicon where SCK stops running
#if (defined(__PIC24F__) || defined(__PIC24H__) || defined(__dsPIC33F__)) && (OPTIMAL_PRESCALE == 0x1F)
#undef OPTIMAL_PRESCALE
#define OPTIMAL_PRESCALE 0x1B
#endif


#define ConfigureSPIModule() do{ \
                                            ENC100_SPISTAT = 0; /* Turn off SPI */ \
                                            ENC100_SPICON1 = OPTIMAL_PRESCALE | 0x0100 | 0x0020; /* CKE = 1, MSTEN = 1 */ \
                                            ENC100_SPICON2 = 0; /* Legacy non enhanced buffering */ \
                                            ENC100_SPISTAT = 0x8000; /* Turn on SPI */ \
}while(0)

#define ConfigurePMPModule() do{ \
                                            PMCONbits.PMPEN = 0; \
                                            PMCON = (PMP_ADRMUX<<11) | 0x0323; /* PTWREN = 1, PTRDEN = 1, ALP = 1, WRSP = 1, RDSP = 1 */ \
                                            PMMODE = (PMP_MODE16<<10) | (PMP_MODE<<8) | (OPTIMAL_PMP_WAIT_STATES<<2); \
                                            PMAEN = PMP_ADR_PINS; \
                                            PADCFG1bits.PMPTTL = 0; /* Use schmitt trigger input buffers */ \
                                            PMCONbits.PMPEN = 1; \
}while(0)


Desconectado milka28.03

  • PIC10
  • *
  • Mensajes: 6
Re: Stack TCP/IP básico en MplabX. ¿Por donde empiezo?
« Respuesta #26 en: 24 de Septiembre de 2015, 19:56:50 »
En el hardwareprofile.h tienes que añadir un if para tu placa en particular. Por ejemplo, en mi caso:

Código: [Seleccionar]
#if defined(CFG_INCLUDE_HACKERMESH)
#include "Configs/HWP HACKERMESH.h"

La macro CFG_INCLUDE_HACKERMESH, o como quieras llamarla, la defines en Project>Build options>Project>MPLAB Cxxx>Preprocessor macros.

Luego te creas el archivo HW HACKERMESH.h, o como quieras llamarlo, duplicando el que más se parezca de los que vienen con el stack, y en el que tienes que definir los pragmas de tu placa y la frecuencia de trabajo (código 1) y los pines (código 2) (yo también he cambiado al mssp2):
 
Hola estoy configurando el stack para el dspic33ep256mu806, he creado una macro para mi hardware, mi pregunta es como creo el archivo  HW HACKERMESH.h desde el mplab?