Autor Tema: SERIN me cuelga el PIC  (Leído 4069 veces)

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

Desconectado Marioguillote

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
SERIN me cuelga el PIC
« en: 18 de Diciembre de 2006, 11:10:36 »
Hola amigos !

Estoy teniendo un inconveniente con la instrucción SERIN.

Estoy usando un PIC16F876A y Protón +

Y obviamente el GTB USB +  :-/  :-/  :-/  :mrgreen:

Tengo hecho en parte de un progama extenso, una conexión con la PC vía RS 232 y con el comando SEROUT no tengo ningún problema.
Estoy usando :

SEROUT TX,84, [" ",DEC1 T," ",DEC1 H," "]

y todo vá de perlas. Me entrega los datos que le pido y los veo en la compu sin problemas, en el momento deseado.

Ahora bien; cuando voy a usar SERIN, se me provoca un cuelgue en el funcionamiento del PIC y se "para" , se detiene, todo el proceso.

Estoy usando esta sintaxis:

LEER:
SERIN RX, 84, [MEM]
IF MEM = "A" THEN GOSUB LEOMEM
RETURN

Desde un momento del bucle principal, llamo a la subrutina LEER, luego con SERIN debiera recibir vía RS232 un dato que guardaría en la variable [MEM].
Si el dato recibido fuese la letra "A" saltaría a otra subrutina (LEOMEM) y sino es esa letra, volvería al bucle principal con el RETURN

MEM es una variable BYTE.
Para salir a la PC uso RA4 sin problemas, para entrar al PIC desde la PC uso RA5.
RA0 y RA1 son entradas analógicas y RA2 es salida digital.
Por lo tanto tengo declado al principio del programa

TRISA = %00100011
ADCON1 = %10000100
CMCON = %00000111

Pero al llegar a la línea del SERIN , se detiene todo.
He corroborado que es en esa línea mi problema, usando indicaciones en el LCD que tiene el sistema, escribiendo tonterías en lineas previas y posteriores y de esa forma he confirmado que llega hasta ahí y se detiene.

RA5 estaba siendo usada como salida digital y funcionaba OK. Levanto la conexión desde el MAX232, por posible problema en el mismo y sigo teniendo el mismo problema.

También tengo declaradas al principio

DIM TX AS PORTA.4
DIM RX AS PORTA.5

En qué me estoy equivocando ?
Qué se me está escapando ?
Tengo otra forma en Protón de detectar el pulsar de una tecla, para activar un proceso ?

Estoy trabado.

Desde ya les agradezco la lectura de este post y la posible ayuda que me puedan brindar.

Saludos
Mario      

Desconectado Marioguillote

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: SERIN me cuelga el PIC
« Respuesta #1 en: 18 de Diciembre de 2006, 11:41:52 »
Un dato más.

Probé con

SERIN RX, 16468, [MEM]

y el sistema no se cuelga, pero no me toma la tecla pulsada .....

Al principio probé para recibir datos en la PC con

SEROUT TX,16468, [" ",DEC1 T," ",DEC1 H," "]

Y me daba cualquier cosa, cuando cambié 16468 por 84, empecé a recibir correctamente, y la ayuda del Protón dice que se debe usar el mismo en Tx y Rx ......  :(

Desconectado doppel

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1534
Re: SERIN me cuelga el PIC
« Respuesta #2 en: 18 de Diciembre de 2006, 11:58:07 »
Hola Mario

Probaste metiendo pequeñas pausas entre recibir y leer?
otra cosa que se me ocurre es que pruebes de usar esto

SERIN RX , 16468, [ WAIT( "A" ) , SERDATA]

si bien el WAIT es para cadenas seria bueno probarlo
saludos

PD: despues de esto solo te quedaria seguir probando con las velocidades de transferencia y las del Xtal
« Última modificación: 18 de Diciembre de 2006, 11:59:48 por doppel »
" Para ser exitoso no tienes que hacer cosas extraordinarias. Haz cosas ordinarias, extraordinariamente bien "

Desconectado Marioguillote

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: SERIN me cuelga el PIC
« Respuesta #3 en: 18 de Diciembre de 2006, 12:05:54 »
Hola Hernán !
Gracias por estar ahí ! :)

Voy a probar eso del WAIT.
Me quedaría algo así:

SERIN RX , 84, [ WAIT( "A" ),MEM]

Porque lo que es estoy esperando es el caracter A, para ponerlo en la variable MEM. O tal vez poner entre los paréntesis, el valor ASCII de la letra que espero recibir? ... voy a hacer esas pruebas.

Otra cosa que no puse antes. También probé a menores velocidades (baudrates) con el mismo resultado negativo.

Otra cosita Hernán. Disculpame que no te contesté el privado, pero obvio que me gustaría tener esa reforma para el STK. Mandámela cuando quieras.

Saludos
Mario

Desconectado doppel

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1534
Re: SERIN me cuelga el PIC
« Respuesta #4 en: 18 de Diciembre de 2006, 12:12:50 »
Si Mario!!  es asi como decís

SERIN RX , 84, [ WAIT( "A" ),MEM]

pasa que yo modifiqué un ejemplo y me olvidé de cambiar la variable  :-)
Con lo de los ASCII tb podrias probar por que los datos los tira en ASCII pero no si es es eso, parece ser un problema de velocidades, probá tb de subir la velocidad del micro.-
A ver si alguien más nos da su opinión.-

saludos
" Para ser exitoso no tienes que hacer cosas extraordinarias. Haz cosas ordinarias, extraordinariamente bien "

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: SERIN me cuelga el PIC
« Respuesta #5 en: 18 de Diciembre de 2006, 12:24:34 »
Bueno, yo no uso proton+, trabajo en ccs, por lo que dire cuando se me ha presentado el mismo problema.

