Autor Tema: Ayudaaaa con el PIC 16F628a POR FAVOR !!!!!  (Leído 2012 veces)

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

Desconectado planetamatt

  • PIC10
  • *
  • Mensajes: 2
Ayudaaaa con el PIC 16F628a POR FAVOR !!!!!
« en: 26 de Septiembre de 2015, 01:47:57 »
Holaaa gente, tengo un problema con el pic 16f628a, tengo que hacer un contador que cuente de 0 a 99, utilizando un pulsador en la patita RBO,  y que cuando se prenda el display de unidades
 RA0 se ponga en 1 y cuando se prenda el display decenas RA0 se ponga en 0, tambien otra condicion es que los datos se guarden en la eprom, lei en varios lados que tengo que usar multiplexion para escender ambos display
aca les dejo el codigo que es lo que pude hacer por si alguno me pueda dar una mano!! muchas gracias a todos, SALUDOS

list   p=16F628A
   include   <p16F628A.inc>
   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
;---------------Variables-----------------

ContUnidad   EQU      0X20
ContDecena   EQU      0x21
Cont1      EQU      0x22
Cont2      EQU      0x23
ContDisplay   EQU      0x24

;----------------Puertos------------------
   
      org      0x00   ;Comienzo del programa.
      goto   INICIO ;Dirige al inicio del programa.
      org      0x05   ;Es donde comienza el programa.
INICIO:
      bsf      STATUS,RP0 ;Paso al banco 1.
      bsf      OPTION_REG,7
      movlw    0x07
      movwf    CMCON
      movlw   b'00000001' ;En w guardo el binario 00000001
      movwf   TRISB ;Muevo el valor de w al registro tris b
      clrf   TRISA ;Limpio el reg, TrisA
      bcf      STATUS,RP0 ;Vuelvo al banco 0.
      clrf   ContUnidad
      clrf   ContDecena
                                       
      
;----------------Programa------------------

;--------------Multiplexion de displays-----------
CONT_DISPLAY:
      movlw   d'20'   
      movwf   ContDisplay
DISPLAY:
      movlw    ContUnidad,W ;Mueve lo que hay en contador de unidades a W
      call    TABLA_VALORES ;Llamo la tabla de valores.
      BSF      PORTA,0 ;RA0 EN 1
      movwf    PORTB ;Muestro lo que esta en w, en el display.
      call    RETARDO_5ms
      movlw   ContDecena,W ;Mueve lo que hay en contador de centenas a W
      call    TABLA_VALORES ;Llamo la tabla de valores.
      BCF      PORTA,RA0 ; RA0 EN 0 *
      movwf    PORTB ;Muestro lo que esta en w, en el display.
      call   RETARDO_5ms
      decfsz   ContDisplay,W
      goto   DISPLAY
      goto    PULSADOR

PULSADOR:
      btfsc   PORTB,RB0       ; Testeamos si esta a 0 logico.-
      goto   PULSADOR      ; No, seguimos testeando.-
      call   RETARDO_5ms      ; Eliminamos Efecto rebote
      btfsc   PORTB,RB0       ; Testeamos nuevamente.-
      goto   PULSADOR      ; Falsa Alarma, seguimos testeando.-
      goto   CONTAR

CONTAR:   
      incf   ContUnidad ;Incremento el contador
      movlw   d'10' ;Le asigno 10 a w
      subwf   ContUnidad,W ;Hago una resta entre el contador y lo que hay en W.
      btfsc   STATUS,Z ;Si z da 0 es porque el resultado no es cero, entonces si da z=0 salta      
      goto   DISPLAY
      goto    LIMPIAR_UNIDAD

CONTAR_DECENA:   
      incf   ContDecena ;Incremento el contador de decena.
      movlw   d'10' ;Le asigno 10 a w
      subwf   ContDecena,W
      btfsc   STATUS,Z ; z=0 salta, z=1 limpia el contador.
      goto   DISPLAY
      clrf   ContDecena ;Limpia contador decena.
   
      
LIMPIAR_UNIDAD:
      clrf    ContUnidad ;Limpia el contador de unidad.
      goto    CONTAR_DECENA ;Va a la subrutina del contador de decena.

RETARDO_5ms:
   movlw   0xFF         ; 255
   movwf   Cont1      ; Iniciamos contador1.-
