Autor Tema: Ayuda por favor, en proyecto con pic 16f84  (Leído 3341 veces)

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

Desconectado pigma

  • PIC10
  • *
  • Mensajes: 19
Ayuda por favor, en proyecto con pic 16f84
« en: 29 de Agosto de 2010, 18:03:34 »
Hola, les comento que realice un proyecto que consiste en un pedal que por medio del pic 16F84A de un pulso de salida de 5 volts, con duracion ajustable de 1/10 a 1 Segundo (es decir que se puede ajustar cada decima de segundo) con la particularidad de que aunque se siga presionando el pedal o se suelte rapidamente, siempre mantenga el tiempo de salida predefinido.

Aqui adjunto el diagrama.

http://img836.imageshack.us/img836/1092/diagramatodopic.jpg

El problema que tengo, es que cuando alimento el circuito o dejo de alimentarlo, sale un pulso (erroneamente) asi nada mas. Sospecho que puede ser algo que me  falta en el codigo o tal vez algo de "ruido" que se provoca en el circuito al quitar o poner la alimentacion, aqui les dejo el codigo por si tienen alguna sugerencia, les agradecere mucho cualquier ayuda, gracias.

Codigo en ASM.

   LIST      P=16F84A
   INCLUDE   <P16F84A.inc>
   __CONFIG _WDT_OFF&_PWRTE_ON&_HS_OSC&_CP_OFF
   RADIX      HEX
    CBLOCK   0X20   ;PARA DECLARAR MUCHAS VARIABLES DE UN JALON
   PDel0
   PDel1
   CUENTA
   OPERACION
   ADRESS_L
   DATO_L
   TIEMPO
   SECUENCIA
   ENDC
   ORG      0X00
   GOTO   CONFIGURACION
   ORG      0X04
   GOTO   INTERRUPCION
;*************************************************************************
CONFIGURACION
   BSF      STATUS,RP0
   BCF      STATUS,RP1
   MOVLW   B'00000000'
   MOVWF   OPTION_REG
   MOVLW   0X90
   MOVWF   INTCON
   MOVLW   0X01
   MOVWF   TRISB
   MOVLW   B'11110111'
   MOVWF   TRISA
   BCF      STATUS,RP0
   CLRF   PORTB
   CLRF   PORTA
   BCF      INTCON,INTF
   GOTO   PRINCIPAL
;****************************************ZONA DELAYER**********************
;100MS
DEMORA  movlw     .110      ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .181      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  goto PDelL3         ; 2 ciclos delay
PDelL3  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.

;**************************************************************************
MOSTRAR
   MOVF   TIEMPO,W
   MOVWF   SECUENCIA
;
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'11110010'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'01001000'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'01100000'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'00110010'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'00100100'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'00000100'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'11110000'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'00000000'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'00100000'
;   
   DECF   SECUENCIA
   BTFSC   STATUS,Z
   MOVLW   B'10000010'
   MOVWF   PORTB
    RETURN
;***********************************************************
ESCRIBIR_EEPROM   
   MOVF   ADRESS_L,W
   MOVWF   FSR
   MOVF   DATO_L,W   ;aquí va el dato a escribir en EEPROM
   BSF     STATUS,RP0      ;cambiar a Banco 4
   BCF      STATUS,RP1
   BSF      EECON1,WREN   ;habilitar grabación de EEPROM
   BCF      STATUS,RP0
   MOVWF   EEDATA      ;poner dato en en EEDATA
   MOVF   FSR,W   ;dirección de EEPROM
   MOVWF   EEADR      ;ponerla en EEADR
   BSF      STATUS,RP0
   MOVLW   h'55'      
   MOVWF   EECON2      ;comando
   MOVLW   h'aa'
   MOVWF   EECON2      ;comando
   BSF      EECON1,WR   ;agregar el dato en la EEPROM
   BTFSC   EECON1,WR   ;esperar a que termine (10 ms)
   GOTO   $-1
   BCF     STATUS,RP0      ;cambiar a Banco 0
   BCF      STATUS,RP1
   RETURN
;***********LEER LA MEMORIA EEPROM DEL PIC DE LA DIRECCION "ADRESS_L" Y LO GUARDA EN "W" Y DATA_L**********
LEER_EEPROM
   MOVF   ADRESS_L,W   ;dirección de EEPROM
;   BSF     STATUS,RP1      ;cambiar a Banco 2
   MOVWF   EEADR      ;ponerla en EEADR
   BSF      STATUS,RP0      ;cambia banco 3
   BSF      EECON1,RD   ;operación de lectura
   BCF      STATUS,RP0   ;cambia banco 2
   MOVF   EEDATA,W   ;leer dato desde EEPROM y lo pasa a W
   BCF     STATUS,RP1      ;cambiar a Banco 0
   MOVWF   DATO_L   ;guardar el dato
   RETURN
;************************************************************
INTERRUPCION
   BCF      INTCON,INTF
   BCF      INTCON,GIE
   BSF      PORTA,3
   CALL   DEMORA
   DECFSZ   CUENTA
   ;BTFSC   PORTB,0
   ;GOTO   REGRESAR
   GOTO   INTERRUPCION
