Autor Tema: ayuda contador pic de 0 a 999  (Leído 6162 veces)

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

Desconectado dario9669

  • PIC10
  • *
  • Mensajes: 38
ayuda contador pic de 0 a 999
« en: 10 de Septiembre de 2013, 21:26:38 »
hola soy nuevito en esto y estoy haciendo un proyecto de un contador pic 16f84a de 0 a 999 , tengo el programa del contador que funciona bien , pero a este le faltan un par de instrucciones pera que me pueda servir , este contador tiene 1 pulsador creciente que sube de a 1 pero le falta un pulsador decreciente de a 1 y agregarle si se puede otro pulsador que suba de a 10 , me gustaria si me pueden ayudar a modificar el programa para poder usarlo , aca dejo el programa :

;Contador de 4 digitos.

indo    equ     00h             ;registro de indireccion
pc      equ     02h             ;contador de programa
status  equ     03h             ;registro de estado
fsr     equ     04h             ;registro de seleccion
ptoa    equ     05h             ;puerto a
ptob    equ     06h             ;puerto b
rota    equ     0fh             ;variable para desplazamiento de display
trisa   equ     85h             ;configuracion puerto a
trisb   equ     86h             ;configuracion puerto b
dig1    equ     10h             ;acumulador miles
dig2    equ     11h             ;acumulador centenas
dig3    equ     12h             ;acumulador decenas
dig4    equ     13h             ;acumulador unidades
loops   equ     1dh             ;variables usadas en retardos
loops2  equ     1eh
z       equ     02h             ;flag de cero
ram     equ     05h             ;bit de seleccion de pagina de memoria
c       equ     00h             ;flag de acarreo
w       equ     00h             ;bit de destino a variable de trabajo

reset   org     00
        goto    inicio
        org     05h

retardo                         ;subrutina de retardo
        movwf   loops           ;la variable de trabajo contiene la cant.
top2    movlw   d'110'          ;de ms a demorar
        movwf   loops2
top     nop
        nop
        nop
        nop
        nop
        nop
        decfsz  loops2          ;controla si termina 1mS
        goto    top
        decfsz  loops           ;controla si termina el retardo completo
        goto    top2
        retlw   0

s1000                           ;rutina de incremento x 1000
        clrf    dig2            ;pone a cero las centenas
        incf    dig1            ;incrementa el contador de miles  
        movf    dig1, w         ;carga en work el conteo de los miles  
        xorlw   0ah             ;si work era 10, entonces quedara en cero
        btfsc   status, z       ;si es cero, el flag z queda alto
        clrf    dig1            ;inicializa los miles  
        return
s100                            ;rutina de incremento x 100
        clrf    dig3            ;pone a cero las decenas
        incf    dig2            ;incrementa el contador de centenas
        movf    dig2, w         ;carga en work el conteo de las centenas
        xorlw   0ah             ;si work era 10, entonces quedara en cero
        btfsc   status, z       ;si es cero, el flag z queda alto
        call    s1000           ;incrementa los miles  
        return

s10                             ;rutina de incremento x 10
        clrf    dig4            ;pone a cero las unidades
        incf    dig3            ;incrementa el contador de decenas
        movf    dig3, w         ;carga en work el conteo de las decenas
        xorlw   0ah             ;si work era 10, entonces quedara en cero
        btfsc   status, z       ;si es cero, el flag z queda alto
        call    s100            ;incrementa las centenas
        return

subir                           ;rutina de incremento
        incf    dig4            ;incrementa el contador de unidades
        movf    dig4, w         ;carga en work el conteo de las unidades
        xorlw   0ah             ;si work era 10, entonces quedara en cero
        btfsc   status, z       ;si es cero, el flag z queda alto
        call    s10             ;incrementa las decenas
        movlw   d'250'          ;retardo de 100ms
        call    retardo
        return

tabla                           ;genera los numeros sobre el display
        addwf   pc              ;agrega al cont. programa el valor de work
        retlw   b'00111111'     ;genera el 0
        retlw   b'00011000'     ;genera el 1
        retlw   b'01110110'     ;genera el 2
        retlw   b'01111100'     ;genera el 3
        retlw   b'01011001'     ;genera el 4
        retlw   b'01101101'     ;genera el 5
        retlw   b'01101111'     ;genera el 6
        retlw   b'00111000'     ;genera el 7
        retlw   b'01111111'     ;genera el 8
        retlw   b'01111101'     ;genera el 9

inicio                          ;programa principal
        bsf     status, ram     ;selecciona el banco de memoria alto
        movlw   b'00010000'     ;configura el puerto a
        movwf   trisa           ;bit 4 entrada, demas bits salidas.
        movlw   00h             ;configura el puerto b
        movwf   trisb           ;como salidas
        bcf     status, ram     ;selecciona el banco de memoria bajo
        clrf    dig1            ;inicializa acumuladores
        clrf    dig2
        clrf    dig3
        clrf    dig4
        movlw   00              ;envia ceros a los transistores para apagar
        movwf   ptoa            ;todos los displays

