Autor Tema: Fallo en recepcion de la usart(primer byte solo)  (Leído 2318 veces)

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

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Fallo en recepcion de la usart(primer byte solo)
« 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);
}

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Fallo en recepcion de la usart(primer byte solo)
« Respuesta #1 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.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: Fallo en recepcion de la usart(primer byte solo)
« Respuesta #2 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.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Fallo en recepcion de la usart(primer byte solo)
« Respuesta #3 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.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: Fallo en recepcion de la usart(primer byte solo)
« Respuesta #4 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


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Fallo en recepcion de la usart(primer byte solo)
« Respuesta #5 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
El papel lo aguanta todo

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: Fallo en recepcion de la usart(primer byte solo)
« Respuesta #6 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


 

anything