REGRESAR
   BCF      PORTA,3
   BTFSS   PORTB,0
   GOTO   REGRESAR
   BCF      INTCON,INTF
   RETFIE
;***********************************************************
INCREMENTAR
   INCF   TIEMPO
   CALL   DEMORA
   MOVF   TIEMPO,W
   MOVWF   OPERACION
   MOVLW   0X0B
   SUBWF   OPERACION
   BTFSC   STATUS,Z
   DECF   TIEMPO
   BTFSS   PORTA,0
   GOTO   $-1
   MOVLW   0X01
   MOVWF   ADRESS_L
   MOVF   TIEMPO,W
   MOVWF   DATO_L
   CALL   ESCRIBIR_EEPROM
   GOTO   BUCLE
DECREMENTAR
   MOVLW   0X01
   MOVWF   ADRESS_L
   CALL   DEMORA
   DECFSZ   TIEMPO
   GOTO   SKIP
   INCF   TIEMPO
SKIP
   BTFSS   PORTA,1
   GOTO   $-1
   MOVLW   0X01
   MOVWF   ADRESS_L
   MOVF   TIEMPO,W
   MOVWF   DATO_L
   CALL   ESCRIBIR_EEPROM
   GOTO   BUCLE

NUEVO
   CLRF   DATO_L
   CALL   ESCRIBIR_EEPROM
   INCF   ADRESS_L
   MOVLW   0X01
;   MOVWF   TIEMPO
   MOVWF   DATO_L
   CALL   ESCRIBIR_EEPROM      
   RETURN
RECORDAR
   MOVLW   0X01
   MOVWF   ADRESS_L
   CALL   LEER_EEPROM
   MOVF   DATO_L,W
   MOVWF   TIEMPO
   RETURN
PRINCIPAL
   CLRF   ADRESS_L
   CALL   LEER_EEPROM
   MOVWF   DATO_L
   BTFSC   DATO_L,0
   CALL   NUEVO
   CALL   RECORDAR   
   CLRF   PORTB
BUCLE
   BTFSS   PORTA,0
   GOTO   INCREMENTAR
   BTFSS   PORTA,1
   GOTO   DECREMENTAR
   CALL   MOSTRAR
   MOVF   TIEMPO,W
   MOVWF   CUENTA
   BSF      INTCON,GIE
   GOTO   BUCLE
   END   

P.D. Este foro esta excelente, quiero aprender programacion y esto es el cielo!!!!
« Última modificación: 29 de Agosto de 2010, 18:06:13 por pigma »

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Ayuda por favor, en proyecto con pic 16f84
« Respuesta #1 en: 29 de Agosto de 2010, 18:24:51 »
Hola, me parece incorrecto la parte de "MOSTRAR"... no interpreto para que es... quizas sea una tabla incompleta....  que hace?

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado pigma

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda por favor, en proyecto con pic 16f84
« Respuesta #2 en: 29 de Agosto de 2010, 18:37:23 »
MOSTRAR viene siendo VISUALIZAR, ya que cuenta con el display que a cada ajuste de 1/10 de segundo, se vea 1,2,3,4, etc.

La falla podria ser el Watchdog apagado? tambien veo que algunos ponen una resistencia entre MCLR y positivo, pero hay quien no, las dos formas son correctas?

Desconectado BOSER

  • PIC10
  • *
  • Mensajes: 25
Re: Ayuda por favor, en proyecto con pic 16f84
« Respuesta #3 en: 30 de Agosto de 2010, 00:59:38 »
Hola:

Creo que se cuál es tu problema: Durante el reset POR el valor del puerto A queda configurad como entradas y el valor del registro PORTA es aleatorio. Como configurás primero el puerto A como salida y luego hacer un CLRF PORTA, durante 4 us queda la posibilidad de que salga un estado alto por el pin RA3.

Primero hace un CLRF PORTA y luego configura el RA3 como entrada

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Ayuda por favor, en proyecto con pic 16f84
« Respuesta #4 en: 30 de Agosto de 2010, 09:08:46 »
no se si especificamente para este caso fuera esa la causa, tendría que ver mas en profundidad el resto del programa.

Pero, como norma general siempre es conveniente limpiar el valor del puerto y luego setearlo como entradas o salidas. Así como te dice BOSER. ;-)

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

Desconectado pigma

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda por favor, en proyecto con pic 16f84
« Respuesta #5 en: 31 de Agosto de 2010, 22:16:19 »
Creo que entiendo, entonces que linea le deberia agregar al codigo? disculpen es que no se mucho de programacion, voy aprendiendo pero aun me falta, me pierdo un poco a la hora de hacer algo, gracias.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Ayuda por favor, en proyecto con pic 16f84
« Respuesta #6 en: 31 de Agosto de 2010, 23:20:18 »
haces como te dice BOSER.

Si recien empiezas con los PIC y el ASM te recomiendo que vallas de a poco y como guia puedes usar los ejemplos del hilo que te copio el enlace,
http://www.todopic.com.ar/foros/index.php?topic=12345.msg69623#msg69623
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado pigma

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda por favor, en proyecto con pic 16f84
« Respuesta #7 en: 01 de Septiembre de 2010, 11:43:42 »
Muchas gracias, a estudiar se ha dicho...  :mrgreen: