TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: superprp en 13 de Junio de 2008, 10:29:40
-
Buenas,
alguien sabe porque puede dejar de interrumpir la UART y como puede solucionarse?
si envio solo un par de bytes no pasa nada, pero si le envio muchos bytes y muy seguidos es cuando me pasa esto, deja de interrumpirme por la UART
-
superprp:
Creo que tu problema es porque llevas a un overflow el USART del micro. Este tiene solo un FIFO de 2 bytes, asi que si no lees esos 2 bytes antes de que llegue un tercero, se genera un overflow bloqueando y perdiendo los datos en el USART.
Saludos.
Elreypic.
-
y no hay ninguna forma de recuperar el estado de la UART o de salir de la condición de overflow? no hay nada que hacer si te llegan datos mas rapido de lo que puedes leer?
-
Se podría solucionar asi???
http://www.todopic.com.ar/foros/index.php?topic=19026.msg134941#msg134941
Un saludo desde Alicante.
-
así no he conseguido solucionarlo, es como si perdiera tiempo en la interrpción a de la UART... he probado con todas las velocidades: 9600, 19200, 38400, 57600. y nada
-
Has puesto ERRORS en el ´#use rs232´?
Un saludo desde Alicante.
-
lo puedes explicar mejor???? gracias
Me está saltando el bit de OERR, lo reseteo para que siga funcionando pero no recibo todos los paquetes, entiendo que es por una saturación de buffer, pero trabajando a 57600 baudios y con un 20MIPS, no entiendo como es posible que no le de tiempo a leer... alguna idea???
gracias!
-
Buenas de nuevo!!
Yo sigo con mis problemas con la UART del PIC en la que espero hacerme un experto en el control de sus bits... jeje. Ay va el problema en cuestión.
Resulta que viendo el registro U2STA observo que el bit 8, el TRMT está a 0, lo cual indica que el shift register no está vacío, y este bit es de solo lectura, pues resulta que este bit no se me resetea, y no se si es porque se me ha quedado pillado o porque tengo que resetear algo en cuestión, alguien puede ayudarme???
-
Creo ke la idea ke te puede funcionar es la de crear un array de bytes ke utilizaras de buffer de recepcion del canal serie y despues habilitar las interrupciones del canal serie. Cada vez ke te llegue un dato, saltara la interrupcion, en ella mueves el dato al buffer... una vez ejecutada la interrupcion el programa seguira por donde se estaba ejecutando. Despues tienes ke preocuparte de rescatar esos datos. Te puedes crear un flag de control ke tienes datos en el buffer o algo asi...
Con esto conseguiras no perder datos del canal serie y tampoco llegar a tener overflow.