1.- Cuando configuro mal la frecuencia de trabajo del PIC.
2.- Cuando configuro mal los pines a usar para el RS232,
3.- Cuando el cable que estoy usando estaba cruzado, cuando deberia ser directo.
(este anterior me saco canas verdes dure casi 1 semana para saber que el error era ese)
Revisa el impreso, o tu esquematico y verifica que no tienes error en ello

4.-
Hay una instruccion que permite leer todos los datos que lleguen por RS232 en cadena y se detiene automaticamente hasta que llegue el ascci 13 (ENTER). entonces el programa del PC nunca enviaba ENTER.

5.- Cuando el Max 232 se daño y ni idea de que lo estaba.
 

En este momento no recuerdo mas, pero apenas me acuerde, los montare aca.

Saludos y espero que soluciones el problema.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: SERIN me cuelga el PIC
« Respuesta #6 en: 18 de Diciembre de 2006, 12:28:48 »
Hola:

Bueno, no he usado serin en proton, pero si mas bien el cuelgue se podria dar por la segnda cosa que comenta, el wait hace un tipo bucle que esperaria a que la A llegara, si esta no llega seguira esperando, seria como tener esto:

Repit
-
-
until MEM="A"

me imagino que sera asi, ya que en PBP pasa lo mismo.

No se como estes declarando los datos, paridad y esas cosas, revisa tambien si el dato que estas recibiendo esta o no invertido, o puedes probar a recibir los datos a 2400 baudios, solo para ver si hasta alli esta andando bien.

Como digo, no he usado serin en proton, pero el codigo que pusiste:

LEER:
SERIN RX, 84, [MEM]
IF MEM = "A" THEN GOSUB LEOMEM
RETURN

Esta bien y no deberia dar problemas... almenos eso pienso  :P

« Última modificación: 18 de Diciembre de 2006, 12:30:37 por LordLafebre »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: SERIN me cuelga el PIC
« Respuesta #7 en: 18 de Diciembre de 2006, 14:06:53 »
Que tal a todos, espero la pasen bien esta navidad.

Con referente al codigo, efectivamente la estructura es correcta aunque tal vez para el proposito final no es asi. Voy a intentar de explicar por que (pero igual puedo estar equivocado).
En la subrutina:

LEER:
SERIN RX,84,[MEM]
IF MEM = 'A' THEN GOSUB LEOMEM
RETURN

La instruccion SERIN RX,84,[MEM] hara que el micro se quede ahi ciclado esperando la recepcion de algo, cualquier cosa, esto hace que efectivamente elmicro se cuelge, hasta que reciba algun dato en este pin. Para evitar esto algo que yo uso en PBP pero que es igual en Proton es lo siguiente:

LEER:
SERIN RX,84,500,TO_ERROR,[MEM]
IF MEM = 'A' THEN GOSUB LEOMEM
TO_ERROR:
RETURN

La instruccion anterior del SERIN, lo que hara ahora es esperar un dato (cualquier dato) durante 500 milisegundos, pero si no llegara nada en ese lapso de timepo entonces saltara a la etiqueta TO_ERROR, en la cual a su vez esta la instruccion RETURN lo que provocara que se regrese al programa principal.

Otra cosa que pudiera ser, es el desborde del stack cuando usas varios GOSUB anidados como es en tu caso (que al menos existen 2, no se si dentro de LEOMEM tengas mas GOSUB, lo cual pudiera provocar el desborde del stack), para ello no recuerdo cuantos puedes usar en esta forma en proton, creo que son 8 para la familia PIC16F y algo asi como 28 para la familia 18.

Espero que esto sea de utilidad.

Saludos.
Elreypic.

Desconectado Marioguillote

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: SERIN me cuelga el PIC *** SOLUCIONADO ***
« Respuesta #8 en: 18 de Diciembre de 2006, 18:38:47 »
Hola Amigos !

Gracias a todos por los aportes que me han hecho.

La solución estaba aquí :

Otra cosa que pudiera ser, es el desborde del stack cuando usas varios GOSUB anidados como es en tu caso (que al menos existen 2, no se si dentro de LEOMEM tengas mas GOSUB, lo cual pudiera provocar el desborde del stack), para ello no recuerdo cuantos puedes usar en esta forma en proton, creo que son 8 para la familia PIC16F y algo asi como 28 para la familia 18.

Primero hice la prueba con

LEER:
SERIN RX,84,500,TO_ERROR,[MEM]
IF MEM = 'A' THEN GOSUB LEOMEM
TO_ERROR:
RETURN

Seguía igual. Se colgaba al llegar a la instrucción SERIN

Luego conté los GOSUB que tenía en el bucle principal y descubrí que con éste llamado, eran 9
Cambié dos GOSUB por las rutinas correspondientes, me quedaron 7 llamadas a GOSUB y entonces ahí   :-/  :-/  :-/ funcionó de maravillas !

Así que amigos del Protón, a no abusarse de los GOSUB.

GRACIAS elreypic2 por la solución y GRACIAS Hernán, LordLafebre y PICmouse por la ayuda ofrecida.

 :-/  :-/  :-/  :-/

Problema solucionado !!!!!

Saludos
Mario
 

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: SERIN me cuelga el PIC
« Respuesta #9 en: 18 de Diciembre de 2006, 19:21:21 »
Mario Que bueno que solucionaste tu problema.  :-/ En el momento que necesites ayuda solo grita SoS y con mucho gusto te ayudaremos.