TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: redep en 14 de Noviembre de 2008, 10:57:09

Título: Fallo en recepcion de la usart(primer byte solo)
Publicado por: redep en 14 de Noviembre de 2008, 10:57:09
Bueno estoy intentando comunicar dos pic asta ahora lo he medio conseguido pero uno de mis problemas biene cuando envio un cadena y el primer caracter no aparece por ejemplo  si mando"prueba para pic" en el lcd del otro pic me aparece "||rueba para pic" la pe si intercambia por ese simbolo. si os puede ayudar parte de mi codigo es este.Por ultimo cuando pongo por ejemplo WriteUsart(0x10) ponga el numero que ponga no se manda nada mirando en el osciloscopio me di cuenta que poniendo el numero que ponga la secuencia de los dos pulsos es la misma, en cambio con las cadenas van bien.

gracias por adelantado haber si me podriais ayudar con las dos dudas


TX

   TRISA = 0X00;
   TRISB = 0XF0;
   TRISC = 0X80;
   PORTA = 0X00;
   PORTB = 0X00;
   PORTC = 0X00;
   // configuramos el EUSART para 9.6K baudios
   OpenUSART(   USART_TX_INT_OFF &
            USART_RX_INT_OFF &
            USART_ASYNCH_MODE &
            USART_EIGHT_BIT &
            USART_CONT_RX &
            USART_BRGH_HIGH,
            25);
   //esperar a que el buffer de transmisión
   //este vacio o disponible
   while(BusyUSART());
   //envia caracter
   putsUSART(mensaje);
   Delay1KTCYx(250);
Delay1KTCYx(250);
Delay1KTCYx(250);
Delay1KTCYx(250);




RX



   TRISA = 0X00;
   TRISB = 0X00;
   TRISC = 0X80;
   TRISD=0x00;

   PORTA = 0X00;
   PORTB = 0X00;
   PORTC = 0X00;

   // configuramos el LCD
   Inicializa_LCD();
   Comando_LCD(CURSOR_OFF & BLINK_OFF);
   Datos_LCD("tx=");
   Comando_LCD(0XC0);//posicion en el LCD
   Datos_LCD("rx=");

   // configuramos el EUSART para 9.6K baudios
   OpenUSART(   USART_TX_INT_OFF &
            USART_RX_INT_OFF &
            USART_ASYNCH_MODE &
            USART_EIGHT_BIT &
            USART_CONT_RX &
            USART_BRGH_HIGH,
            25);

   //esperar a que el buffer de transmisión
do{   //este vacio o disponible
   while(BusyUSART());
   //esperamos caracter del virtual terminal
   while(!DataRdyUSART());
   getsUSART(recepcion_eco2,13);
   Comando_LCD(0XC3);
   for(i=0;i<=12;i++)
   {
      Dato_LCD(recepcion_eco2);
   }


}   
   while(1);
}
Título: Re: Fallo en recepcion de la usart(primer byte solo)
Publicado por: KALLITOS en 14 de Noviembre de 2008, 12:37:02
Hola, a mi me pasaba eso cuando enviaba por soft, la solucion es iniciar la transmision estando el pin de salida en nivel alto.

saludos.
Título: Re: Fallo en recepcion de la usart(primer byte solo)
Publicado por: redep en 14 de Noviembre de 2008, 16:09:26
Perdone, haber si entendi lo que hiciste es que antes de cada transmision ponias manualmente el bit a 1 de la salida del usart.
Título: Re: Fallo en recepcion de la usart(primer byte solo)
Publicado por: KALLITOS en 14 de Noviembre de 2008, 16:16:03
Lo pongo a 1 cuando trabajo con transmision por software, pero si estas usando el hard, este automaticamente lo hace.
Título: Re: Fallo en recepcion de la usart(primer byte solo)
Publicado por: redep en 15 de Noviembre de 2008, 13:58:26
       bueno buscando mi problema por la red de casualidad encontre el foro en ingles (pagina abajo)que aunke no este muy puesto en el idioma de algo me entero, por lo que lei a no ser que alguien me corriga la libreria de usart de c18 tiene problemas con lo del primer byte.
     
      Me gustaria saber si alguien a logrado comunicar DOS PICS con exito con la libreria usart.
     
      Otra de las opciones que barajo si alguien conoce como hacer una transmision pero sin utilizar la libreria es decir ir poniendo los bits que toquen y la configuracion.


      http://forum.microchip.com/printable.aspx?m=352900

Título: Re: Fallo en recepcion de la usart(primer byte solo)
Publicado por: MLO__ en 15 de Noviembre de 2008, 17:14:15
Hola.

Prueba las siguientes, siempre me han funcionado sin ningun problema:

Código: C++
  1. void Tx (unsigned char byte)
  2. {
  3.         while(!PIR1bits.TXIF)
  4.         continue;
  5.         TXREG = byte;
  6. }
  7.  
  8. unsigned char Rx (void)
  9. {
  10.         while(!PIR1bits.RCIF)  
  11.         continue;
  12.         PIR1bits.RCIF   =       0;
  13.         return RCREG ;
  14. }

La configuracion de la USART la tengo definida de la siguiente manera:

Código: C#
  1. OpenUSART ( USART_TX_INT_OFF    &
  2.                         USART_RX_INT_OFF        &
  3.                         USART_ASYNCH_MODE       &
  4.                         USART_EIGHT_BIT         &
  5.                         USART_CONT_RX           &
  6.                         USART_BRGH_HIGH,
  7.                         25 );

Saludos
Título: Re: Fallo en recepcion de la usart(primer byte solo)
Publicado por: redep en 16 de Noviembre de 2008, 13:39:47
gracias, eso estuve mirando ayer y es muy parecido a lo que as puesto, hasta el lunes no puedo probarlo haber si hoy puedo hacer un par de programas para testearlo el lunes con un lcd y eso.

ya os cuento algo el lunes, gracias de nuevo