Autor Tema: Problema del UART del DSPIC 30F4013  (Leído 4339 veces)

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

Desconectado ingwirbo

  • PIC10
  • *
  • Mensajes: 7
Problema del UART del DSPIC 30F4013
« en: 12 de Octubre de 2012, 01:37:28 »
Estimados

Tengo el siguiente problema:

Se que el buffer de recepcion del dspic30f4013 es de 4 bytes. Ahora en la aplicación que estoy trabajando estoy utilizando los dos puertos seriales, y cada uno se conecta a dos equipos diferentes, por lo que por uno de los puertos me estan interrogando a traves del uart2 y yo estoy interrogando al otro equipo a traves del uart1, entonces dado esto se da el caso en que mientras estoy interrogando el equipo a traves del uart1, simultaneamente me estan interrogando por el uart2, por lo que no tengo en cuenta estos datos. Pero entonces que pasa, que cuando estoy disponible para recbir los datos de quien me interroga, parece que el puerto pierde sincronía o no recibe el último dato, parece que estuviera recibiendo un dato anterior y no el que acaba de llegar, y la unica forma de volverlo a recibir normalmente es deshabilitando y luego volviendo a habilitar el uart2.

Por favor existe alguna forma de borrar el buffer de recepción sin necesidad de deshabilitar el uart2.   O cualquier otra sugerencia para evitar este problema se los agradeceria mucho.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema del UART del DSPIC 30F4013
« Respuesta #1 en: 12 de Octubre de 2012, 10:18:05 »
Hola, yo normalmente uso interrupciones para la lectura del uart y manejo directamente el código, es decir no recurro a las librerias de microchip. Cómo lo estas haciendo?, si es posible coloca el código para ver como lo estás haciendo.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado ingwirbo

  • PIC10
  • *
  • Mensajes: 7
Re: Problema del UART del DSPIC 30F4013
« Respuesta #2 en: 12 de Octubre de 2012, 11:20:05 »
Hola, yo normalmente uso interrupciones para la lectura del uart y manejo directamente el código, es decir no recurro a las librerias de microchip. Cómo lo estas haciendo?, si es posible coloca el código para ver como lo estás haciendo.

saludos.


Estimado Kallitos

No estoy usando interrupciones porque en el momento que estoy interrogando al equipo a traves del uart1, no puede detener este proceso para atender el uart2. por esta razón el problema sucede cuando estoy atendiendo simultaneamente los dos puertos ya que siempre le doy prioridad al uart1 y lo que llega al uart2 solo lo tengo en cuenta cuando estoy esperando respuesta por aqui (esto es un slot de 500 ms).

Este es una parte del codigo:

ESTADO_SURTIDORES:


   MOV      #0X00010,W0
   MOV      W0,CONTEO
   MOV      #0X0900,W2
   MOV      #0X0000,W0
   MOV      W0,CARA_SURTIDOR

   MOV      BANDERAS_SURTIDOR,W0

   CALL   DESHABILITAR_UART2

ESTADO_SURTIDORES_A:

   ;********************** ;ESTE ES EL SLOT DE TIEMPO DE 500 ms QUE ESPERO PARA RECIBIR UNA INTERROGACION EN UART1
   CALL   INICIAR_TIMER3
   CALL   RECIBIR
   BTSS   T_ESPERA,#0
   GOTO   TEST_485
   CALL   PARAR_TIMER3
   ;**********************

ESTADO_SURTIDORES_LP:

   CLRWDT
   CALL   PARAR_TIMER3
   CALL   TDELAY      ;***********50 MILISEGUNDOS

   CALL   HABILITAR_UART2
;   CALL   DESHABILITAR_UART1

   ;*******************
   MOV      CARA_SURTIDOR,W0
   CALL   PARIDAD_PAR
   CALL   ENVIAR2

   CALL   RECIBIR2
   MOV      W0,DATA0

   CALL   RECIBIR2
   MOV      W0,DATA1
     
       GOTO         ESTADO_SURTIDORES


Espero haya sido claro.

Gracias y Saludos

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema del UART del DSPIC 30F4013
« Respuesta #3 en: 12 de Octubre de 2012, 11:59:36 »
Joer en asm no veo nada, espero alguien mas te ayude.

Saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado ingwirbo

  • PIC10
  • *
  • Mensajes: 7
Re: Problema del UART del DSPIC 30F4013
« Respuesta #4 en: 12 de Octubre de 2012, 12:47:44 »
Kallitos

Independientemente de que sea asm, por casualidad sabes como borrar el bufer del usart sin necesidad de deshabilitarlo, o tu tienes alguna forma de hacerlo.

Porque tengo una duda, cuando nos dicen que en el buffer tiene una capacidad de 4 bytes esto significa que el usart es capaz de almacenar hasta 4 bytes antes de que este es leido, ahora si quiero recuperar todos estos bytes almacenados en el buffer tendría que leer 4 veces el UxRXREG. o como maneja esto el usart?.

