TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: elgarbe en 17 de Abril de 2016, 22:37:24

Título: programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 17 de Abril de 2016, 22:37:24
Hola, estoy colabornado en un proyecto open source con ese dsPIC y la verdad que no tengo idea sobre la programacion del mismo. Estaba trabajando en portar el firmware a stm32...
El tema es que hice una placa con ese dsp y necesito probar las 2 uart a 57600. digamos enviar y recibir una serie de datos pero a esa velocidad.
hay algun template de configuracion de oscillador e inicializacion de las uarts? librerías?

gracias
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 05:55:04
MM no se, pero tenes las librerias de los perifericos ?, Ahora hay que bajarlos aparte a los mismos

http://www.microchip.com/mplab/compilers

Y tambien tenes ahi el MPLAB Code Configurator que imagino que es una especie de CubeMX para ST
Mas info del MCC

http://microchip.wikidot.com/mplabx:mcc
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 08:25:04
el MCC no soporta los dsPIC!! jaja

tendría que ver aunque sea como configurar el reloj para arrancar.
ya estoy investigando un poco el tema, pero viene muyyy lentoooo

sds!
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 08:44:24
No me di cuenta que solo decia 24F, Bueno al menos tenes la libreria :P te va a ser mas facil... creo..

Si podes decir un poco mas sobre que frecuencia de entrada tenes, que frecuencia de salida , los baudios ya lo dijiste, solo quedaria eso nomas :P

EDIT: Acabo de ver la libreria y nada sobre el oscilador , ahi te paso un codigo para configurar el oscilador que tengo de otro dsPIC (en el comentario esta como se calcula )


Código: C
  1. void Configuracion_Oscilador(void)
  2. {
  3.     /*
  4.      *  Hay limites de frecuencias a cumplir en cada paso.
  5.      *  7.37Mhz Frc interno , entrada de frecuencia se cumple 0.8Mhz 8.0Mhz
  6.      *  Fin * M/N1 = Fvco = 158Mhz tambien se cumple , 120 a 340 Mhz
  7.      *  Fsalida = Fvco / N2 = 79.22Mhz  cumple con lo establecido, 15 a 120Mhz
  8.      */
  9.    
  10.     PLLFBD = 41;                // M = 43 , observa que se le suma 2 a cada registro para generar los valores M,N1 y N2
  11.     _PLLPOST = 0;     // N1 = 2
  12.     _PLLPRE = 0;      // N2 = 2
  13.    
  14.     __builtin_write_OSCCONH(0x01);              // Nuevo oscilador en FRC con PLL, Aca cambiar segun se necesite al nuevo tipo de oscilador en caso de ser necesario.
  15.     __builtin_write_OSCCONL(OSCCON | 0x01);     // Activo el bit para el cambio de oscilador
  16.    
  17.     // Esperamos el cambio de clock, es decir cuando el oscilador actual pase a ser de FRC a  FRC con PLL, el cual el valor es 001 para FRC con PLL
  18.     while (_COSC != 0b001);
  19.    
  20.     // Esperamos al PLL que se enganche
  21.     while (_LOCK != 1);
  22. }

Recorda que el PIC ese tiene 40MIPS, es decir a 80Mhz maximo puede ir.

Respecto a la UART, como te decia pasame la frecuencia que vas a trabajarlo + pines y te intento pasar el codigo. Ademas si es necesario interrupcion cuando el buffer esta lleno o apenas recibis un caracter. entre otras verduras mas :P

falta el include uart.h que viene con las librerias obviamente y configurar correctamente los baudios.

