Autor Tema: Problema con el usart.  (Leído 7834 veces)

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

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #15 en: 21 de Agosto de 2009, 11:20:47 »
Lamento haber tardado en postear los avances pero cuando cayo el foro me olvidé de subirlo.

Debido al problema que sufrió elmasvital, yo hise lo mismo pero para 4Mhz de frecuencia del PIC. La configuración me quedó en 19200 baudios, modo baja velocidad y el generador de baudios cargado con 12 (decimal) (esta configuración es para modo alta velocidad). Al parecer funciona pero no del todo. No me actualiza los datos en el LCD pero debo revisar si no hay otro problema.

El led que coloqué como testigo en el receptor, prende y apaga acusando recibo, pero lo hace a muy poca intensidad pero pienso que es por la alta conmutación. Para sacarme la duda, coloqué en el bit transmisor, en el pin RC6 RTX, un led y aquí viene lo raro, cuando el PIC no está transmitiendo, este led permanece encendido con poca intensidad.



Acabo de experimentar algo raro que me está desorientando bastante.

Modifiqué el programa receptor para que, cuando termine de configurar el LCD quede en un bucle cerrado y no haga más nada. Luego en la interrupción, modifiqué que pase el dato de RCREG a W y luego la envíe a el LCD y quede en un bucle cerrado, para salir hay que resetear el PIC.

Pasaron 2 cosas:

1- En la simulación del MPLAB, me muestra el dato recibido pero el pic montado en el protorboard no.

2- Resetee ambos pic, pero esta vez dejé reseteado el PIC TX y puse a correr el PIC Rx, se enciende el led acusando de recepción en forma muy tenue y permanece encendido. Luego coloqué el pic Tx a andar y obviamente no me mostraba nada.

Reseté a ambos pic y puse a  correr el Tx, luego hice andar el PIC Rx y el led de recepción se permaneció apagado hasta que el Tx envíe datos, luego permanece encendido ya que nunca lo apago por software. El tema es que el led se prende en forma muy tenue. Repasé los cables y todos hacen muy buen contacto.

Estos avances lo he echo hace dos días atrás y desde entonces no he vuelto con el proyecto por falta de tiempo. Hoy trataré de seguirlo.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Problema con el usart.
« Respuesta #16 en: 22 de Agosto de 2009, 05:52:18 »
estuve mirando el codigo Rx y lo unico que se me ocurre para comprobar si el dato llega, es que en la interrupcion saques el resultado por el puerto b para verificar si realmente llega algun dato y cual, pasando de la lcd y todo lo demas. a mi mas de una vez me ha funcionado simplificar el prog para localizar los errores
configuracion de perifericos
    -puertas y modulos- se quedaria como esta
interrupcion
    -verifica que int. ha saltado, si es la RX. carga el dato en portb
programa
    -goto programa    ;solo para probar la llegada de la usart. que se quede en un bucle esperando a que salte la interrupcion

doy por echo que cada pic tiene puestos sus condensadores de 100nf, a ver si va a ser por ruidos en la señal. yo los pongo muy pegados a las patillas de alimentacion del pic, uno a cada lado y el cristal tambien muy cerca de las patillas. si esta en una protoboard de esas quita y pon (no se como se llaman) en el mismo agujero de las patillas del pic puedes ponerlos y aseguras que no haya ruido electrico

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #17 en: 22 de Agosto de 2009, 12:14:10 »
Cada pic tiene su condensador en la alimentación.

Voy a probar lo que me dices. Hasta el lunes o martes no puedo continuar. En esos días les comento como me está llendo con este dolor de cabeza.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #18 en: 08 de Octubre de 2009, 10:58:25 »
Después de casi 8 semanas que no posteo algo del problema, vuelvo con malas noticias (no le he dedicado todos los día al problema. He estado metido cuando tenía un rato libre), pero no hay mal que por bien no venga.
Desgraciadamente aún no fui capaz de hacer comunicar los dos pic, pero he descubierto algo interesante a la hora de configurar los puertos para trabajar con el USART.

Para poder transmitir los datos no hay que configurar el PIN RC6/TX como entrada, tal como lo dice el datasheet, sino como salida. Lo he comprobado de dos formas, primero, he notado que, cuando habilitaba la transmisión, el bit 6 del registro TRISC no cambiada de estado, permanecía como entrada. Y lo confirmé cuando logré simular la usart en mplab