empe    btfss   ptoa, 4         ;chequea el pulsador
        call    subir           ;llama la rutina de incremento
        movlw   08h             ;iniciar un 1 en el registro de rotacion
        movwf   rota            
        movlw   dig1            ;con el registro selector (fsr) se apunta
        movwf   fsr             ;al primer dato que se va a mostrar
disp    movlw   00h             ;colocar en cero el dato del display
        movwf   ptob            ;para apagarlos
        movf    rota, w         ;pasa rotacion del 1 a la variable work
        movwf   ptoa            ;enciende el transistor (display)
        movf    indo, w         ;lee el dato del registro apuntado por fsr
        call    tabla           ;genera el digito de 7 segmentos
        movwf   ptob            ;envia el digito al puerto b
        movlw   03h             ;retardo de 3ms para visualizacion
        call    retardo
        btfsc   rota, 0         ;controla si terminaron las cuatro rotaciones
        goto    empe            ;si termino, vuelve desde el comienzo
        bcf     status, c       ;carry en cero para no afectar las rotaciones
        rrf     rota            ;desplaza el 1 que enciende los displays
        incf    fsr             ;incrementa el puntero. Apunta el proximo
        goto    disp            ;digito a mostrar

        end

desde ya gracias a todos.
« Última modificación: 10 de Septiembre de 2013, 21:33:48 por dario9669 »

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: ayuda contador pic de 0 a 999
« Respuesta #1 en: 11 de Septiembre de 2013, 02:02:10 »
Aunque no posteaste tu circuito veo que estás utilizando los cuatro bits 0 a 3 del puerto A para los transistores del multiplex del display.

Una técnica que podrías utilizar para conectar hasta 4 switches es utilizar las mismas señales del multiplex formando un teclado de hasta 1X4. En este caso unes un polo de cada switch formando un común y ese común lo conectas a la entrada PA<4>. Para asegurar un mejor funcionamiento conecta una resistencia de unos 10 Kohms de la terminal PA<4> a tierra. Del otro lado de cada switch conecta el cátodo de un diodo (1N4148 es buena opción). Los ánodos conectan a las salidas PA<3:0>.

Ahora bien, cada vez que actives una salida PA<3:0> lee el pin PA<4>. Si el nivel es bajo la tecla o switch asociado estará desconectado. Si por el contrario lees un nivel alto entonces sabrás que ese switch está activo.

El programa general se complica pero no demasiado ya que tienes que intercalar el desplegado de los datos y la lectura del teclado. Tendrás que reescribir estos procedimientos.

Analiza esta posibilidad y empieza a crear las rutinas para decremento e incremento por 10.

Espero que esta idea te funcione.

En mi caso y dado que necesito tener posibilidades de conectar teclados mayores u otra variedad de señales me auxilio con dos chips. Un 7447 conectado a PB<3:0>, el punto decimal a PB<4> y un 74138 a PB<7:5>. El 7447 me hace la decodificación de los dígitos de 7 segmentos y el 74138 me hace el multiplex para hasta 8 dígitos. De esta forma el puerto A queda libre. Eso me deja un universo de posibilidades.

Por ejemplo para otros teclados, si utilizo los bits PB<7:5> (cuando sólo uno es activado) puedo utilizar un teclado de hasta 4X3 dejando PA<4> como salida. Si necesito más teclas se podrían utilizar las señales del 138 y así utilizar un teclado de hasta 4X8.

En el link a continuación te muestro uno de mis displays.

http://www.imageshack.com/i/f5e5kpj

También te puede dar ideas.

Saludos.

Desconectado dario9669

  • PIC10
  • *
  • Mensajes: 38
Re: ayuda contador pic de 0 a 999
« Respuesta #2 en: 11 de Septiembre de 2013, 09:59:04 »
Gracias bbm , por el aporte estan muy buenos tus display , el tema es que no puedo poner un teclado es para un tablerito con pulsadores y lleva 2 contadores iguales si le pongo 2 teclador seria demaciado gigante y seria practico lo que estoy haciendo es un tablero de puntuacion de dardos que tiene 6 pic 16f84 que controlan los leds de puntuacion para cada jugador y este es el contador de puntos para cada jugador , voy a subir fotos de como va el proyecto , la verdad es que estoy trabajando mucho con este proyecto , es por eso que pido ayuda la verdad que si me dan una mano para modificar el programa se los agradezco

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: ayuda contador pic de 0 a 999
« Respuesta #3 en: 11 de Septiembre de 2013, 11:51:36 »
Ok. No necesariamente es un teclado. Puedes utilizar los switches individuales y hacer las conexiones entre ellos como te indico. Funcionalmente es un teclado no importa si usas teclas, timbres, apagadores o simples alambres.

Suerte.

PS: perdón por la intromisión pero ¿porqué 6 PICs?
« Última modificación: 11 de Septiembre de 2013, 11:56:03 por BBMNet »