Te agradezco si conoces algo al respecto.

Saludos 

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problema del UART del DSPIC 30F4013
« Respuesta #5 en: 12 de Octubre de 2012, 13:17:45 »
Si no pensas nunca escuchar la recepción de datos por UART2 mientras estás escribiendo/leyendo de la UART1, lo mejor que me parece que podés hacer es deshabilitar la UART2 justo antes de comenzar a trabajar sobre la UART1, y volver a habilitarla al terminar su trabajo.


El que indica desbordamiento del buffer es el flag OERR, mapeado en UxSTA<1>. Se setea en varias situaciones, entre ellas, cuando has superado la capacidad de almacenamiento del buffer de la UART. El datasheet no indica nada al respecto, pero tal vez limpiándolo (poniendolo a cero) te limpie también el buffer de recepción. Igualmente creo que con limpiar ese bit, no tendrías la necesidad de reiniciar la UART.

Saludos.


"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ingwirbo

  • PIC10
  • *
  • Mensajes: 7
Re: Problema del UART del DSPIC 30F4013
« Respuesta #6 en: 12 de Octubre de 2012, 14:04:34 »

El que indica desbordamiento del buffer es el flag OERR, mapeado en UxSTA<1>. Se setea en varias situaciones, entre ellas, cuando has superado la capacidad de almacenamiento del buffer de la UART. El datasheet no indica nada al respecto, pero tal vez limpiándolo (poniendolo a cero) te limpie también el buffer de recepción. Igualmente creo que con limpiar ese bit, no tendrías la necesidad de reiniciar la UART.



Estimado Brunof

Con relación a lo que me comentaste y que cito aqui, la solución fue la siguiente: en ningún momento deshabilité el uart2, simplemente antes de utilizarlo sense la bandera de OERR que me indicaste y si estaba en uno la borraba de lo contrario la dejaba igual. de esta forma he logrado que nunca se pierda la sincronía de los datos cuando leo uno u otro puerto.

Muchas Gracias

Saludos

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema del UART del DSPIC 30F4013
« Respuesta #7 en: 12 de Octubre de 2012, 14:54:48 »
Considero que tanto para recibir y/o transmitir en ambos puertos no es necesario deshabilitar el modulo "opuesto", la situación amigo es que uso C30 y alli lo que hago es hacer un arreglo de bytes a modo de buffer por software.

La recepción usando interrupción indica cuando llega el byte, en el código de la interrupción leo el buffer lo guard en el buffer e inmediatamente salgo de la misma, y claro usar un byte que indique la operación con los datos recibidos.

En la transmisión de igual manera, hacer un buffer e iniciar el procedimiento habilitando la interrupción y en el código de interrupción leer el buffer y colocarlo en el registro TX.

Considero que los dspic son lo suficientemente rápidos para hacer lo que mencionas, he usado muchas interrupciones en el mismo micro y éste no me ha decepcionado.

saludos!!
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado ingwirbo

  • PIC10
  • *
  • Mensajes: 7
Re: Problema del UART del DSPIC 30F4013
« Respuesta #8 en: 12 de Octubre de 2012, 15:11:39 »
Considero que tanto para recibir y/o transmitir en ambos puertos no es necesario deshabilitar el modulo "opuesto", la situación amigo es que uso C30 y alli lo que hago es hacer un arreglo de bytes a modo de buffer por software.

La recepción usando interrupción indica cuando llega el byte, en el código de la interrupción leo el buffer lo guard en el buffer e inmediatamente salgo de la misma, y claro usar un byte que indique la operación con los datos recibidos.

En la transmisión de igual manera, hacer un buffer e iniciar el procedimiento habilitando la interrupción y en el código de interrupción leer el buffer y colocarlo en el registro TX.

Considero que los dspic son lo suficientemente rápidos para hacer lo que mencionas, he usado muchas interrupciones en el mismo micro y éste no me ha decepcionado.

saludos!!



Estimado Kallitos

Entiendo lo que mencionas pero al habilitar la interrupción te comento que me podría suceder. Resulta que cuando yo interrogo el equipo a traves de uart1, podría obtener una respuesta hasta de 120 bytes, por lo cual si en el momento que estoy recibiendo estos datos se acitva la interrupción del uart2 pues voy a recibir tambien información de quien me interroga a traves de este puerto que también son tramas granddes (50 bytes), entonces puede suceder que pierda datos que son críticos del equipo conectado al uart1. por esta razón preferí no usar las interrupciones en este caso. Ahora con relación al problema que tenía, borrando la bandare de OERR cuando esta se activa pude solucionar el inconveniente que tenía.

De verdad muchas gracias por tu valiosa ayuda.

Saludos,

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema del UART del DSPIC 30F4013
« Respuesta #9 en: 12 de Octubre de 2012, 15:31:31 »
No leí que ya lo habías solucionado. :)

Saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.