Lo que si tengo problema es como interpretar los datos de la transmisión generada en el archivo de la simulación. Miren como me muestra los datos enviados. Primero envío el siguiente dato:

0x01

Luego:

0x03

y este es el dato generado en el archivo:



Lo adjunto para que lo puedan ver mejor.

He creado un nuevo código en el cual consiste que envíe por la usart el portb y se ve reflejado en el porta del RX (exeptos los dos bit más significativos). Les muestro ambos programas:

Tx

Código: [Seleccionar]
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _BODEN_OFF & _LVP_OFF & _WRT_OFF
;
;---------------------------------------------------------------
;VARIABLES.
;---------------------------------------------------------------
;
CBLOCK H'20'
PDel0
PDel1
PDel2
ENDC
;
RESET ORG H'00'
GOTO INICIO
ORG H'04' ;VECTOR INTERRUPCIÓN
INTERRUP
;
INICIO
;
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
BSF STATUS,RP0 ;BANCO 1
CLRF TRISA
MOVLW H'FF'
MOVWF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW 0x06
MOVWF ADCON1
BSF TRISC,7
;
;INICIALIZACIÓN DEL MÓDULO USART
;
BSF TXSTA,BRGH
MOVLW .25
MOVWF SPBRG
BSF TXSTA,SYNC
BCF STATUS,RP0 ;BANCO 0
BSF RCSTA,SPEN
;
;ACTIVACIÓN DEL MÓDULO USART
;
BSF STATUS,RP0 ;BANCO 1
BSF TXSTA,TXEN
;
;ENVÍO DE DATOS AL USART
;
BCF STATUS,RP0 ;BANCO 0
REPETIR MOVFW PORTB
MOVWF TXREG
CALL DEMORA_1S ;RETARDO DE UN SEGUNDO.
GOTO REPETIR
;
DEMORA_1S  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;
END

Rx

Código: [Seleccionar]
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _BODEN_OFF & _LVP_OFF & _WRT_OFF
;
;---------------------------------------------------------------
;VARIABLES.
;---------------------------------------------------------------
;
CBLOCK H'20'

ENDC
;
RESET ORG H'00'
GOTO INICIO
ORG H'04' ;VECTOR INTERRUPCIÓN
INTERRUP
;
INICIO
;
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
BSF STATUS,RP0 ;BANCO 1
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW 0x06
MOVWF ADCON1
BSF TRISC,6
BSF TRISC,7
;
;INICIALIZACIÓN DEL MÓDULO USART
;
BSF TXSTA,BRGH
MOVLW .25
MOVWF SPBRG
BSF TXSTA,SYNC
BCF STATUS,RP0 ;BANCO 0
BSF RCSTA,SPEN
;
;ACTIVACIÓN DEL MÓDULO USART
;
BSF RCSTA,CREN
;
;RECEPCIÓN DE DATOS DEL USART
;
NO_RECIBIDO BTFSS PIR1,RCIF
GOTO NO_RECIBIDO
MOVFW RCREG
MOVWF PORTA
BCF RCSTA,CREN
NOP
BSF RCSTA,CREN
GOTO NO_RECIBIDO
;
END
« Última modificación: 08 de Octubre de 2009, 11:01:36 por Leon Pic »
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con el usart.
« Respuesta #19 en: 08 de Octubre de 2009, 17:18:57 »
leon pic.que crystal estas usando?