Código: C
  1. void Configuracion_UARTs(void)
  2. {
  3.    
  4.     uint16_t baudvalue;  
  5.     uint16_t UMODEvalue;
  6.     uint16_t USTAvalue;
  7.    
  8.     CloseUART1();       // Solo por si acaso fue un reset
  9.     CloseUART2();
  10.    
  11.     /*
  12.      * Configuracion de las interrupciones, habilitadas/deshabilitadas
  13.      * y prioridades de las mismas
  14.      */
  15.    
  16.     ConfigIntUART1(UART_RX_INT_EN & UART_RX_INT_PR6 &
  17.                    UART_TX_INT_EN & UART_TX_INT_PR6);
  18.     ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR6 &
  19.                    UART_TX_INT_EN & UART_TX_INT_PR6);        
  20.    
  21.     /*
  22.      * Configuracion de la UART,
  23.      *
  24.      * UxMODE Register:
  25.      * UART_EN : UART habilitada
  26.      * UART_IDLE_CON : Modo de operacion continua en Idle
  27.      * UART_DIS_WAKE : Deshabilitado el Wake-Up por medio de la UART
  28.      * UART_DIS_LOOPBACK: Deshabilito el Loopback, bueno para test, cambiar DIS por EN
  29.      * UART_DIS_ABAUD : Deshabilitado el Auto-Baud
  30.      * UART_NO_PAR_8bit : Sin paridad y 8 bits
  31.      * UART_1STOPBIT : 1 bit de stop
  32.      * UART_IrDA_DISABLE: Desativa la codificacion IrDA
  33.      * UART_UEN_00 : Pines RX y TX usados por el modulo, los demas ( CTS,RTS por el usuario )
  34.      * UART_BRGH_FOUR : High Baud Rate Generator activado
  35.      * UART_MODE_SIMPLEX : Modo Simple sin control de Flujo
  36.      *
  37.      * UxSTA Register:
  38.      * UART_INT_TX_BUF_EMPTY : Interrupcion generado cuando se vacia el buffer
  39.      * UART_IrDA_POL_INV_ZERO : Idle state la salida esta en 0 (al no estar habilitado IrDA se refiere a UxTX )
  40.      * UART_TX_ENABLE : Activamos el Transmisor
  41.      * UART_INT_RX_CHAR : Definimos que el flag se ponga a 1 por cada char que entre, otras opciones 3/4 o full
  42.      * UART_ADR_DETECT_DIS: Deshabilitamos la deteccion de direccion ( aunque con 8 bits no funciona )
  43.      * UART_RX_OVERRUN_CLEAR : Limpiamos el bit de Overrun por si las dudas
  44.      */
  45.    
  46.     UMODEvalue = UART_EN & UART_IDLE_CON &
  47.                   UART_DIS_WAKE & UART_EN_LOOPBACK  &
  48.                   UART_EN_ABAUD & UART_NO_PAR_8BIT  &
  49.                   UART_1STOPBIT & UART_IrDA_DISABLE &
  50.                   UART_UEN_00 & UART_BRGH_FOUR &
  51.                   UART_MODE_SIMPLEX;
  52.    
  53.     USTAvalue  = UART_INT_TX_BUF_EMPTY  & UART_IrDA_POL_INV_ZERO &
  54.                   UART_TX_ENABLE & UART_INT_RX_CHAR &
  55.                   UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
  56.    
  57.     baudvalue = 5;
  58.    
  59.     OpenUART1(UMODEvalue,USTAvalue,baudvalue);
  60.     OpenUART2(UMODEvalue,USTAvalue,baudvalue);
  61. }

Calculo del baudrate:

BRGH alta velocidad:

Baudios = \frac{F_p}{4 * (UxBRG + 1)}

BRGH velocidad standard:

Baudios = \frac{F_p}{16 * (UxBRG + 1)}

Fp es la señal de reloj que entra, es decir Fosc / 2 , en estos PIC ( los de 16 bits ) el Clock es dividido por 2 y no 4 como en sus antecesores.
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 10:01:32
uuuu, me ahorraste 1 año de estudio mas o menos  :D

Tengo un cristal de 8MHz y el proyecto original trabaja a 16MIPS, podes sacar de ahí las configuraciones?

gracias!
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 10:06:25
te paso parte del codigo de configuracion en el proyecto original a ver si te sirve:

Código: C
  1. _FOSCSEL(FNOSC_PRIPLL); // pri plus PLL (primary osc  w/ PLL)
  2. _FOSC(FCKSM_CSDCMD &
  3.       OSCIOFNC_OFF &
  4.       POSCMD_XT);
  5. // Clock switching on startup is enabled, starts with fast RC.
  6. // Clock switching after startup is disabled.
  7. // Fail-Safe Clock Monitor is disabled.
  8. // OSC2 pin has clock out function.
  9. // Primary Oscillator XT mode.
  10. _FWDT(FWDTEN_OFF &
  11.       WINDIS_OFF);
  12. _FGS(GSS_OFF &
  13.      GCP_OFF &
  14.      GWRP_OFF);
  15. _FPOR(FPWRT_PWR1);
  16. _FICD(JTAGEN_OFF &
  17.       ICS_PGD2);

Código: C
  1. #if (MIPS == 16)
  2. #warning 16 MIPS selected
  3.         CLKDIVbits.PLLPRE = 0;  // PLL prescaler: N1 = 2 (default)
  4.         CLKDIVbits.PLLPOST = 1; // PLL postscaler: N2 = 4 (default)
  5.         PLLFBDbits.PLLDIV = 30; // FOSC = 32 MHz (XTAL=8MHz, N1=2, N2=4, M = 32)
  6.  
  7. #endif // MIPS
  8.         CLKDIVbits.PLLPOST = 0;     // N1 = 2
  9.         CLKDIVbits.PLLPRE = 0;      // N2 = 2
  10.         OSCTUN = 0;
  11.  
  12.         // Initiate Clock Switch to Primary Oscillator with PLL (NOSC= 0x3)
  13.         __builtin_write_OSCCONH(0x03);
  14.         __builtin_write_OSCCONL(0x01);
  15.         while (OSCCONbits.COSC != 0x3);     // Wait for the Primary PLL to lock
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 10:22:43
La uart2 esta en los pines 49-50. La uart 1 esta en 51-52.

El tema es que estoy teniendo un problema de comunicacion en mi placa. La uart2 me funciona a 57600 sin problemas, pero la uart1 me funciona a 4800, pero a velocidades mayores no. El tema es que es u proyecto abierto y a todos le funciona bien. Entonces es probable que sea algun problema mío, o de la placa o de las conexiones. Pero para descartar cosas quiero probar con un simple firmware que haga trabajar como sea a las 2 uarts a 57600 a la vez y chequear que la comunicacion no falla. Quizá podría conectar 2 FTDI en las uarts y probar de enviar un archivo por una terminal y recivirlo en la otra y viceverza.... será complicado?
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 10:34:45
16 MIPS son 32Mhz de salida del oscilador ( siguiendo la politica de 1 Fcy = 1 instruccion )

Elegimos un N2 que para que de entre 120 y 340Mhz, supongamos N2 = 8 y por lo tanto _PLLPRE = 3 ( opciones N2 son 2, 4 y 8, que son valores PPLPRE 0, 1 y 3 respectivamente )

32Mhz * N2 = Fvco = 256Mhz

256Mhz / 8 Mhz = M/N1 = 32

N1 = 2 y M = 64

Rango de N1: 2 a 33
Rango de M: 2 a 513

Por lo tanto..

Código: C
  1. PLLFBD = 62;       // M = 64
  2.     _PLLPOST = 0;     // N1 = 2
  3.     _PLLPRE = 3;      // N2 = 8

Esto te va a dar una Fp de 16Mhz, que si pasara directamente a la CPU serian 16 MIPS, en fin el codigo que posee es correcto igual

  pero.... mas adelante

------------------------------------

Ahora el tema es que la CPU ademas del divido 2 tiene una division mas por adelante. El tema es que no se a ciencia exacta como es para modificarlo. Ya que los bits del DOZE ( el que controla la division ), solo se pueden modificar cuando el bit DOZEN es 0, y para ponerlo en 0 a ese bit hay que activar el bit ROI, este bit solo actua en la interrupcion. Esto solo afecta al nucleo y no a los perifericos!

Sino vas a tener que poner

Código: C
  1. _ROI = 1;

Y apenas entre a la primer interrupcion la CPU va a tener ya los 16Mhz al igual que los puertos. No le encontre otra forma de desactivarlos.


La uart2 esta en los pines 49-50. La uart 1 esta en 51-52.

El tema es que estoy teniendo un problema de comunicacion en mi placa. La uart2 me funciona a 57600 sin problemas, pero la uart1 me funciona a 4800, pero a velocidades mayores no. El tema es que es u proyecto abierto y a todos le funciona bien. Entonces es probable que sea algun problema mío, o de la placa o de las conexiones. Pero para descartar cosas quiero probar con un simple firmware que haga trabajar como sea a las 2 uarts a 57600 a la vez y chequear que la comunicacion no falla. Quizá podría conectar 2 FTDI en las uarts y probar de enviar un archivo por una terminal y recivirlo en la otra y viceverza.... será complicado?

Tal ves sea mejor crear un pequeño firmware simple con el Loopback activo ( es decir RX y TX unidos internamente ) y en la interrupcion contar la cantidad de datos que llegaron, si coinciden o estan proximos ( UART1 y 2) es que van a la misma velocidad, es lo mas simple que se me ocurre. Despues si queres lo sacas hacia afuera por la UART, cuando activas el loopback el pin de RX se desconecta de la UART. Solo queda el pin de TX activo, y ese podrias usar para enviar a la PC por ejemplo.

Si usas la misma configuracion para las 2 UARTs no deberia existir ningun problema y tene en cuenta esto:

http://ww1.microchip.com/downloads/en/DeviceDoc/80446f.pdf

ya que ese dsPIC se ve que fue reemplazado por el dsPIC33FJ256GP710A

El unico ue me preocupa es:

Citar
9. Module: UART
UART receptions may be corrupted if the Baud Rate Generator is set up for 4x mode (BRGH = 1).

Work around

Use the 16x baud rate option (BRGH = 0) and adjust the baud rate accordingly.

Y si lo tuyo es MatrixPilot, observa que usa la formula de alta velocidad BRGH = 1.

Código: C
  1. #if defined (__dsPIC33F__)
  2. #undef BAUDRATEREG
  3. //#define UDB_BAUD(x) ((int16_t)((FREQOSC / CLK_PHASES) / ((int32_t)4 * x) - 1))
  4. #define BAUDRATEREG ((int16_t)((FREQOSC / CLK_PHASES) / ((int32_t)4 * BAUDRATEX) - 1))
  5. #endif
  6.  
  7. #define _INIT(x, y) \
  8. void Init(void) \
  9. { \
  10.         U##x##BRG = BAUDRATEREG; \
  11.         U##x##MODE = 0; \
  12.         U##x##MODEbits.BRGH = BRGHX; \
  13.         U##x##STA = 0; \
  14.         U##x##MODEbits.UARTEN = 1; \
  15.         U##x##STAbits.UTXEN = 1; \
  16.         IFS##y##bits.U##x##RXIF = 0; \
  17. }
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 11:16:47
ok, voy a probar lo que me pasaste.

El dsPIC original es el A, yo por error compré el que no termina con A.
Por lo que vi en el pdf que pasaste es que no hay error solo de la uart1 (la que me esta fallando) sino que son problemas que aplican a las 2 uarts.

saludos
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 12:33:49
Por lo que vi en el pdf que pasaste es que no hay error solo de la uart1 (la que me esta fallando) sino que son problemas que aplican a las 2 uarts.

Debo recalcarte el "may" del datasheet, puede que si y puede que no xD. Pero eso no te modificaria la cantidad de baudios, sino posibles problemas en la recepcion.
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 13:38:54
me pasarías un main.c con los includes y fuses así pruebo?

gracias!
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 14:25:48
Dame un tiempo que lo hago.

EDIT:

https://drive.google.com/open?id=0B1v4IhprZLsqOUUzN0VwZzBMSnc

Esta un poco rebuscado... pero bueno, imagino que debe de hacerlo de forma correcta.

