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

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

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Conectar 2 pic usart
« en: 17 de Marzo de 2008, 15:22:02 »
Alguien me puede confirmar que dos pics se pueden conectar usando sus respectivas usart conectando Rx con el Tx del otro y viceversa? osea sin que medie un max232. Esto es posible verdad?

Esque estoy intentando hacerlos andar y no lo consigo.

1 saludo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Conectar 2 pic usart
« Respuesta #1 en: 17 de Marzo de 2008, 15:26:26 »
Alguien me puede confirmar que dos pics se pueden conectar usando sus respectivas usart conectando Rx con el Tx del otro y viceversa? osea sin que medie un max232. Esto es posible verdad?

Esque estoy intentando hacerlos andar y no lo consigo.

1 saludo

Si, es 100% posible.  Dime:

1. ¿qué problemas tienes?
2. ¿Qué pics usas?
3. ¿Como tienes configurado el módulo?
4. ¿Verificas si se enciende el bit RCSTA.OERR?


- 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 Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Conectar 2 pic usart
« Respuesta #2 en: 17 de Marzo de 2008, 15:34:26 »
Efectivamente, como ya te confirma Mauricio. Yo lo tengo así en el proyecto que tengo entre manos, y comunico un dsPIC con un PIC a 115200bps sin intermediarios.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Conectar 2 pic usart
« Respuesta #3 en: 17 de Marzo de 2008, 15:49:45 »
La conexión es un 2550 conectado a usb que recibe dos bytes desde el pc y tal cual lo envia por usart al 16f877a.

En el programa de 16f877a cuando se recibe algo levanta la bandera PIR1,RCIF de recepcion pero el registro RCREG está vacío.

La configuración en ambos es 9600 baudios sin paridad en recepción contínua.

Esta es la configuración de usart en el 16f877a (a 20mhz) que es el que creo que da problemas

Código: [Seleccionar]
;**************CONFIGURACIÓN DE REGISTROS PARA PREPARAR LA RECEPCIÓN E INTERRUPCIÓN**************
BANCO1
bsf TRISC,7 ;RC7/Rx entrada,
bcf TRISC,6 ;RC6/Tx salida.
movlw b'00000100' ;Para configurar USART
movwf TXSTA ;Se activa la alta velocidad de baudios
movlw d'32' ;Valor para configurar los baudios
movwf SPBRG ;Velocidad de transmisión a 9600 baudios
bsf PIE1,RCIE ;Se habilita la interrupción en recepción

BANCO0 ;Acceso al banco 0
movlw b'10010000' ;Valor para configurar USART
movwf RCSTA ;RC7/Rx/DT en recepción continua
movlw b'11000000' ;Valor para configurar INTCON
movwf INTCON ;Se habilitan GIE y PEIE

para que sirve el bit RCSTA.OERR manuix?
« Última modificación: 17 de Marzo de 2008, 16:08:30 por elmasvital »

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Conectar 2 pic usart
« Respuesta #4 en: 17 de Marzo de 2008, 16:38:02 »
Me parece que un error que tienes es al hacer:
bcf   TRISC,6  para el pin TX, debes poner los dos pines como entrada.

Saludos
« Última modificación: 17 de Marzo de 2008, 16:45:36 por sander »
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Conectar 2 pic usart
« Respuesta #5 en: 17 de Marzo de 2008, 17:35:07 »
para que sirve el bit RCSTA.OERR manuix?

Te indica que el usart tuvo un error de overrrun.  Las 2 causas más comunes que conozco son las siguientes

1) Que tu software no alcanza a leer los datos con la suficiente velocidad a medida que llegan, por ende se llena el buffer y te da un error de overrun

2) Que al encender el hardware, tienes ruido en el pin de recepción de usart (esto es muy muy común) lo que produce que la usart reciba algunos bytes los cuales no son atendidos por tu código (porque tu no esperas recibir nada). 

El problema es que al activarse el OERR la usart desactiva su recepción contínua por eso puedes experimentar como si no te anda la usart.  :)

Solución?  Hacer un borrado del bit RCSTA, CREN y luego lo vueles a setear


     bcf    RCSTA,CREN
     bsf    RCSTA,CREN