has tenido en cuenta usar un crystal que tenga un 0% de errores para la velocidad que estas usando?
y la conexion entre pics lo has hecho con un cable trenzado para evitar interferencias?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #20 en: 08 de Octubre de 2009, 17:51:22 »
mmmmm, el cristal de cuarzo no dice nada del error :( :( Utilizo uno de 4 Mhz.
En cuanto al cable, la comunicación es unidireccional, o sea, del Tx al Rx nada más, por lo que solo es necesario un solo cable.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con el usart.
« Respuesta #21 en: 08 de Octubre de 2009, 19:05:32 »
mira estas tablas que hize hace tiempo: http://www.todopic.com.ar/foros/index.php?topic=27375.msg225260#msg225260

lo mejor es tener el minimo margen de error en las transmisiones de la usart.lo puedes ver en el datasheet del pic que estes usando.
aunque en el datasheet no vienen todos los valores.por eso hize a mano las tablas del enlaze.

y si quieres descartar mas fallos.trenza en cable de masa con el de transmision.como se hace en los pares de los clables RJ45 o TCP.
y tambien se hace en las comunicaciones entre centralitas de los automoviles.para CAN.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Problema con el usart.
« Respuesta #22 en: 08 de Octubre de 2009, 19:16:38 »
Leon Pic, en mi experencia la configuracion que indica el datasheet para transmitir  funciona, pero asi te funciona poniendo el pin como salida, puede que el datasheet este equivocado, al revisar tu programa creo que un posible problema en la transmision es que el transmisor esta siempre habilitado, lo que yo hago es tener una subrutina para enviar un caracter por el USART y lo primero que hago es habilitar la transmision  y cuando termino de enviar , volver a enviar la transmision., sobre la simulacion creo que solo puedes enviar caracteres ASCII  al archivo de salida

Saludos
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 Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #23 en: 08 de Octubre de 2009, 20:37:53 »
Gracias a ambos.

Groundman, muy buena la tabla. Si que te tomaste un gran trabajo en realizarlo. Muchas gracias por compartirlo.

Sander, hay algo que no te entendí. Lo que tu haces a la hora de transmitir es: habilitas la transmisión, cargas el valor en el registro TXREG, cuando termina de enviar, deshabilitas la transmisión. ¿Es así?
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Problema con el usart.
« Respuesta #24 en: 09 de Octubre de 2009, 13:33:22 »
Si eso es exactamente lo que quise decir, no se en que estaba pensando cuando escribi lo anterior , ni siquiera yo lo entiendo.

Saludos.
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 Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #25 en: 09 de Octubre de 2009, 14:29:55 »
Muchas gracias Sander. Es algo que no se me ocurrió probar.
Ahora estoy en el trabajo así que hasta mañana no podré hacerlo. Intentaré lo que me comentás y lo que me comentó groundman.

Hasta nuevo aviso.  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con el usart.
« Respuesta #26 en: 09 de Octubre de 2009, 17:16:54 »
veo en tu codigo que estas usando la usart en modo sincrono. BSF   TXSTA,SYNC

yo nunca he usado este modo.seguro que no deberias usar el modo asincrono?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #27 en: 09 de Octubre de 2009, 17:23:00 »
ouch  :oops: :oops: :oops: me equivoqué, si quiero utilizar el modo asincrono.
Otra cosa para chequear mañana. :? :?

Gracias por el detalle groundman  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con el usart.
« Respuesta #28 en: 09 de Octubre de 2009, 18:17:59 »
te pongo esta configuracon para 19.200 Kbaud
que creo que es la que quieres usar.

BRGH=0
SYNC=0
SPBRG=3
crystal  3.686400 Mhz

de esta forma el % de error es 0.

y si quieres usar 9.600 Kbaud
valor de SPBRG=5


y en modo alta velocidad BRGH=1
para 38400 Baud     valor de SPBRG=5
para 57600 Baud     valor de SPBRG=3

todo esto tiene un porcentage de error tambien a 0.pero tienes que usar este crystal.

realmente no se los problemas que supone tener algun margen de error.supongo que los problemas salen al realizar transmisiones largas.
aunque supongo que si se deshabilita/habilita el modulo usart antes de cada transmision.creo que no habria muchos problemas.
lo malo creo que esta en las recepciones largas.que al ir adelantandose o atrasandose el oscilador principal.se producirian la falta o sobra de un bit que se va adelantando /atrasando.

aunque bien pensado si los dos pic utilizan el mismo ciclo de reloj.y la transmision es solo entre ellos.ya no haria falta tener en cuenta ningun desfase.porque realmente no lo habria.
otra cosa seria comunicarse con un PC.ya que este si que sigue un control exacto de las velocidades de la usart.y un porcentage de error relativo tendria falta de datos.

 :lol: anda ni yo sabia que esto pudiera ser asi.me lo habre creido o sera verdad lo que he expuesto. :D








Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #29 en: 09 de Octubre de 2009, 19:30:35 »
Una vez más te agradezco la molestia que te has tomado.
Mañana haré las pruebas pero utilizaré un cristal de 4 Mhz.

PD: Cuando me preguntaste por el error de comunicación, pensé que te referías al porcentaje de error del cristal  :roll: De todas maneras la configuración que había elegido, no llegaba al 1% :x :x
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.


 

anything