Autor Tema: Comunicacion Serial de PIC a PIC (18F452)  (Leído 6180 veces)

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

Desconectado aiwa_7

  • PIC10
  • *
  • Mensajes: 44
Comunicacion Serial de PIC a PIC (18F452)
« en: 23 de Febrero de 2010, 16:44:27 »
 :-/

Que tal... saludos...

Les comento que estoy trabajando en un proyecto el cual consiste en implementar dos pics de manera simultanea pero en tareas independientes,
esto es, que aunque el proposito de cada uno es distinto, si tiene que existir comunicacion entre ellos, es decir que en un momento determinado
el pic 1, por asi llamarlo tiene que enviar cierta informacion al pic 2, para lo cual se establecera una comunicacion entre ellos via serial.
La cuestion en esto es que, para empezar es una labor con la que nunca habia lidiado, trabaje en proyectos de comunicacion PIC-PC, y sin
problemas, pero en esta ocacion surgen varias cuestiones, se que no es necesario utilizar MAX232, pero entonces la conexion es directa entre
emisores y transmisores, es decir RX del pic 1 con TX del pic 2 y al contrario??? se utilizan las mismas instrucciones que cuando se envia y recibe
de una PC??? se necesita configurar algo diferente en este caso???
He consultado ya muchas fuentes, pero solo he logrado confundirme mas  :D , ya que las versiones ya son muy variadas, en algunos casos se
menciona la necesidad de configurar el usart1, en otras que no es necesario, entre otras...
 
Estoy programando en C, con el complador CCS.

Gracias de antemano...   

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Comunicacion Serial de PIC a PIC (18F452)
« Respuesta #1 en: 23 de Febrero de 2010, 16:58:32 »
Supongo que no debe ser muy complicado al utilizar USART por Hard si activas la interrupción de USART RX. Cuando el PIC A envie datos al PIC B en éste se le activará la interrupción y tú tendrás que atenderla....


Yo estoy haciendo unas rutinas de USART por Soft y lo simulé en Proteus entre 2 PIC y funcionó bien. Claro que al ser por Soft tuve que recurrir a hacer polling del puerto RX o bien hacer RB0 como puerto de entrada y así cuando hay interrupción en dicho puerto la atiendo y recibo los datos.

En cuanto a los puertos, efectivamente es así, van cruzados. RX a -> TX b; RX b -> TX a
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado aiwa_7

  • PIC10
  • *
  • Mensajes: 44
Re: Comunicacion Serial de PIC a PIC (18F452)
« Respuesta #2 en: 23 de Febrero de 2010, 18:57:56 »
Ok, gracias AngelGris, el punto es que no se como configurar la interrupcion de usart, para crear un nuevo programa empleo
el asistente o wizard del compilador, y en una lista me muestra todas las interrupciones disponibles para ese pic, donde no se
encuantra alguna que tenga que ver con el modulo, y estoy tratando con la interrupcion referente a, interrupcion por recepcion
de datos de rs232, por lo que no se si con eso baste, o si tenga que ver con lo mismo.
Segun la fuente donde lei lo referente al modulo usart, menciona que unicamente se necesita agregar al programa la instruccion:

#use rs232(usart1,baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

y se hace enfasis en no olvidar escribir usart1 ya que varios pics tienen mas de uno (al menos eso lei), cuando normalmente solo la programo como:

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

entonces, al colocar lo anterior se supondria que es mas que suficiente. Ya he realizado muchas pruebas, y al parecer no existe diferencia en la
simulacion con Proteus, funciona bien colocando o no esto; pero copmo ya lo mencione, solo en la simulacion, ya que en fisico que en realidad es
el importante con ninguna de las dos condiciones esta funcionando.

Aun asi gracias por la ayuda, espero me puedan seguir apoyando con ello...
Saludos...   

                                                                            :-/               :-/                    :-/                                               
 

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Comunicacion Serial de PIC a PIC (18F452)
« Respuesta #3 en: 23 de Febrero de 2010, 19:16:18 »
Lo que hacés con esas sentencias es avisar al compilador que vas a hacer uso del USART, y creo que también se configura con los parámetros que incluís entre los paréntesis. Pero no estás activando la interrupción de recepción.

Para activarla tenés que declararlo explícitamente (si no estoy errado, ya que no estoy usando CCS) y se hace colocando la sentencia.

Código: [Seleccionar]
enable_interrupt (INT_RDA); // habilita interrupción de recepción
enable_interrupt (GLOBAL); // habilito las interrupciones
;


A su vez, tenés que hacer una rutina que atienda a la interrupción producida....

Código: [Seleccionar]
#INT_RDA
void rutinadeinterrupcion()
{
......
.....
.....
}


Fijate en la ayuda del CCS que hay varios ejemplos del uso de distintas interrupciones
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado aiwa_7

  • PIC10
  • *
  • Mensajes: 44
Re: Comunicacion Serial de PIC a PIC (18F452)
« Respuesta #4 en: 23 de Febrero de 2010, 19:30:16 »
Correcto... solo que es asi como lo tengo en el programa, tal cual lo mencionas
hablitada la interrupcion int _RDA, y con una rutina a la cual entra para atender
al proceso una vez que se ha presentado la interrupcion.
Si fuese necesario podria subir el codigo, mas no tiene mucho que observarse,
basicamente son esas las instrucciones que se estan empleando...
Gracias por el comentario
Saludos...

                                :-/           :-/            :-/

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Comunicacion Serial de PIC a PIC (18F452)
« Respuesta #5 en: 23 de Febrero de 2010, 22:41:39 »
Acabo de releer todo y viendo que mencionás que en el Proteus funciona se me ocurre pensar en algún problema de configuración de los PIC (los famosos Fuses) o algún otro tema en el HARD
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas