Autor Tema: Ayuda con prog. basico  (Leído 4852 veces)

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

Desconectado JaM0N

  • PIC10
  • *
  • Mensajes: 19
Ayuda con prog. basico
« en: 02 de Agosto de 2010, 22:37:24 »
Hola, hace bastante que vengo visitando estos foros para desengrasarme dudas, asi que primero queria agradecer a todos por la inmensa cantidad de material cuanto menos interesante que postean. Ahora si, dicho esto, vamos al problema...

Resulta que programe un asm basico para reemplazar una alarma en mal estado. Despues de varios tumbos pude hacer andar todo... y ahora me encuentro con algo que no le veo solucion: al minuto suena sola :@ ...

Código: [Seleccionar]
activada
bsf PORTB,led
call estado
call tZ1
call tZ2
; call tZ3
call tT
goto activada

estado
btfsc PORTB,L
goto desactivada
return
tZ1
btfss PORTB,Z1
goto entrando
return
tZ2
btfss PORTB,Z2
goto suena
return
tZ3
btfss PORTB,Z3
goto alerta
return
tT
btfss PORTB,T
goto suena
return

Ese el el pedazo de codigo que controla las distintas zonas y actua dependiendo cual se activa.

Z1: Zona Temporizada             :oops:
Z2: Zona Instantanea              :5]
Z3: Zona Perimetral de Alerta   :-/
T: Tamper

PORTB,L es el bit que, comandado por el teclado, indica si esta activada o no

Bueno, es bastante facil notar que, mientras esos 5 bits del PORTB se mantengan en cero, va a estar en un bucle infinito. Salvo que infinito en este caso es 1min. Luego de ese tiempo no estoy seguro que es lo que ocurre, pero los pins de salida se ponen en 1 (recien ahora se me ocurre ver si es porque salta a la funcion "suena")

Por favor, si a alguien se le ocurre que es lo que puede hacer que esa rutina falle, le voy a estar muy agradecido

PD: Alguien podra decirme "porque no lo hiciste con interrupciones"... la ironica respuesta es "para no complicarme y que salga bien de una" ... Grrr


EDIT: Olvide poner PIC 16F88 y la config
Código: [Seleccionar]
    __CONFIG _CONFIG1, _WDT_OFF & _PWRTE_ON & _INTRC_IO & _MCLR_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_PROTECT_OFF & _DEBUG_OFF & _CCP1_RB0 & _CP_OFF
    __CONFIG _CONFIG2, _FCMEN_OFF & _IESO_OFF
« Última modificación: 02 de Agosto de 2010, 23:53:07 por JaM0N »

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda con prog. basico
« Respuesta #1 en: 03 de Agosto de 2010, 01:08:50 »
Hola: Primero, tengo lagañas aún  :mrgreen:
Segundo, sube todo el programa que sino no me entero por donde otra parte puedes haberla pifiado.
Tercero, a simple vista no veo las rutinas antirrebotes para las entradas.
Cuarto, me voy a lavar la cara  :D
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado JaM0N

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda con prog. basico
« Respuesta #2 en: 03 de Agosto de 2010, 13:28:42 »
Primero, pibe, a las 01:08 tenias lagañas  :shock:? o esta mal la hora del post ?
Segundo, adjuntado esta el programa completo.
Tercero, son sensores de apertura magneticos, no me parecio necesario, y si hace rebotes en realidad no influye porque una vez que toma el primer pulso, o suena o temporiza 30 seg. independentemente de si vuelve/n a abrirce o cerrarse la/s puerta/s. El bit PORTB,L viene del teclado de la alarma y es digital
Cuarto, me voy a comer  :-/

Desconectado JaM0N

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda con prog. basico
« Respuesta #3 en: 06 de Agosto de 2010, 13:56:22 »
No es de cargoso e insistente, pero de verdad no le veo la salida, y es lo unico que me falta para que quede andando. Por favor, si a alguien se le enciende el led de que puedo estar haciendo mal, que me tire unos anteojos asi lo veo  :P

El watchdog esta desactivado, hay algun otra cosa que pueda hacer que luego de 60s el programa haga algo inesperado?

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ayuda con prog. basico
« Respuesta #4 en: 06 de Agosto de 2010, 15:37:02 »
A mi en el MPLAB no me salta, lo he dejado varios minutos y sigue en el bucle.
Tuve que cambiar esto porque me tiraba errores:

;--- Salidas ---
si   equ   0   ;Sirena interna (a relay via transistor)
se   equ   1   ;Sirena externa (idem)
led   equ   2   ;Led activada/desactivada (directo a masa onboard)

Puede que por alguna razon portb,z2 se te ponga a 0? mira que sensor lleva ahi, posiblemente se te este activando por alguna razon.

