TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: Milo en 24 de Julio de 2006, 06:51:22

Título: UART y printf
Publicado por: Milo en 24 de Julio de 2006, 06:51:22


Buennasss:

Estoy trabajando con la uart y no consigo hacer que por el terminal me saque algún dato con el printf, sin embargo con con el comando "putsUART2()" de la libreria uart.h si que me deja. El probema que tengo es que me gustaría poder trabajar con el printf por que es mas comodo. El codigo es este y a pesar de que meja compilarlo no me saca nada por el terminal.

void escribe_uart(void)
{

   char Txdata[] = {'R','e','s','u','l','t','a','d','o',' ','A','D','C',':','\0'};
   unsigned int baudvalue;         
   unsigned int U2MODEvalue;      
   unsigned int U2STAvalue;      

            
   CloseUART2();               
   ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR6 & UART_TX_INT_DIS & UART_TX_INT_PR2);

   
   baudvalue = 191;   
   U2MODEvalue =    UART_EN & UART_IDLE_CON & UART_RX_TX &
                                                UART_DIS_WAKE & UART_DIS_LOOPBACK &
         UART_DIS_ABAUD & UART_NO_PAR_8BIT &
         UART_1STOPBIT;

   U2STAvalue =    UART_INT_TX_BUF_EMPTY &
         UART_TX_PIN_NORMAL &
         UART_TX_ENABLE & UART_INT_RX_3_4_FUL &
         UART_ADR_DETECT_DIS &
         UART_RX_OVERRUN_CLEAR;

   OpenUART2(U2MODEvalue, U2STAvalue, baudvalue);
   printf ("Resultado");   

/*  ESTE CODIGO SI QUE ME SACA LOS DATOS POR EL TERMINAL
                putsUART2 ((unsigned int *)Txdata);
   while(BusyUART2());   
   
   WriteUART2(0x55);
                while(BusyUART2());
*/

   CloseUART2();
}
Título: Re: UART y printf
Publicado por: Nocturno en 24 de Julio de 2006, 08:28:30
Hola Milo,

si te sirve de ayuda, utilicé printf a secas en C30 con un dsPIC en el ejemplo que utilicé para mostrar la Librería para Display de Nokia 3310 con C30 y dsPIC (http://www.elrebujito.es/modules.php?name=News&file=article&sid=60&mode=&order=0&thold=0).

Como muestra, un botón, mira lo que obtiene este trozo de código:

Código: C++
  1. printf("Libreria para ");
  2.         printf("LCD Nokia 3310");
  3.         printf("con dsPIC/C30 ");
  4.         printf("              ");
  5.         printf("          2005");
  6.         printf("      Nocturno");

(http://www.elrebujito.es/images/nokia%201-intro.jpg) (http://www.elrebujito.es/modules.php?name=News&file=article&sid=60&mode=&order=0&thold=0)
Título: Re: UART y printf
Publicado por: Milo en 25 de Julio de 2006, 05:28:56


Gracias Nocturno, pero sigo sin hacerlo funcionar, seguiré mirando por ahí a ver si lo soluciono, ¿podría ser que el printf solo funcione con la UART1 o que no este configurado para la UART2?, probaré a ver si con la UART1 del dspic que estoy utilizando me funciona, ya diré algo por si alguien llega a tener el mismo problema.

Un saludo,
Milo.
Título: Re: UART y printf
Publicado por: Milo en 26 de Julio de 2006, 04:23:25


Buennass,

No he podido comprobar aún el que no me muestre los datos con el printf por la UART1, probaré esta tarde. Lo que si he hecho ha sido pasarle el problema a los del Microchip Support, lo que pasa es que seguramente tarden un poco en contestarme pues al parecer estan haciendo un master y hasta el 28 de julio no vuelven ha si que ya te ponen de antemano que no tengas prisa, que tardaran. Voy a poner aquí el enlace por si alguien que no lo supiese le interesa, te resuelven la duda pero tienes que estar registrado y además escribirles en ingles, creo, yo de momento no he probado en castellano, esta es la dirección

http://support.microchip.com

Un saludo,
Milo
Título: Re: UART y printf
Publicado por: Nocturno en 26 de Julio de 2006, 04:29:07
Disculpa que insista, pero no entiendo porqué no te funciona.
En mi programa sólo ejecuto esta función y luego puedo usar los printf por el terminal sin problemas:

Código: C++
  1. void InicializaUART()
  2.    {
  3.         unsigned int baudvalue;
  4.         unsigned int U1MODEvalue;
  5.         unsigned int U1STAvalue;
  6.  
  7.         CloseUART1();
  8.  
  9.         ConfigIntUART1(UART_RX_INT_DIS & UART_RX_INT_PR6 & UART_TX_INT_DIS & UART_TX_INT_PR2);
  10.  
  11.         baudvalue = (int)(((float)MIPS * 1000.0)/(16.0*38400))-1;
  12.  
  13.         U1MODEvalue = UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_ABAUD &
  14.         UART_DIS_LOOPBACK & UART_ODD_PAR_8BIT & UART_1STOPBIT;
  15.  
  16.         U1STAvalue = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_DISABLE &
  17.         UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
  18.  
  19.         U1MODEvalue = UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT;
  20.         U1STAvalue  = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
  21.  
  22.         OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
  23.    }
Título: Re: UART y printf
Publicado por: Milo en 26 de Julio de 2006, 07:37:17
Hola Nocturno:

No te preocupes por insistir, es lo suyo, además te lo agradezco.

El problema que tengo no es de la configuración del modulo de la USART, tu configuración y la mia es casi igual, cambia el baudrate, que es normal pues tu utilizarás un XT de un valor y un determinado multiplicador (PLL) y yo utilizo uno de 7,3728 Mhz con un x16 en el PLL, además si fuera de la configuración yo no podría sacar datos con los comandos de la librería uart.h, como el writeUART2() y putsUART2(), lo que pasa es que pongo un printf, y el programa lo ignora, solo puedo sacar datos con esos dos comandos de la librería.

Entonces lo que quiero probar ahora es si en vez de utilizar la UART2 de mi dspic 30f3013  utilizo la UART1 y consio que me saque algo con el printf por el terminal.

Un saludo,
Milo.

Título: Re: UART y printf
Publicado por: Milo en 11 de Diciembre de 2006, 05:34:21

Buennass:

Otro problema solucionado, Las versiones antiguas del C30 no contemplaban la utilización del printf de los 2º módulos de la UART o UART2 de los dsPICs, la versión mas reciente del C30, la de la web, student version, ya lo soporta solo hay que redeclarar un entero

extern int __C30_UART;         //Para la utilización de la USART2

y luego dentro poner que vas a utilizar el modulo de la uart2


__C30_UART=2;            //Le digo que voy a utilizar la usart

Título: Re: UART y printf
Publicado por: Renatox_ en 19 de Enero de 2007, 21:01:50
 hola, yo también he probado con la sentencia printf(); y no compila mi programa, compila cuando reemplazo el printf();
por el putsUART1(char);

 Que versión del C30 es la que puede manejar el printf, me parece que es importante utilizarla porque te permite hacer lo siguiente con el módulo usart, al menos a si lo es con el ccs.

include  <math.h>
int main(void)
 {
   configUSART1();    Esta subrutina configura el módulo USART1.
   float x,y;
   x=-0.25;
   y=asinf(x);
   printf("el arcsin de %f es %f",x,y);
   // Nocturno esto puedes hacer con la versión del C30 que tienes..?
 }
Título: Re: UART y printf
Publicado por: Milo en 22 de Enero de 2007, 05:57:56

Echale un vistazo a esto, esta en el foro


http://www.todopic.com.ar/foros/index.php?topic=13152.0 (http://www.todopic.com.ar/foros/index.php?topic=13152.0)