Una forma de evitar estos problemas al arrancar es que esperes algunos mseg y revisar en forma períodica en tu código el estado de dicho bit.
- 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 #6 en: 17 de Marzo de 2008, 19:01:22 »
Yo antes programaba en ASM pero después de conocer el CCS, procuro hacerlo en éste, una vez tardé 2 meses haciendo un código en ASM que implicaba, sensar dos encoders, hacer dos conversiones ADC y a la vez comunicación serial RS232, el mismo lo hice en CCS y tardé día y medio (incluyendo el aprendizaje en CCS) en ASM el cambio de bancos para leer la variable o el registro y luego si se te olvidó cambiarte de banco te lee un valor que no es, eso implica tiempo y  :x de paso si te equivocas en asiganr un valor errado como éste:

Código: [Seleccionar]
movlw d'32' ;Valor para configurar los baudios

que debería ser 129 (Tabla 10-4 del Datasheet) según lo que quieres, eso es otro detalle, en fin que viva el CCS con el debido respeto que se merece el Padre ASM.

Salu2.
« Última modificación: 17 de Marzo de 2008, 19:08:08 por gu1llermo »

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Conectar 2 pic usart
« Respuesta #7 en: 18 de Marzo de 2008, 11:37:17 »
Yo antes programaba en ASM pero después de conocer el CCS, procuro hacerlo en éste, una vez tardé 2 meses haciendo un código en ASM que implicaba, sensar dos encoders, hacer dos conversiones ADC y a la vez comunicación serial RS232, el mismo lo hice en CCS y tardé día y medio (incluyendo el aprendizaje en CCS) en ASM el cambio de bancos para leer la variable o el registro y luego si se te olvidó cambiarte de banco te lee un valor que no es, eso implica tiempo y  :x de paso si te equivocas en asiganr un valor errado como éste:

Código: [Seleccionar]
movlw d'32' ;Valor para configurar los baudios

que debería ser 129 (Tabla 10-4 del Datasheet) según lo que quieres, eso es otro detalle, en fin que viva el CCS con el debido respeto que se merece el Padre ASM.

Salu2.



Tienes razon ese era el problema...  Es verdad que el asm es a veces muy muy muy muy muy muy desesperante y te hace perder mucho tiempo. Pero yo no tengo opción y pq me piden el programa en ensamblador.

1 saludo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Conectar 2 pic usart
« Respuesta #8 en: 18 de Marzo de 2008, 13:22:26 »
Tienes razon ese era el problema...  Es verdad que el asm es a veces muy muy muy muy muy muy desesperante y te hace perder mucho tiempo. Pero yo no tengo opción y pq me piden el programa en ensamblador.

1 saludo

yendo al tema del hilo, lo pudiste hacer andar? espero que sí  :mrgreen:
- 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 #9 en: 18 de Marzo de 2008, 16:50:18 »
Pues no manuix :-(

He conseguido que funcione en proteus...

Para descartar problemas he hecho que cuando el 2550 detecta un envio desde el usb lo que manda al rs232 es una F (70 en decimal) y el 877 cuando lo recepciona debe mostrar la F en el LCD. Ok esto funciona en la simulación en proteus pero en la placa real aparecen 3 bytes por arte de magia 128 000 248 (en decimal se entiende)

Asi que en esa estamos.

1 saludete.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Conectar 2 pic usart
« Respuesta #10 en: 18 de Marzo de 2008, 17:07:20 »
Entiendo, un consejo es que verifiques el baudeaje.  Una forma rápida de determinar si andan bien es que hagas transmitir a cada pic por separado y veas cuanto tiempo demora un byte en salir (esto pensando que tienes un osciloscopio).

Todo esto, suponiendo que no tienes problemas con el código  :)
- 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 #11 en: 18 de Marzo de 2008, 20:54:47 »
Bueno finalmente ha salido andando... mañana os explico pq la cosa tiene su miga...

Durante las miles de pruebas realizadas... sin exagerar le habré echado a este problemas más de 20 horas de trabajo (igual me quedo muy corto) me dió por modificar el baud rate con el que habia estado trabajando, 9600 baudios por 19200 y también introduje una pequeña modificación en mi codigo que en ese momento era


   BANKSEL TXSTA
   bcf   TXSTA,SYNC   
   bsf   TXSTA,BRGH

por este otro    

   BANKSEL TXSTA
   movlw   b'0000100'
   movfw   TXSTA

Compilo y el invento funciona... en un primer momento le eché la culpa al baud rate pero luego me di cuenta de que no... vi que si ponia

   BANKSEL TXSTA
   bcf   TXSTA,SYNC   
   bsf   TXSTA,BRGH

NO FUNCIONABA

y sin embargo con

   BANKSEL TXSTA
   movlw   b'0000100'
   movfw   TXSTA

SI FUNCIONABA....