Explico un poco el tema. Puse en RB0 una salida cada medio segundo, para indicar su funcionamiento nada mas.
Se configura el oscilador, se configura las UART en LOOPBACK, es decir la recepcion esta "desconectada", procedo a enviar inicialmente 4 valores a cada UART.

La interrupcion se genera cada 3 datos recibidos ( de 4 lugares en el buffer, aunque recien me acuerdo que es necesario borrar el bit de overrun cada tanto segun el errata ), recibe los 3 datos y procedo a enviar otros 3 datos mas. aumentado el indice de lo enviado.

Esto es igual para ambas UART, cualquiera de ellas que llegue primero a los 30000 datos enviados, sea cual sea, procede a deshabilitar todas las interrupciones y salir. De esa forma no se le envia nada mas a las UARTs y no se incrementan los contadores.

Finalmente en el main pregunto si se llego a los 30000 datos y aprovecho la UART1 para empezar a enviar la diferencia entre los 2 contadores. Le puse 10 lugares solo por exagerado ya que deberia detener cuando cualquiera sea mayor a 30000, y no necesitaria mas de 6 lugares. La funcion utoa (unsigned to ascii) fue sacada del source que provee Microchip para xc8. La copie para que no tengas problemas buscandola.

Solo necesitas la libreria de perifericos de dsPIC ( 17Mb ) que te habia pasado antes.
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 14:49:14
sin apuro, recien comenté la errata sheet y esto me dijeron:

"Leonardo,
Item 19 on the errata sheet applies to mp firmware. It explains why you are having trouble with the uart. We are using the 4x mode, it is the only way to get the baud rates we want with the clock rates that we are using.
Bill"

así que es muy probable que sea por no usar el 710A. de todos modos me gustaría probarlo en algún momento.

gracias!
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 16:03:23
Citar
"Leonardo,
Item 19 on the errata sheet applies to mp firmware. It explains why you are having trouble with the uart. We are using the 4x mode, it is the only way to get the baud rates we want with the clock rates that we are using.
Bill"

Si pero con 16x se puede lograr un baudrate aproximado... aunque la diferencia es algo asi de 900 baudios (58523 baudios, un error de 0.21% ), esta escrito en main.c

A no ser que modifique el valor del PLL para que la frecuencia de salida del mismo provoque menos error en el mismo. Cualquier cosa me avisas y lo hago, es solo modificar los 3 registros esos, te paso los numeros y listo, o lo calculas vos, como quieras. Eso si, no van a ser 16MIPS tal ves.. pero te vas a sacar las dudas de al menos eso.
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 16:21:48
Citar
"Leonardo,
Item 19 on the errata sheet applies to mp firmware. It explains why you are having trouble with the uart. We are using the 4x mode, it is the only way to get the baud rates we want with the clock rates that we are using.
Bill"

Si pero con 16x se puede lograr un baudrate aproximado... aunque la diferencia es algo asi de 900 baudios (58523 baudios, un error de 0.21% ), esta escrito en main.c

A no ser que modifique el valor del PLL para que la frecuencia de salida del mismo provoque menos error en el mismo. Cualquier cosa me avisas y lo hago, es solo modificar los 3 registros esos, te paso los numeros y listo, o lo calculas vos, como quieras. Eso si, no van a ser 16MIPS tal ves.. pero te vas a sacar las dudas de al menos eso.

Pensé que cuando supieran que el error era por haver comprado mal el dsPIC me iban a mandar al demonio, x q hace un tiempo que estamos luchando con este tema, pero no. A la noche me pasan un parche (si es que se puede) para, justamente como vos decis, pasar a 16x pero reviendo el tema de los MIPS y demás. El problema es que hay varias cosas que dependen de los MIPS, entonces creo que tiene que ser 16, 32 o 40 MIPS ya que algunos cálculos y tiempos salen de usar alguno de esos MIPS...
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 16:26:52
Mmm complicado el tema...

Pero usandolo a Fp=32Mhz ( Salida del PLL 64Mhz = Fosc ) te queda al cargar el registro del baudrate con 34, y tenes un baudrate de 57142 que es mucho mas proximo a 57600 que el anterior. Quedando esta ves un error de 0.08% ( 458 baudios de diferencia )

Para tener un punto de comparacion:

Fp = 16 Mhz, usando 4x, BGR = 68 => 57971 baudios, 371 baudios de error ( 0.06% )
Fp = 32 Mhz, usando 4x, BGR = 138 => 57553 baudios, 46 baudios de error ( 0.008% )

No esta tan lejos el de 16x al de 4x con 16Mhz ( 16 MIPS ),

Podrias seguir usando la CPU en 16MIPS si es que modifican el DOZE a 1:2

Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 18:46:37
mmm, no entendí esta parte... como sería el caso para usar 16x?
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 19:04:25
x16 seria la "velocidad estándar"... sino la alta velocidad es cuando activas el bit BGRH, y la formula de los baud rate, en ves de dividirse por 16 se hace por 4. Este es el caso que usan en tu proyecto. Pero por el errata hay que limitarse a solo el de la velocidad estandar, es decir que la formula se calcula con el 16, por eso el x16
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 21:42:22
ahi me pasaron los cambios. Si no veo mal pasaron a 32 MIPS, deshabilitaron el BGRH y la macro que calcula el U1BRG :

Código: C
  1. #define UDB_BAUD(x) ((int16_t)((FREQOSC / CLK_PHASES) / ((int32_t)4 * x) - 1))
a
Código: C
  1. #define UDB_BAUD(x) ((int16_t)((FREQOSC / CLK_PHASES) / ((int32_t)16 * x) - 1))

y lo usan así:

Código: C
  1. void udb_gps_set_rate(int32_t rate)
  2. {
  3. #if (CONSOLE_UART != 1)
  4.         U1BRG = UDB_BAUD(rate);
  5. #endif
  6. }

lo mismo que vos comentaste  :P
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 21:49:02
por cierto, cada vez que editas un mensaje, me salteo lo que agregas casi siempre, ya que no me llega notificacion de mensaje nuevo. recien estuve releyendo y veo que ya me mandaste el proyecto para probar, antes no lo habia visto!

saludos!
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 18 de Abril de 2016, 22:22:53
por cierto, cada vez que editas un mensaje, me salteo lo que agregas casi siempre, ya que no me llega notificacion de mensaje nuevo. recien estuve releyendo y veo que ya me mandaste el proyecto para probar, antes no lo habia visto!

Yo era para no crear otro post siendo yo el ultimo.
Si, por lo que veo solo le cambiaron la formula, la cual corresponde a la de "baja velocidad" ( por eso el 16 en el denominador ) o que es lo mismo que el BGRH en 0.

Recorda que en estos PICs el nucleo puede ir a diferente frecuencia que los perifericos. Asi que por mas que FREQOSC sea de 32Mhz puede que al nucleo este entrado menos frecuencia y estes trabajando a 16Mhz por ejemplo.
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: elgarbe en 18 de Abril de 2016, 23:22:15
Bueno, ahi probe lo que me pasaron y funciona de 10.
Me deja mucho mas tranquilo que no haya sido un problema de harware, tipo ruteo o ruido o ground loop.

estaba pensando que te debo a vos la solucion porque yo ya me habia olvidado del tema que mi dsp era 710 y no 710A y fuiste vos quien trajo la errata sheet-

Gracias KILLER!!!!
Título: Re:programa para testear 2 uart en DSPIC33FJ256GP710-I/PF
Publicado por: KILLERJC en 19 de Abril de 2016, 05:22:43
estaba pensando que te debo a vos la solucion porque yo ya me habia olvidado del tema que mi dsp era 710 y no 710A y fuiste vos quien trajo la errata sheet-

Gracias KILLER!!!!

De nada aunque yo no hice nada, cuando fui a seleccionar los dsPIC en el MPLAB aparecieron los 2, y luego cuando fui a buscar su datasheet me encuentro con un mensaje gigante que decia que no era recomendado para nuevos productos, lo cual sinceramente me parecio raro, fue ahi que me di cuenta el por que habia salido el 710A, y pense directamente en las erratas.