ARRIBA:
   movlw   0x05         ; 25
   movwf   Cont2      ; Iniciamos contador2
ABAJO:
   decfsz   Cont2,W      ; Decrementa Contador2 y si es 0 sale.-      
   goto   ABAJO      ; Si no es 0 repetimos ciclo.-
   decfsz   Cont1,W      ; Decrementa Contador1.-
   goto   ARRIBA      ; Si no es cero repetimos ciclo.-
   return                ; Regresa de la subrutina.-

TABLA_VALORES:
      addwf   PCL,W
      retlw    b'1111110' ;0
      retlw    b'0110000' ;1      
      retlw    b'1101101' ;2
      retlw    b'1111001' ;3
      retlw    b'0110011' ;4
      retlw    b'1011011' ;5
      retlw    b'1011111' ;6
      retlw    b'1110000' ;7
      retlw    b'1111111' ;8
      retlw    b'1110111' ;9


END



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Ayudaaaa con el PIC 16F628a POR FAVOR !!!!!
« Respuesta #1 en: 26 de Septiembre de 2015, 02:24:26 »
Por un lado:
Curiosamente tenes el mismo codigo, con las correcciones que le hice, pero era otro usuario:

http://www.todopic.com.ar/foros/index.php?topic=45198.0

Que justamente elimino ese codigo, el podria haber seguido ese post y preguntado lo que necesite ahi.
Pero llegamos a este punto en el que hay otra cuenta creada y supongo que es la misma persona.

Por otro lado:
No veo otro avance en el codigo, creo que estas esperando que te den el codigo lo cual no va a ocurrir.
La multiplezacion es muy facil, te cuesta 4 lineas aproximadamente en tu codigo(2 mas de lo que tenes). Nada mas. Pero veo que no lo pensaste demasiado

Tengo toda la intencion de ayudarte. Pero esta no es la forma.
Asi que pienso que deberias dar una buena razon para todo esto del cambio de usuario / borrado de codigo / etc, antes de proseguir.
« Última modificación: 26 de Septiembre de 2015, 02:32:59 por KILLERJC »

Desconectado planetamatt

  • PIC10
  • *
  • Mensajes: 2
respuesta
« Respuesta #2 en: 27 de Septiembre de 2015, 01:26:58 »
 el otro usuario es mi compañera de grupo, que pregunto en el foro porque teniamos muchas dudas al respecto de ese ejercicio!!
no es el mismo usuario como pones ni nada que se le paresca, gracias por la ayuda,
saludos!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Ayudaaaa con el PIC 16F628a POR FAVOR !!!!!
« Respuesta #3 en: 27 de Septiembre de 2015, 01:40:56 »
Esta bien, no sabia que era en grupo. Pero por favor si ese era el caso hubieran seguido en el mismo hilo.

Como dije solo les queda 2 lineas de agregar para lograr el multiplexado.

Que es: apagar display2, poner el dato1, encender el display1, tiempo, apagar el display1, poner dato2, encender display2, tiempo ( demora )

ese "tiempo" es para que se vea, si lo hacen en proteus tal ves es mejor quitarle las demoras, ya que son muy notables.

Ahora... cual es su duda ?

Citar
tambien otra condicion es que los datos se guarden en la eeprom

Que datos quieren guardar? necesitan guardar datos cuando se corte la energia ? Recuerden que la EEPROM tiene un numero limitado de escrituras, al igual que la FLASH, para la eeprom normalmente son 1 millon, y para la flash 100.000 veces.

Desconectado Gazza

  • PIC10
  • *
  • Mensajes: 6
Re:Ayudaaaa con el PIC 16F628a POR FAVOR !!!!!
« Respuesta #4 en: 15 de Octubre de 2015, 16:02:25 »
Unla Lanus ?

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re:Ayudaaaa con el PIC 16F628a POR FAVOR !!!!!
« Respuesta #5 en: 15 de Octubre de 2015, 19:48:26 »
Por otro lado, tratá de poner títulos más descriptivos a los hilos. Si no el foro se vuelve un mar de pedidos de ayuda, lo cual dificulta la búsqueda.
Hablando de búsqueda, probaste el buscador del foro? Tu proyecto es bastante común y seguramente alguien ya lo hizo.

Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein