Autor Tema: Algunas veces se me bloquea la Usart del 16F877  (Leído 4219 veces)

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

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
Algunas veces se me bloquea la Usart del 16F877
« en: 20 de Diciembre de 2004, 18:39:00 »
Algunas veces se me bloquea la usart en modo rx si no leo suficientemente rapido los registros de esta, lo he solucionado activando sus interrupciones para saber cuando tengo dato nuevo y evitar el bloqueo, sabe alguien como detectar que esta bloqueada y desbloquearla en tiempo de ejecucion..... Sonrisa
Saludos desde Granada, España.

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: Algunas veces se me bloquea la Usart del 16F877
« Respuesta #1 en: 22 de Diciembre de 2004, 02:42:00 »
Vale, pues tu mismo te has contestado.

Segun la hoja de caracteristicas de los pics, estos tienen un buffer de entrada de dos bytes "y algo". Es decir tienen dos bytes mas el que se esta recibiendo, si al terminar de recibirse el tercero no has vaciado el buffer de entrada, se satura y se bloquea.

Hay un bit que te indica que el buffer se ha saturado y hay que resetearlo para desbloquear la recepcion.

El desbloqueo debe hacerse por programa.

Para saber el nombre exacto del bit... a la hoja de datos, creo que el nombre es diferente en algunas series de la gama alta y como no dices con que pic ni con que lenguaje trabajas...
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado carlyvalente

  • PIC16
  • ***
  • Mensajes: 108
RE: Algunas veces se me bloquea la Usart del 16F877
« Respuesta #2 en: 22 de Diciembre de 2004, 05:12:00 »
El bit del que hablas es el OERR, es del registro RCSTA.
Los pics de la gama media son iguales, me refiero a la instruccion y registro.
No basta con limpiar este bit, debes hacer bcf RCSTA,CREN y luego bsf  RCSTA,CREN para limpiar el error.
OERR significa overrun error, o sea que como dice el colega arriba no has leido los 2 bytes del FIFO y el tercero que ha entrado , bloqueándote la USART.
Salutes

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Algunas veces se me bloquea la Usart del 16F877
« Respuesta #3 en: 22 de Diciembre de 2004, 17:20:00 »
El PIC es PIC16F877
El lenguajes es Basic Compilado
Gracias por la respuesta, conocía estos registros y el problema que pueden dar
Pero no di con la tecla para asegurar un desbloqueo de los dos bytes famosos
añadire estas instrucciones en la tabla de interrupciones para que se ejecuten en el caso de detectar el error.
Mis plaquitas me funcionan bien y no me dieron fallos de comunicacion pero es una tranquilidad sabiendo que este fallo esta controlado, a estos dos registros de la USART les he añadido 50 posiciones de memoria para formar un buffer completo y entiendo por que los registros de la USART funcionan de esta manera, para no perder datos, mi buffer por software funciona igual, si se llena no deja entrar mas datos para no perder ningun comando acumulado, hay que tener en cuenta que es una red inalambrica de plaquitas funcionando con pic16f876 y pic16f877... Muchas risas
Saludos desde Granada, España.

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: Algunas veces se me bloquea la Usart del 16F877
« Respuesta #4 en: 23 de Diciembre de 2004, 07:56:00 »
Yo tengo implementadas en un par de proyectos las rutinas que hay en la pagina de melabs ( con algunas modificaciones ) para recepcion por interrupcion en las cuales esta explicado el como desbloquear tras un error y el como detectarlo.

Hay una cadena de mensajes del amigo abago sobre un proyecto en el que se peleo mucho con este tema y esta todo muy desarrollado.

Leetelo y veras como el colega llego a tener algo funcionando perfectamente.
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Algunas veces se me bloquea la Usart del 16F877
« Respuesta #5 en: 24 de Diciembre de 2004, 19:16:00 »
Gracias, echare un vistazo...
Saludos desde Granada, España.

Desconectado rhochoa

  • PIC10
  • *
  • Mensajes: 11
Re:Algunas veces se me bloquea la Usart del 16F877
« Respuesta #6 en: 26 de Abril de 2016, 13:08:33 »
Saludos, acabo de leer sobre tu inquietud y precisamente tengo la misma, escribo para preguntar si encontraste alguna solución ya que yo no lo he logrado, intente recetear el bit OERR de esta manera
 
        bcf      RCSTA,CREN   ;Deshabilita recepcion
   bcf      RCSTA,SPEN   ;SPEN=1 Deshabilita puerto serie
   bsf      RCSTA,CREN   ;habilita recepcion
   bsf      RCSTA,SPEN   ;SPEN=1 habilita puerto serie

pero no lo soluciona, estoy intentando recibir datos de un gps y mostrarlos en pantalla, lo que seria una de las etapas de mi proyecto,
por el momento solo me muestra los dos primeros bytes.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Algunas veces se me bloquea la Usart del 16F877
« Respuesta #7 en: 26 de Abril de 2016, 15:22:11 »
La mejor solucion es usar la interrupcion para recibir caracteres. De esa forma no deberia jamas producirse un overrun. Y lo guardas en un buffer, luego podes tranquilo dentro del programa principal leer el buffer ese.

Desconectado rhochoa

  • PIC10
  • *
  • Mensajes: 11
Re:Algunas veces se me bloquea la Usart del 16F877
« Respuesta #8 en: 26 de Abril de 2016, 15:28:28 »
Ok muchas gracias por el dato, me pondré a trabajar en eso