Autor Tema: UART y printf  (Leído 6440 veces)

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

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
UART y printf
« 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();
}
"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: UART y printf
« Respuesta #1 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.

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");


Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: UART y printf
« Respuesta #2 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.
"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: UART y printf
« Respuesta #3 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
"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: UART y printf
« Respuesta #4 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.    }

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: UART y printf
« Respuesta #5 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.

"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: UART y printf
« Respuesta #6 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

"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: UART y printf
« Respuesta #7 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..?
 }
control de movimiento

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: UART y printf
« Respuesta #8 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
"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset


 

anything