Autor Tema: Ayuda!!! no me funciona uart de pic a pic  (Leído 3642 veces)

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

Desconectado mac218

  • PIC10
  • *
  • Mensajes: 5
Ayuda!!! no me funciona uart de pic a pic
« en: 15 de Diciembre de 2010, 23:35:55 »
Hola!!!

Soy nuevo en el foro, siempre me habia basado en el para tomar informacion y solucionar algunos problemas que he tenido, pero ahora no he podido encontrar alguien que haya tenido un problema similar o algo parecido, mi problema es el siguiente:

Necesito comunicar dos pics (18f4550) atraves del uart o usart, para mandar una lectura del adc del primer pic al segundo, el problema es que nisiquiera me funciona un programa simple para observar el envio de un numero del primer pic al segundo y poder visualizarlo en un lcd, no se mucho de pics solo lo basico, es por eso que a lo mejor no he podido solucionarlo, programo en C y los programas de los pics son los sig:

PROGRAMA DEL PIC EMISOR:

Código: [Seleccionar]
#include <18f4550.h>
#fuses XT,NOWDT,NOPROTECT
#use delay (clock=4000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
#include <lcd.c>


void main()
{
   int valor;
   lcd_init();
   
   while(1)
   {
      for(valor=0;valor<=10;valor++)
      {
         PUTC(valor);
         printf(lcd_putc,"\fEnviando=%1D",valor);
         delay_ms(500);
      }
   }
}

PROGRAMA DEL PIC RECEPTOR:

Código: [Seleccionar]
#include <18f4550.h>
#fuses XT,NOWDT,NOPROTECT
#use delay (clock=4000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,parity=N,bits=8)
#include <lcd.c>
#BYTE TRISA=0X85
#BYTE PORTA=0X05


int valor;
#int_RDA
void RDA_isr(void)
{
   valor=GETC();
}

void main()
{
   bit_clear(TRISA,0);
   enable_interrupts(int_RDA);
   enable_interrupts(global);
   lcd_init();
   
   for(;;)
   {
      lcd_gotoxy(1,1);
      printf(lcd_putc,"Recibiendo=%1D",valor);
      }
}

Al simularlo en el proteus si me funciona, pero al hacerlo en fisico no pasa nada, el lcd del receptor solo se queda en "Recibiendo=0" pero no hace nada mas, si me pudieran ayudar se los agradeceria, ya que solo me hace falta la comunicacion de los pics y poder tratar de sustituir los cables por modulos XBee. Gracias de antemano

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #1 en: 16 de Diciembre de 2010, 01:25:27 »
Yo aqui cambiaria esta linea 
Código: [Seleccionar]
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,parity=N,bits=8) por  esta #use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
los dos pic deben tener las misma caracteristica en este punto.

Saludos

Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #2 en: 16 de Diciembre de 2010, 05:59:58 »
Hola a todos

En principio parece que deberia de funcionar, en estos casos el problema suele ser alguna tonteria.
de todas formas, algunas sugerencias:

- Revisa las conexiones fisicas de los cables, y sobretodo comprueba que el pin xmit de un pic va al pin rcv del otro pic, y biceversa
- Es conveniente poner algun delay_ms() antes de nada para dar tiempo a los PIC's a estabilizarse.
- El tiempo que el PIC emisor esta emitiendo es pequeño, asegurate que el PIC receptor esta operativo antes que el emisor.
- La int. rda solo funciona con la uart fisica de los PIC. No tengo aqui el datasheet, aunque parece que los pines asignados son los correctos.
- En la documentacion del CCS, se aconseja utilizar kbhit() junto con getc() , ademas es conveniente usar una variable en la int.
que te indique que se ha recibido un dato, asi en el bucle principal podras utilizar esta para mostrar el dato (u otra cosa) solo cuando sea
necesario y no de forma continua:

Código: [Seleccionar]
int1 recibido=0;
#int_RDA
void RDA_isr(void)
{
    if(kbhit())
    {
          valor=GETC();
          recibido=1
     }
}
y en el bucle principal

Código: [Seleccionar]
for(;;)
   {
    if(recibido)
    {
         lcd_gotoxy(1,1);
         printf(lcd_putc,"Recibiendo=%1D",valor);
         recibido=0;
     }
     }

- Dentro del #use rs232() puedes utilizar la instruccion ERROR, que te limpiara el buffer y te desbloqueara la uart.
- Tambien es interesante la nueva instruccion TIMEOUT que te permite asignarle un tiempo de espera limitado para que getc()
no se quede en espera indefinidamente.

Son solo algunos consejos, que seguramente ya sabrias, pero de todas formas espero te sirvan de algo

saludos :-)

Desconectado mac218

  • PIC10
  • *
  • Mensajes: 5
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #3 en: 16 de Diciembre de 2010, 16:30:32 »
Antes que nada muchas gracias por tomarse tiempo para atender mi problema, como dije anteriormente no se mucho de programcion en pic solo tengo un poco de nocion, pero voy empezando, aplicare los consejos que me dan y les avisare cuales fueron los resultados, gracias!!!!

Desconectado mac218

  • PIC10
  • *
  • Mensajes: 5
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #4 en: 16 de Diciembre de 2010, 17:47:16 »
Les comento que realice los consejos que me dieron pero el problema sigue igual, el display solo me muestra "recibiendo=0" revise los cables del xmit y rcv y estan bien, la unia cosa que sospecho seria que fuera alguna falla del proto, cambiare el circuito a un nuevo proto a ver que resulta, pero agradeceria si me dieran otros tips. De antemano Muchas Gracias!!!!

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #5 en: 16 de Diciembre de 2010, 18:16:47 »
Podrias postear el esquema tal como lo tienes conectado en el Proto??

Tal vez podamos ayudarte mas al respecto si lo posteas.

Supongo que en el circuito estan ambos Circuitos integrados adaptadores de nivel, estilo MAX232, ya que de otro modo esa sentencia #use rs232 esta mal planteada.
De conectarlo en directo, de pic a pic, deberas agregarle invert, para lograr una comunicacion.

Es posible que en Proteus te funcione sin poner esa instruccion, pero en la realidad no funciona si no la tiene... :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado mac218

  • PIC10
  • *
  • Mensajes: 5
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #6 en: 16 de Diciembre de 2010, 22:35:12 »
MGLSOFT gracias por tu ayuda, pero al agregar invert a la sentencia del #use rs232 me da un error al compilar "USE parameter value is out of range H/W USART can not invert"

En un rato subo el esquema tal como lo tengo en el proto, pero no tengo conectados los max232, crei que no los necesitaba. Gracias.

Aqui esta el esquema tal como lo tengo en el proto, mas la conexion de alimentacion por supuesto, pero que el proteus omite.

« Última modificación: 16 de Diciembre de 2010, 23:16:24 por mac218 »

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #7 en: 17 de Diciembre de 2010, 00:13:05 »
Te pido disculpa en los cambios que te dije , estoy viendo en el codigo ahora mismo en el libro y cuando tenga tiempo lo voy a comparar con tl tuyo, siendo asi nunca me han fallados los ejemplos de ese libros
 y no olvide poner la resistencia(10K y +5Voltio) en el MCLR/VPP/THV si lo tiene montado en fisico. otras cosas no olvide que uno envia.
voy a probrarlo y luego nte digo.


Saludos


Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #8 en: 17 de Diciembre de 2010, 05:08:09 »
Hola a todos

Segun los esqemas alimentas los dos pics con la misma fuente, pero si fisicamente
estuvieras utilizando dos circuitos, con dos alimentaciones diferentes, tienes que asegurarte de
conectar entre si los negativos.

Saludos :-)

Desconectado mac218

  • PIC10
  • *
  • Mensajes: 5
Re: Ayuda!!! no me funciona uart de pic a pic
« Respuesta #9 en: 11 de Enero de 2011, 01:12:42 »
Otra vez yo!!! me habia apartado un poco de este tema por las festividades, pero la realidad es ke no he podido hacer ke se comuniquen los pics, tengo las resisntecias de 10k en el mclr, tambien tenia dos alimentaciones diferentes para cada circuito (puesto ke lo kiero aplicar a modulos inalambricos) pero igualmente probe conectar entre si los negativos y tambn kn una sola fuente, me inclinaria mas por la configuracion de los #fuses, pero no estoy seguro de kmo configurar, estoy desesperado, ya me enfade jaja.