mmm mmm mmm pensé que me estaba dejando algun bit sin borrar y fuera determinante pero no. SI os fijais en movfw TXSTA está mal escrita... mi intención era poner movWF TXSTA. El efecto en el programa era que no modificaba en ese instante el TXSTA y eso se traducia a la postre en que se dejaba el bit BRGH a 0.

Segun la tabla 10-4 del datasheet del 877a para una configuración 19200 a 20MHZ con BRGH=1 debia ser 64. Y eso era lo que queria configurar pero me equivoqué y dejaba el bit BRGH a 0... Y FUNCIONA.... y deja de funcionar en PROTEUS :-P que antes con BRGH=1 si funcionaba como se comenta en un post anterior.

Para descartar otros problemas lo he realizado con dos 877a distintos, verificado los valores de TXSTA en el momento de la configuración con el ICD2 en modo debug.

Ahora mi pregunta es... alguien de los presentes tiene algun 877a usando el puerto usart como receptor y le funciona???

Y para descartar que es problema de mi programa lo he hecho tambien con otro que he encontrado en este mismo foro usando el buscador, con identico resultado. Aqui os lo dejo por si alguien quiere comprobarlo (con BRGH=0 y baud rate de uno supuestamente para BRGH=1)

Código: [Seleccionar]
LIST    P=16F877A
__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF & _DEBUG_ON
INCLUDE  <P16F877A.INC> 

    ERRORLEVEL -302, -207, -205, -203, -305 ;evitar warnings al compilar
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
      ORG   00H      ;Inicio en el Vector de Reset
     
      goto   INICIO      ;Va a la primera instruccion del
               ;programa

;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>

      ORG   04H      ;Vector de interrupcion


INTER   btfss   PIR1,RCIF   ;¿Interrupcion por recepcion?
      goto   VOLVER      ;No. Falsa interrupcion
      bcf      PIR1,RCIF      ;Si. Reponer Flag
      movf   RCREG,W      ;Lectura dato recibido
;      movwf   PORTB      ;Visualiza dato recibido
     

VOLVER   retfie         ;retorna de la interrupcion.
     
     
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>

INICIO   clrf   PORTB      ;Limpia salidas
      clrf   PORTC
clrf ADCON1
      bsf   RCSTA,SPEN   ;se activa la USART
      bsf   STATUS,RP0   ;Cambio al banco 1 ------------------
      bcf   STATUS,RP1
     
      clrf   TRISB      ;Puerta B como salida
      clrf   TRISB      ;Puerta B como salida
      movlw   80H         ;RC7/Rx entrada,
      movwf   TRISC       ;RC6/Tx   salida y RC5 Salida.

      movlw   00H   ;Configuracion USART   
      movwf   TXSTA      ;y activacion de transmision
      movlw   .64      ;19200 baudios
      movwf   SPBRG
      bsf      PIE1,RCIE   ;Habilitacion interrupcion RX
      bcf      STATUS,RP0   ;Cambio al banco 0 -----------------
     
      bsf      RCSTA,SPEN   ;se activa la USART
     
      movlw   90H   ;Configuracion de la usart
      movwf   RCSTA      ;para recepcion continua
     
      movlw   0C0H   ;Habilitacion para las
      movwf   INTCON      ;interrupciones generales
     
     
     
BUCLE   goto   BUCLE      ;espera aqui hasta que salte la int.

END


« Última modificación: 18 de Marzo de 2008, 21:32:38 por elmasvital »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Conectar 2 pic usart
« Respuesta #12 en: 18 de Marzo de 2008, 21:18:56 »
Bueno finalmente ha salido andando... mañana os explicaré pq aun no estoy seguro de lo que ha pasado, no descarto un fallo en el datasheet de microchip.
Buenisimo que lo hayas solucionado, ahora lo importante será que sea estable en su andar a ver si anda solo frente a ciertas condiciones o si se más robusto y soporta algunos desajustes como ruido en el pin de recepción o similar.

Lo del error en el datasheet es factible, he encontrado algunos a veces.  En estos casos una forma de aportar a la causa es subir el problema en http://support.microchip.com

Fijate si no están mencionados en algún Errata correspondiente.  Los errata mencionan bugs en el silicon pero también a veces alguna corrección de los datasheets que luego aparecen en las nuevas versiones.

- 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 #13 en: 18 de Marzo de 2008, 21:30:18 »
Hola manuix relee mi post anterior que lo modifiqué para no añadir la solución en otro post

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Conectar 2 pic usart
« Respuesta #14 en: 19 de Marzo de 2008, 02:06:50 »
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.


 

anything