tZ2
   btfss   PORTB,Z2   ;Si Z2=0
   goto   suena      ;entraron por la ventana (al estilo juez) sona la sirena
   return

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Ayuda con prog. basico
« Respuesta #5 en: 06 de Agosto de 2010, 16:22:43 »
hola, como va eso, mira hace tiempo que no toco el assembler pero creo que he notado algo, seguro alguien mas en el tema y que este bien canchero te lo sepa asegurar.

Cuando dices que haces el loop infinito creo te refieres cuando ves el estado de PORTB,L y creo aqui es donde podrías poner el antirrebote.
A partir de la etiqueta activada llamas a unas subrutinas, primero estado, luego tZ1 y así, pero veo que en estado es donde vuelves a ver el estado de PORTB,L y sales con un goto hacia desactivada, y aqui es donde creo esta el error, porque si usas la llamada a una funcion con call, debes volver con return.

El por qué de esto es que por cada llamada con call, el pic guarda esa posición para volver con return, y si sales con un goto en el proximo return que encuentre quien sabe lo que hara el pic, ademas de que si no me equivoco el stack tiene solo 8 niveles, es decir, puedes hacer solo 8 llamadas con call.

Esto es algo muy simple, y veo que en tu programa usas muchos goto, y justamente es lo que deberias evitar.

Y con respecto a esto de los call y los goto, creo que deberias escribir tu código así:

Código: [Seleccionar]
inicio
bcf PORTB,si ;Apaga las sirenas
bcf PORTB,se ;^^^^^ ^^^ ^^^^^^^
bcf PORTB,led ; y el led
btfsc PORTB,L ;L=0 -> Activada
goto inicio ;podria ir un delay anti rebote

activada
bsf PORTB,led ;Enciende el led
btfss PORTB,Z1 ;Testea si se abrio la zona 1 y actua en consecuencia, Z1=0 -> Activada
call Zona1Act ;en Zona1Act haces lo que corresponda, prender un led, activar la sirena,
;lo que corresponda y vuelves con return
btfss PORTB,Z2 ;
call Zona2Act ;Idem Zona1Act
btfss PORTB,Z3 ;
call Zona3Act ;Idem Zona1Act
btfss PORTB,L ;L=1 -> Desactivada va hacia el inicio donde apaga las sirenas y comienza otra ves
goto activada ;L=0 -> Activada sigue en este bucle
goto inicio

Es muy simple el código que he hecho, pero seria el comienzo.

Y ahora una pregunta, este programa lo estas probando en un circuito físico?
Si es así, estas poniendo las entradas con resistencias de pull-up o pull-down?
Los sensores de las puertas tipo magneticos son normal cerrado, o deberian, para evitar que te corten el cable y no se active.

Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ayuda con prog. basico
« Respuesta #6 en: 07 de Agosto de 2010, 05:18:48 »
Yo no he llegado a esa parte pero creo que ahi no hay problema willy, el donde llama con goto despues retorna con otro goto, y asi funciona igual que con call y return, con los call es mas organizado el programa, pero a lo mejor el le quiere dar preferencia a los sensores que estan primero en el programa y por eso regresa siempre al principio de la etiqueta. De todos modos el fallo que el dice en el simulador no lo da, lo he tenido varios minutos y no sale del bucle, la unica manera de que salga del bucle a la etiqueta suena es por activacion de portb,z2, es decir que ese sensor se ponga a 0. Esto lo dice el simulador en la realidad......

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Ayuda con prog. basico
« Respuesta #7 en: 07 de Agosto de 2010, 11:08:22 »
Claro puede ser así lo de los goto, es que tratando de no usarlos queda mas legible el programa.

Y entonces puede ser que portb, z2 se este activando por ruido?
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ayuda con prog. basico
« Respuesta #8 en: 07 de Agosto de 2010, 11:53:11 »
Citar
[Y entonces puede ser que portb, z2 se este activando por ruido?/quote]


Pues si que puede ser, el ruido nos hace muchas putadas

Desconectado JaM0N

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda con prog. basico
« Respuesta #9 en: 08 de Agosto de 2010, 18:57:07 »
Bueno antes que nada gracias por la ayuda.

El tema del ruido me parece que no puede ser porque lo cronometre y da siempre 60 seg. Pero ahora me surgio otra teoria... puede ser que el problema en realidad, este en el teclado de la alarma.