Desconectado dario9669

  • PIC10
  • *
  • Mensajes: 38
Re: ayuda contador pic de 0 a 999
« Respuesta #4 en: 11 de Septiembre de 2013, 19:03:11 »
Ok. No necesariamente es un teclado. Puedes utilizar los switches individuales y hacer las conexiones entre ellos como te indico. Funcionalmente es un teclado no importa si usas teclas, timbres, apagadores o simples alambres.

Suerte.

PS: perdón por la intromisión pero ¿porqué 6 PICs?
el tema es asi : como veras en la foto tengo 2 columnas de pulsadores los cuales encienden 3 led cada uno en cada pic me maneja 3 pulsadores en total son 6 pic , y por otro lado arriba debajo de los 3 pulsadores de cada lado van 3 led de 7 segmento multiplexado para el contador , 1 para cada jugador , es por eso que son 6 pic para una parte y 2 pic para otra , de todas formas concegui un programita contador de 0 a 999 con 2 pulsadores 1 creciente y otro decreciento , el unico tema es que el pulsador creciente suma cuando lo pulsas y si mentenes no sube se queda ahy , me gustaria modificar eso para que despues que sube si mantenes apretado despues de 1 seg suba continuo rapido hasta que sueltes , vos me podrias ayudar con eso si te paso el prog , para modificarlo y compilarlo y me pasas el hex ya que se me esta complicando porque intento compilar en asm y no me sale y no lo entiendo , me harias un gran favor , un abrazo

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: ayuda contador pic de 0 a 999
« Respuesta #5 en: 11 de Septiembre de 2013, 20:09:05 »
Dos preguntas sobre el funcionamiento. Necesitas que al cero despliegue "000" ó sólo "0". Igualmente en caso de por ejemplo 23 despliega "023" ó "23".

Saludos.

Desconectado dario9669

  • PIC10
  • *
  • Mensajes: 38
Re: ayuda contador pic de 0 a 999
« Respuesta #6 en: 12 de Septiembre de 2013, 12:22:03 »
Dos preguntas sobre el funcionamiento. Necesitas que al cero despliegue "000" ó sólo "0". Igualmente en caso de por ejemplo 23 despliega "023" ó "23".

Saludos.
puede ser 023 , osea si que muestre 000 al inicio , eso estaria bien , abrazo

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: ayuda contador pic de 0 a 999
« Respuesta #7 en: 14 de Septiembre de 2013, 01:41:34 »
Estoy haciéndo unas modificaciones a uno de mis contadores para realizar la cuenta a partir de oprimir un pulsador. En unos días lo estaré posteando si no me atrapa el nacionalismo en exceso. Espero que sólo con medida.

Estamos por celebrar nuestra ¿Independencia?. Al menos así le llaman. ¡Ajúa!

Como siempre, un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: ayuda contador pic de 0 a 999
« Respuesta #8 en: 14 de Septiembre de 2013, 09:23:05 »
Al igual que nosotros, alli festejan haberse independizado de los Españoles !!  :shock: :shock:
Y hoy dia somos casi esclavos de los Yanquees !!  :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: ayuda contador pic de 0 a 999
« Respuesta #9 en: 17 de Septiembre de 2013, 20:19:14 »
Según yo ya había posteado esta respuesta pero no se que paso ni donde fué a parar. En fín, "va de nuevo".

En el archivo adjunto está una propuesta de un circuito controlando 3 displays de un contador de 000 hasta 999. Tiene protección contra roll-over hacia abajo (el valor mínimo es 000 y no regresa a 999) pero no la tiene hacia arriba (después del 999 regresará a 000).

El pulsador conectado a PA<0> es para decrementar y el conectado a PA<1> es para incrementar. Si se deja uno de los pulsadores oprimido la función se repetirá en tanto lo esté.

Perdón por el esquemático a mano pero fué lo que logré que fuera más rápido. Además está incompleto. Le falta el generador de pulso de reloj y el pulsador de reset.

Favor de darle un vistazo y envíen sus comentarios.

Un saludo.

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: ayuda contador pic de 0 a 999
« Respuesta #10 en: 18 de Septiembre de 2013, 00:34:42 »
Hola.
Cuando termines el marcador, yo quierro ir a jugar.


Saludos.  :)

Desconectado dario9669

  • PIC10
  • *
  • Mensajes: 38
Re: ayuda contador pic de 0 a 999
« Respuesta #11 en: 23 de Septiembre de 2013, 15:40:44 »
Hola.
Cuando termines el marcador, yo quierro ir a jugar.


Saludos.  :)

JAJAJA PORSUPUESTO SI SABES COMO SE JUEGA A LOS DARDOS , SABES QUE NO SE PUEDE DEJAR DE JUGAR " ADICCION ADICCION " JAJAJJA , CUANDO LO TERMINE SUBO FOTOS ( SI PUEDO ) YA QUE NUNCA SUBI NINGUNA NO SE COMO ES


 

anything