Autor Tema: Conectar 2 pic usart  (Leído 18075 veces)

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

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Conectar 2 pic usart
« Respuesta #15 en: 19 de Marzo de 2008, 05:53:54 »
Si claro que los puertos de recepción y transmisión de la uart del pic16f877a funcionan, yo tengo conectado el pin RX del pic16f877a con el pin TX del 18f4550 y el pin TX del 16f con el pin RX directamente sin intermediarios, y funciona todo bien, una recomendación que te podría dar si me lo permites es que coloques en '1' el pin TX en ambos códigos de tus programas apenas empieza tu programa principal con esto evitarás ese bit fantasma que recibe el pic (cualquiera de ellos) a mi pasaba lo mismo, recibía un dato sin pedirlo y con esto lo solucioné.

Saludos.


El tx en mi programa lo tengo a 1, pero no en el ejemplo este que he puesto pq lo saqué del buscador... solo lo puse por si alguien quiera comprobar el problema mencionado con el BRGH.

En tu programa del 16f877a me puedes indicar qué baud rate usas y si tiene BRGH=1 o 0??? Lo haces en ensamblador o en C?

No descarto que sea problema de mi software, seria lo más logico pero si pongo BRGH=1 con el baudrate a 64 para una velocidad de 20mhz tal como indica en el datasheet para 19200budios en modo BRGH=1 no funciona y si pongo lo mismo con BRGH=0 sí...

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Conectar 2 pic usart
« Respuesta #16 en: 19 de Marzo de 2008, 08:49:38 »
Ahora mi pregunta es... alguien de los presentes tiene algun 877a usando el puerto usart como receptor y le funciona???
Sí, de hecho se puede decir que tengo canas configurando usart para estos pics jiji.  Hace poco los programo en C, pero hace años que lo hago en assembly y te digo que nunca me han fallado.

He usado toda la familia 16f873, 16f874, 16f876, 16f877 y sus hermanos los A.  Ahora también uso los 16F88x con idénticos buenos resultados.

Los tengo en aplicaciones que andan 24x7  (24 hs, los 7 días de la semana) y siguen andando desde hace años.

En cuanto al proteus no tengo comentarios al respecto ya que no lo uso, pero como moraleja y siempre digo esto, el hardware es quien decide siempre  y no el simulador  :mrgreen:   Lo que anda en un simulador puede que no ande en el hardware y viceversa.  No por nada son simuladores, sirven para aproximarse a la solución real del problema pero rara vez cubren todos los aspectos reales del mismo.

En tu programa del 16f877a me puedes indicar qué baud rate usas y si tiene BRGH=1 o 0??? Lo haces en ensamblador o en C?

Tengo códigos en assembly y en C que configuran la usart.  El C puntualmente es el Ht-pic pero lo que hago es solamente usar 'estilo C' pero internamente con asignaciones directas a los registros (sin usar inline assembly) así que es lo mismo que hacerlo en assembly.

No hay diferencias en esto en hacerlo en C o assembly, lo que importa es qué codigo queda generado y si te funcionará finalmente o no.

¿Tienes un osciloscopio? ¿Cómo compruebas lo del baudeaje "real"? Te pregunto por si por casualidad estás usando un adaptador USB a de puerto serie RS232 en alguna PC o bien alguna placa de expansión de puertos.  Te digo porque si tu respuesta va por este lado te comento que con algunos adaptadores he tenido problemas, yo pensaba que era el código (que venía andando bien) y resultó ser el adaptador!! Cambiar de puerto de conexión en la PC a uno del motherboard me solucionó el problema.


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Conectar 2 pic usart
« Respuesta #17 en: 19 de Marzo de 2008, 10:26:15 »
Ahora mi pregunta es... alguien de los presentes tiene algun 877a usando el puerto usart como receptor y le funciona???
Sí, de hecho se puede decir que tengo canas configurando usart para estos pics jiji.  Hace poco los programo en C, pero hace años que lo hago en assembly y te digo que nunca me han fallado.

He usado toda la familia 16f873, 16f874, 16f876, 16f877 y sus hermanos los A.  Ahora también uso los 16F88x con idénticos buenos resultados.

Los tengo en aplicaciones que andan 24x7  (24 hs, los 7 días de la semana) y siguen andando desde hace años.

En cuanto al proteus no tengo comentarios al respecto ya que no lo uso, pero como moraleja y siempre digo esto, el hardware es quien decide siempre  y no el simulador  :mrgreen:   Lo que anda en un simulador puede que no ande en el hardware y viceversa.  No por nada son simuladores, sirven para aproximarse a la solución real del problema pero rara vez cubren todos los aspectos reales del mismo.

En tu programa del 16f877a me puedes indicar qué baud rate usas y si tiene BRGH=1 o 0??? Lo haces en ensamblador o en C?

Tengo códigos en assembly y en C que configuran la usart.  El C puntualmente es el Ht-pic pero lo que hago es solamente usar 'estilo C' pero internamente con asignaciones directas a los registros (sin usar inline assembly) así que es lo mismo que hacerlo en assembly.

No hay diferencias en esto en hacerlo en C o assembly, lo que importa es qué codigo queda generado y si te funcionará finalmente o no.

¿Tienes un osciloscopio? ¿Cómo compruebas lo del baudeaje "real"? Te pregunto por si por casualidad estás usando un adaptador USB a de puerto serie RS232 en alguna PC o bien alguna placa de expansión de puertos.  Te digo porque si tu respuesta va por este lado te comento que con algunos adaptadores he tenido problemas, yo pensaba que era el código (que venía andando bien) y resultó ser el adaptador!! Cambiar de puerto de conexión en la PC a uno del motherboard me solucionó el problema.


No uso ningun adaptador usb serie... uso un 18f2550 que recibe por usb y lo manda al 877a por rs232. El problema como digo es que el uso que tengo que hacer del bit TXSTA,BRGH es el contrario al que indica el datasheet o de lo contrario no funciona la transmisión. Lo que indicaba sobre proteus es que éste si responde a los dictados del datasheet pero no el pic :-P.


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Conectar 2 pic usart
« Respuesta #18 en: 19 de Marzo de 2008, 15:00:34 »
No uso ningun adaptador usb serie... uso un 18f2550 que recibe por usb y lo manda al 877a por rs232. El problema como digo es que el uso que tengo que hacer del bit TXSTA,BRGH es el contrario al que indica el datasheet o de lo contrario no funciona la transmisión. Lo que indicaba sobre proteus es que éste si responde a los dictados del datasheet pero no el pic :-P.
Bueno, volviendo a lo que has hecho, puedes pegar le código del 16f877A que estas usando? Según entendí más arriba que dices que lo que está posteado ya le has cambiado algunas cosas, por eso te solicito si lo podes volver a subir.

También por favor aclarame que fuses estas usando y que cristal

El código del 18f2550 también vendría bien, sobre todo si está en assembly , qué fuses tienes en dicho pic y cómo configuras la usart.  Si usas algún C y puedes simularlo, te pido si puedes mostrar al menos el contenido de los registros SPBRG, el RCSTA, el TXSTA y si usas el oscilador interno también postea su valores.

Por último, anota qué modelo de pic tienes exactamente (todas las letras), tal vez sea algún error en el silicon que ya esté documentado en algún errata pero para ello necesitaría que transcribas exactamente todo lo que dice el pic en su lomo.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Conectar 2 pic usart
« Respuesta #19 en: 19 de Marzo de 2008, 16:40:22 »
...
En tu programa del 16f877a me puedes indicar qué baud rate usas y si tiene BRGH=1 o 0??? Lo haces en ensamblador o en C?
...

Bueno intenté pegar el código completo pero no puedo porque tiene más de 2000 caracteres asi que te lo adjunto no sin antes mostrarte lo que creo que te puede servir:

Código: [Seleccionar]
;===============================================================================
; Configuración de los puertos
;-------------------------------------------------------------------------------

bsf STATUS,RP0; Activa el banco 1
movlw 0xFF
movwf TRISA; Configura todo el puerto A como entradas, aunque solo se use AN0 y AN1 como entradas analógicas
movlw 0xF0; Configura RD7:RD4 como entradas y RD3:RD0 como salidas
movwf TRISD;
movlw b'10000000'
movwf TRISC; Se configura RX y TX
clrf TRISB; No se utiliza el puerto B

;===============================================================================
; Configuración de la comunicación serial USART
;-------------------------------------------------------------------------------

movlw b'00100100'
movwf TXSTA; 8 bits, Habilita transmisión, Modo Asíncrono, Alta velocidad
BANK0; Selecciona el Banco 0
bsf PORTC, 6; Aseguro que este bit sea 1 (STOP) y corregir posibles fallos en la comunicación que ocurren al
; encender el PIC
bcf RCSTA, CREN; Lo hago cero para borrar un posible bit de Overrun
movf RCREG, W;
movf RCREG, W; Leo dos bytes para vaciar el bufer de recepción
movlw b'10010000'
movwf RCSTA; Configura los pines RC7/RX y RC6/TX como pines del puerto serial, 8 bits y CREN=1
BANK1; Selecciona el Banco 1 nuevamente para configurar
movlw .64; 129=> 9600 // 64=> 19200
movwf SPBRG; Velocidad de transmision a 19200 Baudios

Inicio de la rutina de interrupción:

Código: [Seleccionar]
Interrupcion

movwf w_temp;
movf STATUS, W;
movwf status_temp;
movf PCLATH, W;
movwf pclath_temp;
BANK0
btfss PIR1, RCIF; Verifica si ocurrió una interrupción por recepción de datos via USART
goto Fin_Interrupcion

; Se recibió un dato

movf RCREG, W;
movwf dato; Leemos el dato

fin de la rutina:

Código: [Seleccionar]
...Fin_Interrupcion
; bsf RCSTA, CREN; Habilito nuevamente la recepción de datos
bcf     PIR1,RCIF       ; Clear the interrupt flag
movf pclath_temp, W;
movwf PCLATH
movf status_temp, W;
movwf STATUS;
swapf w_temp, F;
swapf w_temp, w
retfie

Configuración de las interrupciones:

Código: [Seleccionar]
;===============================================================================
; Configuración de las interrupciones
;-------------------------------------------------------------------------------

movlw b'11000000'
movwf INTCON; Habilita las interrupciones globales y las periféricas
movlw b'00100000'
movwf PIE1; Habilita interrupción solo por recepción de datos via USART

Rutina de transmisión de un byte:

Código: [Seleccionar]
Tx
movwf TXREG
BANK1
btfss TXSTA, TRMT
goto $-1; Espera a que termine de transmitir el dato
BANK0
return

Saludos.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Conectar 2 pic usart
« Respuesta #20 en: 19 de Marzo de 2008, 18:59:20 »
Que raro... igual es una interacción con el 2550 que está programado en ccs. Investigaré el tema a fondo en cuanto termine el proyecto del brazo robot que ahora mismo me tiene todo el tiempo ocupado.

El caso es que con me funciona con el brgh=0 baud rate 19200 (64) contraviniendo lo que dice el datasheet.

Mil gracias por los consejos ya volveré con el tema en cuanto tenga un ratito de lugar.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Conectar 2 pic usart
« Respuesta #21 en: 19 de Marzo de 2008, 22:04:33 »
Lei en otro tema una contestacion de Sisco muy explicativa acerca de porque no funciona el USB y la USART al mismo tiempo en un 2550.
Realiza una busqueda y encontraras la solucion.
Creo que el iniciador del tema fue Manolo Nocturno. :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Conectar 2 pic usart
« Respuesta #22 en: 20 de Marzo de 2008, 02:55:38 »
No fui yo, pero rescato el link por si te sirve: http://www.todopic.com.ar/foros/index.php?topic=20568.0


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Conectar 2 pic usart
« Respuesta #23 en: 20 de Marzo de 2008, 08:47:42 »
Que raro... igual es una interacción con el 2550 que está programado en ccs. Investigaré el tema a fondo en cuanto termine el proyecto del brazo robot que ahora mismo me tiene todo el tiempo ocupado.

El caso es que con me funciona con el brgh=0 baud rate 19200 (64) contraviniendo lo que dice el datasheet.

Mil gracias por los consejos ya volveré con el tema en cuanto tenga un ratito de lugar.

Cuando tengas tiempo de ver el código de CCS o el Código Generado en assembly, te pido que guardes eso más que las instrucciones puntuales que usas en CCS. 

Aunque tal vez el problema esté en otro lugar como apuntan Marcos y Manolo
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado jesus8324

  • PIC10
  • *
  • Mensajes: 1
Conectar 2 pic usart pero trabajndo con picsimulator ide
« Respuesta #24 en: 13 de Junio de 2008, 18:40:08 »
Eruditos de la pagina, quiero hacer una comunicacion inalambrica entre pics (16F877A).
El que envia, debe transmitir 13 señales digitales correspondientes a distintos interruptores que pueden ser 1 o 0.
El problema es que trabajo con el software PIC SIMULATOR IDE y no tengo ni idea como tranmitirlos ni mucho menos recibirlos.

Pora favor ayudenme

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Conectar 2 pic usart
« Respuesta #25 en: 13 de Junio de 2008, 19:44:25 »
Hola.

La comunicacion se puede hacer por serial. Se podria enviar un identificador de trama para cada senal (A: xxx, B:xxx ....) y en el PIC receptor se procesaria el dato correspondiente. Te recomiendo que mires el Procesador de comandos vía RS232 (con Buffer de recepción) del gran RedPic para que te des una idea.

Los emisores que he usado son el TLP434A y su respectivo receptor, muy bueno, baratos, faciles de usar, 100mts de alcance, los venden en sigmaelectronica.

Respecto al simulador, porque no pruebas cambiarte al Proteus????

Saludos
El papel lo aguanta todo

Desconectado king12

  • PIC10
  • *
  • Mensajes: 1
Re: Conectar 2 pic usart
« Respuesta #26 en: 18 de Agosto de 2011, 19:17:13 »
alguien que me ayude con la programacion en c para conectar 2 pic mediante usart usando el pic 16f877

de antemano gracias

Desconectado wannaky

  • PIC12
  • **
  • Mensajes: 92
Re: Conectar 2 pic usart
« Respuesta #27 en: 25 de Agosto de 2011, 21:14:08 »
alguien que me ayude con la programacion en c para conectar 2 pic mediante usart usando el pic 16f877

de antemano gracias
hola king12, que necesitas hacer exactamente?!?! que problema tienes?!?!?!

saludos...