El sistema consta de un teclado (made in cordoba) y una central (que tambien era made in cordoba). Andaban bien, hasta que un dia dejo de andar bien... y asi estubo por mucho tiempo, sin andar. Y ahora surgio la necesidad de hacerla funcionar nuevamente y, sin mas objeciones, decidi programar la central en un pic, con el interes de darle mejores funcionalidades en un futuro. Lo que hice entonces fue hacer este prog, y usar el mismo teclado que esta diseñado para almacenar las contraseñas, verificar los codigos ingresados y controlar el tiempo de salida. Al introducir un codigo de activacion, el teclado cuenta 30 seg y luego pone en cero el pin de activacion (PORTB,L) dejando el resto a la central. Lo que me parece que puede estar fallando es el teclado, ya que tiene una funcion de anulacion de zona que, tal vez, este fallando. Tendre que probar eso, y si no es ese el problema... pues tendre que hacer un nuevo teclado xD

De todas formas voy a seguir adelante con este proyecto y vere de programar todo, realizar esquematicos, etc. por si alguien lo necesitase.

Saludos

Desconectado JaM0N

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda con prog. basico
« Respuesta #10 en: 08 de Agosto de 2010, 23:19:45 »
Bueno, estoy abrumado...

No entiendo que es lo que esta fallando

todo anda bien, pero despues de 1min de estar en el bucle de activada... salta a suena... todo lo demas esta bien, suena durante 5 min y corta, sigue activada, si L=1 se desactiva, etc etc etc...
Pero despues de 1min en este bucle... se muere! y salta a suena...

Código: [Seleccionar]
activada
bsf PORTB,led ;Enciende el led
call estado ;Pregunta si se desactivo...
call tZ1 ;Testea si se abrio la zona 1 y actua en consecuencia
call tZ2 ;Testea si se abrio la zona 2 y actua en consecuencia
call tT ;Testea si se abrio algun sensor tamper y actua en consecuencia
goto activada ;y queda haciendo esto por siempre (fatal error: luego de un minuto salta a suena)

estado
btfsc PORTB,L ;Si L=1
goto desactivada ;desactiva
return
tZ1
btfss PORTB,Z1 ;Si Z1=0
goto entrando ;entro alguien por la puerta
return
tZ2
btfss PORTB,Z2 ;Si Z2=0
goto suena ;entraron por la ventana (al estilo juez) sona la sirena
return
tT
btfss PORTB,T ;Si T=0
goto suena ;Me estan desarmando los sensoress... sonaa
return


Estoy provando el circuito en una proto, con las Z1, Z2 y T conectadas a Vcc y L conectado a Vss y durante 60 seg esta activada sin sonar, y luego por 300 seg esta activada sonando, y luego pasa a estar activada sin sonar por otros 60 seg... y asi lleva unos 5 ciclos...

Desconectado JaM0N

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda con prog. basico
« Respuesta #11 en: 08 de Agosto de 2010, 23:37:15 »
Tengo una pregunta... cuando programo el dispositivo (con piklab) programa y verifica todo, pero me da error al "Verificar memoria: User IDs " me dice "Memoria de dispositivo no coincide con archivo hex (en User IDs en dirección 0x2000: leído 0x0000 esperando 0x000E). " pero nunca le di mucha importancia, ya que la memoria de codigo y los bits de configuracion son correctos...

Puede haber un problema ahi?

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ayuda con prog. basico
« Respuesta #12 en: 14 de Agosto de 2010, 05:51:58 »
Nunca use el piklab pero no creo que sea ese el problema, lo que puedes hacer es bajarte de la pag. de microchip el MPLAB ( es gratuito ) y lo programas desde ahi y sales de dudas.

Saludos y suerte.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda con prog. basico
« Respuesta #13 en: 14 de Agosto de 2010, 08:50:27 »
Hola. No estas descargando correctamente el STACK.

Ejemplo:

Código: ASM
  1. activada
  2.         bsf     PORTB,led       ;Enciende el led
  3.         call    estado          ;Pregunta si se desactivo... ACA EL STACK SE CARGA en 1 NIVEL
  4.         ...
  5.  
  6.  
  7. estado
  8.         btfsc   PORTB,L         ;Si L=1
  9.         goto    desactivada     ;desactiva          PERO ACA NO. DESACTIVADA NO TIENE NINGUN RETURN, por lo que siempre estas cargando el STACK..Causando un overflow seguramente
  10.         return                       ;ACA LO DESCARGAS BIEN, PERO ESTA LINEA SOLO SE EJECUTA SI PORTB, L ESTA EN 0...

Este error aparece múltiples veces en tu código. Te vas a tener que sentar a corregirlo, con paciencia, revisando todos los calls,goto return, retlw o retfie para que la carga y descarga del stack se realice correctamente.

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 willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Ayuda con prog. basico
« Respuesta #14 en: 14 de Agosto de 2010, 09:50:40 »
Si yo creo que es eso, estas usando mucho los goto, como te comentaba en este mensaje anterior.

Prueba de rehacer el programa de la forma que te proponia con los call.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.


 

anything