Autor Tema: Problema con contador up/down pic16f84  (Leído 9454 veces)

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

Desconectado tavisho

  • PIC12
  • **
  • Mensajes: 94
Problema con contador up/down pic16f84
« en: 22 de Febrero de 2008, 16:38:17 »
Hola foreros, soy octavio con algunas preguntas q necesito q me respondan. Resulta que he estado trabajando sobre los programas de el libro de Laboratorio de Microelectronica ; en el cual está presente este pequeño código assembler

Citar
;Contador UP/DOWN decimal de un dígito
;
;Sobre el display 7 segmentos conectado a la puerta B se visualizará el número de pulsos
;aplicados por la entrada RA0. RA1 determina si la cuenta es ascendente (a "1")
;o descendente
   
      List   p=16F84      ;Tipo de procesador
      include   "P16F84.INC"   ;Definiciones de registros internos
                   
Contador   equ   0x0c      ;Variable del contador
      __CONFIG  _CP_OFF  & _WDT_ON & _PWRTE_ON & _XT_OSC
      org   0x00      ;Vector de Reset
      goto   Inicio

      org   0x05      ;Salva el vector de interrupción

;**********************************************************************************
;Tabla_7_seg: Esta rutina convierte el código BCD presente en los 4 bits de menos peso
;del reg. W en su equivalente a 7 segmentos. El código 7 segmentos retorna también
;en el reg. W

Tabla_7_seg   addwf   PCL,F      ;Desplaza al PC tantas posiciones como indique el valor
               ;del registro W
      retlw   b'10111111'   ; código del 0
            retlw   b'10000110'   ;1
            retlw   b'11011011'   ;2
            retlw   b'11001111'   ;3
            retlw   b'11100110'   ;4
            retlw   b'11101101'   ;5
            retlw   b'11111101'   ;6
            retlw   b'10000111'   ;7
            retlw   b'11111111'   ;8
            retlw   b'11100111'   ;9

Inicio           clrf    PORTB      ;Borra los latch de salida
      bsf   STATUS,RP0   ;Selecciona banco 1
      clrf   TRISB      ;Puerta B se configura como salida
      movlw   b'00011111'      
      movwf   TRISA      ;Puerta A se configura como entrada      
      movlw   b'00000110'
      movwf   OPTION_REG   ;Preescaler de 128 para el TMR0
      bcf   STATUS,RP0   ;Selecciona banco 0                                                                                  
      clrf   Contador   ;Puesta a 0 del contador
            
Loop      movf   Contador,W
      call   Tabla_7_seg   ;Convierte BCD a 7 segmentos
      movwf   PORTB      ;Visualiza el valor del contador

Wait_0      clrwdt         ;Refrescar el WDT
      btfss   PORTA,0      ;Subida de la señal RA0 ?
      goto   Wait_0      ;No
      sleep         ;Modo standby en espara de 18mS. Elimina rebotes

Wait_1      clrwdt         ;Refrescar el WDT
      btfsc   PORTA,0      ;Bajada de RA0 (pulso) ??
      goto   Wait_1      ;No
      sleep         ;Modo standby en espara de 18mS. Elimina rebotes
   
      btfss   PORTA,1      ;RA1 = 1 ??
      goto   Down      ;No, cuenta descendente

Up      incf   Contador,F   ;Incrementa contador
      movlw   .10
      subwf   Contador,W
      btfss   STATUS,Z   ;Es  mayor de 9 ??
      goto   Loop      ;No
      clrf   Contador   ;Si, puesta a 0 del contador
      goto   Loop

Down      decf   Contador,F   ;Decrementa el contador
      movlw   0xff
      subwf   Contador,W
      btfss   STATUS,Z   ;Es menor de 0 ??
      goto   Loop      ;No
El cual ya he entendido por completo su funcionamiento , más no me es posible simularlo con éxito en proteus ya que el dis`play de 7 segmentos nunca cambia del valor del 0, cambié los valores de la tabla para pasarlos a un display de cátodo común aunque no creo que influya mucho. ojalá puedan analizarlo y darme luz sobre el problema. Lástima q no se como adjuntar archivos de proteus si no les mostraría el circuito q monté.

Desconectado juan_tope_2003

  • PIC10
  • *
  • Mensajes: 1
Re: Problema con contador up/down pic16f84
« Respuesta #1 en: 15 de Julio de 2008, 20:21:40 »
Hola:
Fijate que efectivamente ya lo compile y no marca ningun error mas aun me parece que hay problemas en la logica del lectura de entradas cuando INCREMENTA y cuando DECREMENTA. Pregunta: ¿este circuito ya lo armaste en un PROTOBOARD y funciono correctamente?. Si puedes mandame el archivo de proteus que te da problemas.
¿Cual es la fuente de este programa?, ¿como se llama el libro exactamente?, ¿link?
Ojala que aun este a tiempo de ayudarte

Desconectado juan47

  • PIC10
  • *
  • Mensajes: 27
Re: Problema con contador up/down pic16f84
« Respuesta #2 en: 16 de Julio de 2009, 02:24:43 »
Hola:
Soy novato en esto de los PIC y pido disculpas de antemano
Para salir de sleep se utiliza el Wdt? Si es asi el micro se resetea comenzando de nuevo en el vector de reset
Para salir de sleep se utilizan tres modos
 1-Por la activacion de la patilla MCLR# y va al vector reset
 2-Por el desvordamiento del perro guardian y va al vector reset
 3-Cuando se genera una interrupcion ,de las cuatro posibles,pero no puede ser del TMR0 ya que en modo sleep el oscilador
no funciona
Otra cuestion es OPTION_REG lo tienes asignado a TMR0 pro no veo su utilizacion
Tal vez falte algo de programa ???
Sin ningun deseo de haver molestado os mando un saludo

Desconectado juan47

  • PIC10
  • *
  • Mensajes: 27
Re: Problema con contador up/down pic16f84
« Respuesta #3 en: 17 de Julio de 2009, 10:27:23 »
Hola a todos :
Pido las mas sinceras disculpas por haber cometido un error
En el anterior post escribi un verdadero error que fue:
                            -Por el desvordamiento del perro guardian y va al vector reset  
Pido disculpas si ello ha llevado a una confusion .Lo cierto es que el WDT despierta al PIC despues de una instruccion SLEEP y continua con la
siguiente instruccion que sigue a SLEEP
Te pido disculpas tavisho
Si puedo decirte que el programa lo compile y grabe en la placa de pruebas PicTrainer funcionando bien y dando los valores de la tabla
Ahora tambien entiendo el tema de asignacion del TMR0 .El bit 3 de OPTION_REG denominado PSA es el que asigna el divisor de frecuencia
al WDT o al TMR0
Si este bit esta a 0 se asigna el divisor de frecuencia al TMR0 , en el caso contrario si estuviera a 1 se asigna al WDT
Me despido con saludo y pidiendo de nuevo mis mas sinceras disculpas
« Última modificación: 17 de Julio de 2009, 10:39:08 por juan47 »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problema con contador up/down pic16f84
« Respuesta #4 en: 17 de Julio de 2009, 12:42:25 »
Juan bienvenido al foro; fijate que estas contestando un mensaje de hace un año, por lo que no tienes que pedir perdon porque esa persona Juan_tope no volvio a escribir desde aquella, seguro que ya no anda por el foro y el tema esta olvidado o resuelto

tapi8

Desconectado juan47

  • PIC10
  • *
  • Mensajes: 27
Re: Problema con contador up/down pic16f84
« Respuesta #5 en: 19 de Julio de 2009, 08:31:34 »
Hola:
gracias me queda mucho por aprender
Un saludo tapi8