Autor Tema: Cuentavueltas con Pic 16f84  (Leído 6891 veces)

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

Desconectado poshijo

  • PIC10
  • *
  • Mensajes: 8
Cuentavueltas con Pic 16f84
« en: 17 de Enero de 2008, 12:35:55 »
Hola.
Me presento:
Me llamo Miguel y acabo de descubrir este foro, magnifico por otro lado, todo sea dicho.

Necesito ayuda:
Quiero realizar un cuentavueltas para un scalextric.
El proyecto lo llevo intentando mas de dos meses.
Utilizo pic 16f84 y dos displays de 7 segmentos con catodo comun multiplexados.
He probado multitud de proyectos que hay por la red (Pablin, etc) NINGUNO FUNCIONA CORRECTAMENTE.
El caso es que he encontrado varias cosas en este foro, pero ninguna me permite hacer lo que deseo.
He visto un ejemplo de contador de 00 a 99 que parece funcionar pero es ciclico y temporizado, por lo que no tengo control sobre los displays.

Que funciones debe hacer:
Pues es simple, pero no encuentro la forma.
Como ya digo con dos displays multiplexados y un detector magnetico que hago el IMPUT, cada vez que se produce tal evento ,
el contador suba un numero a los displays.
En resumen un contador ascendente de 00 a 99 con switch.

El proyecto puedo hacerlo con el 16f84 o con el 16F628, me es indiferente.
Si alguien tiene a bien de ayudarme, le estaré eternamente agradecido.

Saludos. Seguiré buscando por si me escapó algo, pero en dos meses ya es raro no haber encontrado nada.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Cuentavueltas con Pic 16f84
« Respuesta #1 en: 17 de Enero de 2008, 12:57:31 »
Ahí tienes otro hilo donde se está tratando este mismo tema.

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

P.D. Te aconsejo usar el buscador del Foro, puedes encontrar mucho mas rápidamente lo que buscas y no hace falta que nuestros amigos se molesten si encuentras la información que buscas.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado poshijo

  • PIC10
  • *
  • Mensajes: 8
Re: Cuentavueltas con Pic 16f84
« Respuesta #2 en: 17 de Enero de 2008, 13:02:07 »
Hola de nuevo.
Gracias por la aportación, pero no es lo que necesito.
El tema de sensores para el imput ya lo tengo controlado, bién por sensores magneticos Reed o por infrarojos .
Como digo ese no es mi problema actual, sino el codigo asm para el micro pic.
Gracias de todos modos.
Saludos

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Cuentavueltas con Pic 16f84
« Respuesta #3 en: 17 de Enero de 2008, 13:16:07 »
Hola, aqui tienes un codigo para un contador que construí por el 2002..., puedes adaptarlo a tus necesidades!
http://www.todopic.com.ar/ASM/contador_lcd/c2002k.txt
Código: ASM
  1. ;  º                                                                     º
  2. ;  º                                                          _\\|//_     º
  3. ;  º                                                         (` o-o ')    º
  4. ;  º--------------------------------------------------------ooO-(_)-Ooo---º
  5. ;  º                                                                      º
  6. ;  º     obtenga su email gratis       www.todopic.com.ar                 º
  7. ;  º      control de un modulo LCD inteligente            .oooO     Oooo. º
  8. ;  º CONTADOR DE PULSOS HASTA 9.999.999 CON MEMORIA LAP   (   )     (   ) º
  9. ;  º_______________________________________________________\ (_______) /__º
  10. ;  º                                                        \_)     (_/   º
  11. ;                     NORBERTO PELLEGRINI
  12. ; 28/01/2001->CAMBIO A 4 BITS el LCD e INTERRUPCIONES 16/02/2002
  13. ;se empleo en un medidor de distancias, con 8 tornillos en la rueda de un vehiculo
  14. ;obteniendose pulsos cada 21 cm, llegamos a obtener mediciones hasta una velocidad
  15. ;del vehiculo de 64 Km/h, si bien el micro puede responder, la falla era por el sensor
  16. ;(sensor inductivo industrial,12V, tres cables - marron +, azul - ,negro salida)
  17. ;este dispositivo es empleado para las "carreras de regularidad"
  18. ;para adaptar el pulso del sensor (12v) empleo un BC337, colector al micro,y colector
  19. ; a +5v con R=1k,  ademas de un led y R=330 para visualizar los pulsos
  20. ;en la base 10K al sensor, y 6,8 k a masa.
  21. ;FUNCIONA OK
  22. ;-------------------------------------------------------------------------
  23.         list p=16f84A
  24.         INCLUDE "P16F84A.INC"
  25. OPCION  EQU     01h
  26. PC      EQU     2H
  27. STATUS  EQU     3H
  28. PORT_A  EQU     5H
  29. PORT_B  EQU     6H
  30.  
  31.  
  32.         cblock  0x1c
  33.         SENSOR 
  34.         PUERTO          ;GUARDO EL VALOR VIEJO DEL PUERTO
  35.         LAP             ;SI LAP=1 MANTIENE EL VISOR SIN ACTUALIZAR
  36.         UNIDAD           ;CONTADORES UNIDADES
  37.         DECENA         
  38.         CENTENA
  39.         UNIMIL 
  40.         DECMIL 
  41.         CENMIL 
  42.         MILLON 
  43.         DELAY2 
  44.         DELAY1 
  45.         BANDERA         ;solo empleo TRES bit, para que barra solo una vez el mensaje
  46.         TEMPO  
  47.         SALVAW
  48.         SALVASTATUS
  49.         TEMPORAL
  50.         DESTELLO
  51.         CONTA
  52.         NUM_LETRA
  53.         endc
  54.  
  55. MEMO    EQU     0H
  56. MOSTRO  EQU     1H
  57. HABILITA        EQU     2H
  58. LED     EQU     4H      ;LED CONECTADO A RA4 PATA 3 PORT_A
  59. Z       EQU     2H
  60. C       EQU     0H
  61. W       EQU     0H
  62. R       EQU     1H
  63. E       EQU     5H      ;PATA 11 ;1H  ;PATA7 RB1 MICRO     A LA PATA 6 (E) HABILITACION DEL MODULO
  64. RS      EQU     4H      ;PATA 10 ;2H  ;PATA 8 RB2 MICRO     A LA PATA 4 DEL MODULO (RS - INSTRUCCION O CARACTER)
  65. ;                        PATA 2 DEL MODULO A +VCC
  66. ;                       3 REGULA CONTRASTE, AL PUNTO MEDIO DE UN POTE 5K ENTRE VCC Y MASA
  67. ;                       5 Y 1 A MASA - YO EMPLEO 2 R FIJAS, DE 470 ohms a masa y 10k a +
  68. ;       PATAS  DEL PIC----->A LA  DEL MODULO LCD
  69. ;       2--------------> 14
  70. ;       1--------------->13  ; DATOS
  71. ;       18-------------->12
  72. ;       17-------------->11
  73. ;                        
  74. ;                        CONTROL
  75. ;       11; 7-------------->6    (ENABLED)
  76. ;       10 ; 8-------------->4    (RS)
  77. ;
  78. ;       PARA LA ILUMINACION POSTERIOR, UNA RESISTENCIA DE 220 OHMS A +5V
  79. ;       PATA 10 DEL MICRO, RESISTENCIA 1K A VCC, Y PULSADOR A MASA (memoria)
  80. ;       PATA 6 (rb0/int) DEL MICRO, RESISTENCIA 1K A VCC, Y SENSOR (YO EMPLEO INDUCTIVO)
  81.  
  82. ;
  83.         __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC       ;CONFIGURO
  84. ;       PARA LA GRABACION, CODE PROTECT OFF, RESET DE ENCENDIDO ,ETC
  85.  
  86.  
  87. ;*****************PROGRAMA PRINCIPAL********************************
  88. ;
  89.         ORG     H'000'
  90.         NOP
  91.         GOTO    INICIO
  92.  
  93.         ORG     H'004'
  94.  
  95. Interrupciones          ;interrupciones
  96. ;
  97.         BCF     INTCON,GIE      ;Asegura la
  98.         BTFSC   INTCON,GIE      ;deshabilitacion
  99.         GOTO    Interrupciones  ;global de las interrupciones
  100. ;
  101. ;Salva registros
  102. ;
  103.         MOVWF   SALVAW          ;Salva W
  104.         SWAPF   STATUS,W                ;Invierte STATUS --> W
  105.         MOVWF   SALVASTATUS     ;Salva STATU
  106. ;
  107. ;SELECCION
  108. ;
  109. ;       BTFSC   INTCON,INTF             ;? Hubo interrupcion en RB0 ?
  110. ;       GOTO    SUMA1                   ;Si ir a contar
  111. ;       GOTO    RestaurarRegistros      ;Retorna habilitando todas las interrupciones
  112.  
  113.         btfsc   INTCON,T0IF     ;? Hubo sobrefujo en TMR0 ?
  114.         goto    T0              ;Si
  115.         btfsc   INTCON,INTF     ;? Hubo interrupcion en RB0 ?
  116.         goto    In              ;Si
  117.         btfsc   INTCON,RBIF     ;? Hubo algun cambio de RB4-RB7 ?
  118.         goto    Rb              ;Si
  119. Ee
  120. ;       bsf     STATUS,RP0      ;Banco 1
  121. ;       bcf     EECON1,EEIF     ;Pone a cero el indicador para poder salir de la ISR
  122. ;       bcf     STATUS,RP0      ;Banco 0
  123.         goto    RestaurarRegistros      ;Retorna habilitando todas las interrupciones
  124. T0      bcf     INTCON,T0IF             ;Pone a cero el indicador para poder salir de la ISR
  125.         goto    RestaurarRegistros      ;Retorna habilitando todas las interrupciones
  126. In      bcf     INTCON,INTF             ;Pone a cero el indicador para poder salir de la ISR
  127.  
  128.         ;--------------------------CONTADOR DE PULSOS-------------
  129. SUMA1
  130.         BCF     INTCON,GIE
  131.  
  132.         MOVLW   .7
  133.         MOVWF   CONTA
  134.         CALL    RETARDO         ;RUTINITA PARA DARLE TIEMPO A ESTABILIZAR
  135.         DECFSZ  CONTA,1         ;LOS CONTACTOS O SENSORES - ANTIRREBOTES
  136.         GOTO    $-2             ;
  137.        
  138.         BSF     BANDERA,HABILITA        ;       REFRESH,0       ;MARCO UN BIT PARA PRESENTAR EN PANTALLA
  139.                                 ;SI ES 1, LO MUESTRA SOLO UNA VEZ, cuando hay cambio en contadores
  140. SUME    INCF    UNIDAD,1        ;Y NO QUEDA PARPADEANDO EL DISPLAY
  141.         CLRF    STATUS
  142.         MOVLW   .10     ;       VERIFICA SI ES IGUAL A 10
  143.         XORWF   UNIDAD,W        ;PREGUNTA SI=10
  144.         BTFSS   STATUS,Z        ;
  145.         GOTO    CONTO   ;       RETLW   0
  146.         CLRF    UNIDAD  ;       SI LLEGO A 10 LA COLOCO EN CERO
  147. ;DECENAS
  148.         INCF    DECENA,1        ;LE SUMO 1 A LA DECENA 
  149.         CLRF    STATUS
  150.         MOVLW   .10     ;       VERIFICA SI ES IGUAL A 10
  151.         XORWF   DECENA,W        ;PREGUNTA SI=10
  152.         BTFSS   STATUS,Z        ;
  153.         GOTO    CONTO   ;       RETLW   0
  154.         CLRF    DECENA 
  155. ;CENTENAS
  156.         INCF    CENTENA,1       ;LE SUMO 1 A LA DECENA 
  157.         CLRF    STATUS
  158.         MOVLW   .10             ;VERIFICA SI ES IGUAL A 10
  159.         XORWF   CENTENA,W       ;PREGUNTA SI=10
  160.         BTFSS   STATUS,Z        ;
  161.         GOTO    CONTO   ;       RETLW   0
  162.         CLRF    CENTENA
  163. ;UNIDAD DE MIL
  164.         INCF    UNIMIL,1        ;LE SUMO 1 A LA DECENA 
  165.         CLRF    STATUS
  166.         MOVLW   .10             ;VERIFICA SI ES IGUAL A 10
  167.         XORWF   UNIMIL,W        ;PREGUNTA SI=10
  168.         BTFSS   STATUS,Z        ;
  169.         GOTO    CONTO   ;               RETLW   0
  170.         CLRF    UNIMIL
  171. ;DECENA DE MIL  
  172.         INCF    DECMIL,1        ;LE SUMO 1 A LA DECENA 
  173.         CLRF    STATUS
  174.         MOVLW   .10             ;VERIFICA SI ES IGUAL A 10
  175.         XORWF   DECMIL,W        ;PREGUNTA SI=10
  176.         BTFSS   STATUS,Z        ;
  177.         GOTO    CONTO   ;               RETLW   0
  178.         CLRF    DECMIL 
  179. ;CENTENA DE MIL
  180.         INCF    CENMIL,1        ;LE SUMO 1 A LA DECENA 
  181.         CLRF    STATUS
  182.         MOVLW   .10             ;VERIFICA SI ES IGUAL A 10
  183.         XORWF   CENMIL,W        ;PREGUNTA SI=10
  184.         BTFSS   STATUS,Z        ;
  185.         GOTO    CONTO   ;       RETLW   0
  186.         CLRF    CENMIL
  187. ;MILLON
  188.         INCF    MILLON,1        ;LE SUMO 1 A LA DECENA 
  189.         CLRF    STATUS
  190.         MOVLW   .10             ;VERIFICA SI ES IGUAL A 10
  191.         XORWF   MILLON,W        ;PREGUNTA SI=10
  192.         BTFSS   STATUS,Z        ;
  193.         GOTO    CONTO   ;       RETLW   0
  194.         CLRF    MILLON
  195. ;       ;                       RETLW   0
  196. CONTO
  197.         bcf     INTCON,INTF             ;Pone a cero el indicador para poder salir de la ISR
  198.         goto    RestaurarRegistros      ;Retorna habilitando todas las interrupciones
  199.  
  200. Rb      bcf     INTCON,RBIF             ;Pone a cero el indicador para poder salir de la ISR
  201.  
  202. RestaurarRegistros
  203.  
  204.         swapf   SALVASTATUS,W           ;Invierte STATUS --> W
  205.         movwf   STATUS                  ;Restaura STATUS
  206.         swapf   SALVAW,F                ;Invierte --> F
  207.         swapf   SALVAW,W                ;Restaura W
  208.         retfie                  ;Retorna habilitando todas las interrupciones
  209.  
  210. ;-----------------------------------------------------------------
  211.  
  212. RETARDO MOVLW   .255            ;240
  213.         MOVWF   TEMPO           ;RETARDO MUY CORTO
  214. DECRE   DECFSZ  TEMPO,R
  215.         GOTO    DECRE
  216.         RETLW   0
  217. ;-----------------------------------------------------------------
  218. DEMORA
  219.         MOVLW   .3
  220.         MOVWF   DELAY2          ;RETARDO LARGO
  221. RETAR3  MOVLW   .30
  222.         MOVWF   DELAY1          ;RETARDO DE VISUALIZACION DE MARCA
  223. DECRE1  CALL    RETARDO         ;SOLO APARECE EN EL RESET DE INICIO
  224.         DECFSZ  DELAY1,R        
  225.         GOTO    DECRE1 
  226.         DECFSZ  DELAY2,R
  227.         GOTO    RETAR3
  228.         RETLW   0
  229. ;-----------------------  LCD   ----------------------------------------
  230. CONTROL BCF     PORT_B,RS       ;ESTA RUTINA GENERA LAS
  231.         GOTO    DATO2           ;SEÑALES DE CONTROL Y ENVIA
  232. DATO    BSF     PORT_B,RS       ;EL DATO Al MODULO
  233.         NOP
  234.         NOP
  235.         NOP
  236. DATO2   BSF     PORT_B,E        ;CON INTERFACE DE 4 BITS
  237.         MOVWF   TEMPORAL        ;GUARDO EL DATO COMO ORIGINAL
  238.         SWAPF   TEMPORAL,W      ;PASO LA PARTE ALTA
  239.         MOVWF   PORT_A          ;PARA SACARLO POR EL PUERTO
  240.         CALL    RETARDO
  241.  
  242.         BCF     PORT_B,E
  243.         CALL    RETARDO
  244.         BSF     PORT_B,E        ;PORQUE TRABAJAN 4 Y 4 BITS
  245.                                 ; primero se envian los bit altos (mayor peso)
  246.         MOVF    TEMPORAL,W      ; luego los 4 bit de menor peso
  247.         MOVWF   PORT_A          ;porque asi lo requiere el LCD
  248.         CALL    RETARDO
  249.         BCF     PORT_B,E
  250.         CALL    RETARDO
  251.         RETLW   0
  252.  
  253. ;========================================================
  254. TABLA2  ADDWF   PCL,F           ;TABLA DE ASCII
  255.         DT "0123456789"         ;NUMEROS A PRESENTAR
  256. ;========================================================
  257. TABLA3  ADDWF   PCL,F           ;TABLA DE ASCII
  258.         DT "   * MICROPIC *  "  ;16 LETRAS
  259. ;========================================================
  260. TABLA4  ADDWF   PCL,F           ;TABLA DE ASCII
  261.         DT "  CONTADOR 2002 "   ;15 LETRAS
  262. ;========================================================
  263. TABLA5  ADDWF   PCL,F           ;TABLA DE ASCII
  264.         DT "  MEMORIA "         ;9 LETRAS
  265. ;========================================================
  266. TABLA6  ADDWF   PCL,F           ;TABLA DE ASCII
  267.         DT "  todopic.com.ar "  ;15 LETRAS
  268. ;========================================================
  269.  
  270. INICIO  NOP
  271.         ;CLRF   UNIDAD
  272.         MOVLW   .255    ;PORQUE APARECE EL CONTADOR EN UNO
  273.         MOVWF   UNIDAD  ; Y ASI AL SUMAR EMPIEZA EN CERO   (???)
  274.         CLRF    DECENA
  275.         CLRF    CENTENA
  276.         CLRF    UNIMIL
  277.         CLRF    DECMIL
  278.         CLRF    CENMIL
  279.         CLRF    MILLON
  280.         CLRF    LAP
  281.         CLRF    BANDERA ;REFRESH
  282.         CLRF    PUERTO
  283.  
  284.         BSF     STATUS,5        ; ENTRA AL BANCO 1
  285.         MOVLW   80H             ; CARGA 80h EN W
  286.         MOVWF   OPCION          ; CONFIGURA FLANCO DE BAJADA PARA INT
  287.         BCF     STATUS,5        ; SALE DEL BANCO 1
  288.  
  289.         MOVLW   90H             ; CARGA 90h EN W
  290.         MOVWF   INTCON          ; MUEVE W AL REGISTRO INTCON
  291.  
  292.         MOVLW   B'11100000'     ;  PROGRAMACION DE PUERTOS
  293.         TRIS    PORT_A          ;SEGUN CIRCUITO, SALIDAS DATO A DISPLAY
  294.         MOVLW   B'00001101'     ;ENTRADA INT/RB0  Y ENTRADA PULS.MEMORIA pata 9
  295.         TRIS    PORT_B  ;       ;UN pulso COLOCA Y OTRO SACA MEMORIA
  296.         CLRF    PORT_A
  297.         CLRF    PORT_B
  298.         CLRW
  299. ;---------------------------------------------------------------------------
  300.         MOVLW   .4
  301.         MOVWF   DESTELLO
  302.         BSF     PORT_A,4        ;TEMPORIZACION PARA EL LCD
  303.         CALL    DEMORA          ;SE ESTABILIZA, PUES SINO APARECE BASURA
  304.         BCF     PORT_A,4        ; LED DESTELLOS EN EL ARRANQUE
  305.         CALL    DEMORA
  306.         DECFSZ  DESTELLO,1
  307.         GOTO    $-5
  308. ;-----------------------------------------------------------------
  309.  
  310. BEGIN   MOVLW   02H     ;INICIO DEL MODULO A 4 BITS
  311.         CALL    CONTROL ;
  312.         MOVLW   28H     ;4 BITS 2 LINEAS
  313.         ;MOVLW  07H     ;SELECCIONA MODO ROTAR,EL MENSAJE SALE DE LA DERECHA Y PASA A IZQ.
  314.         ;MOVLW  06H     ;modo fijo a la izq y se agregan a la derecha
  315.         CALL    CONTROL ;EL MENSAJE
  316.         MOVLW   0CH     ;ACTIVA EL DISPLAY
  317.         CALL    CONTROL
  318.         MOVLW   06H     ;MENSAJE FIJO, SIN ROTAR
  319.         CALL    CONTROL
  320. ;---------------------------------------------------------------------
  321.         MOVLW   01H     ;BORRA DISPLAY
  322.         CALL    CONTROL
  323.         call    RETARDO
  324. ;---------------------------------------------------------------------
  325. ;                         MOSTRAR     >>>>>  TODOPIC.COM.AR  <<<<<
  326.  
  327.         CLRF    NUM_LETRA       ;CONTADOR DE LETRA A CARGAR
  328.         MOVLW   .15
  329.         MOVWF   CONTA           ;TOTAL DE LETRAS
  330.         INCF    NUM_LETRA,1     ;ES POSIBLE EMPLEAR UN SOLO CONTADOR
  331.         MOVF    NUM_LETRA,W     ;PERO EL MENSAJE SERIA DE ATRAS PARA ADELANTE
  332.         CALL    TABLA6          ;QUEDARIA ALREVES
  333.         CALL    DATO
  334.         CALL    RETARDO
  335.         DECFSZ  CONTA,1
  336.         GOTO    $-6             ;DE DONDE ESTA, 6 PARA ARRIBA (INCF)
  337.  
  338.  
  339.         MOVLW   .20
  340.         MOVWF   DESTELLO
  341.         BSF     PORT_A,4        ;RETARDO EN PRESENTACION
  342.         CALL    DEMORA
  343.         BCF     PORT_A,4        ;LED ;DESTELLOS EN EL ARRANQUE
  344.         CALL    DEMORA
  345.         DECFSZ  DESTELLO,1
  346.         GOTO    $-5
  347.  
  348.         MOVLW   01H     ;BORRA DISPLAY
  349.         CALL    CONTROL
  350.         CALL    RETARDO
  351.  
  352. ;************************MOSTRAR MARCA**************************
  353. ;         MICROPIC 2001                                        *
  354. ;***************************************************************
  355.         CLRF    NUM_LETRA       ;CONTADOR DE LETRA A CARGAR
  356.         MOVLW   .14
  357.         MOVWF   CONTA           ;TOTAL DE LETRAS
  358.         INCF    NUM_LETRA,1     ;ES POSIBLE EMPLEAR UN SOLO CONTADOR
  359.         MOVF    NUM_LETRA,W     ;PERO EL MENSAJE SERIA DE ATRAS PARA ADELANTE
  360.         CALL    TABLA3          ;QUEDARIA ALREVES
  361.         CALL    DATO
  362.         CALL    RETARDO
  363.         DECFSZ  CONTA,1
  364.         GOTO    $-6             ;DE DONDE ESTA, 6 PARA ARRIBA (INCF)
  365. ;-----------------------------------------------------------------------
  366.         MOVLW   .15
  367.         MOVWF   DESTELLO
  368.         BSF     PORT_A,4
  369.         CALL    DEMORA
  370.         BCF     PORT_A,4        ;;LED ;DESTELLOS EN EL ARRANQUE
  371.         CALL    DEMORA
  372.         DECFSZ  DESTELLO,1
  373.         GOTO    $-5
  374. ;--------------------------------------------------------------------------
  375.         MOVLW   01H     ;BORRA DISPLAY
  376.         CALL    CONTROL
  377.         CALL    RETARDO
  378.  
  379. ;CD2002                     ESCRIBE CONTADOR EN EL LCD,
  380.        
  381.         CLRF    NUM_LETRA       ;CONTADOR DE LETRA A CARGAR
  382.         MOVLW   .14
  383.         MOVWF   CONTA           ;TOTAL DE LETRAS
  384.         INCF    NUM_LETRA,1     ;ES POSIBLE EMPLEAR UN SOLO CONTADOR
  385.         MOVF    NUM_LETRA,W     ;PERO EL MENSAJE SERIA DE ATRAS PARA ADELANTE
  386.         CALL    TABLA4          ;QUEDARIA ALREVES
  387.         CALL    DATO
  388.         CALL    RETARDO
  389.         DECFSZ  CONTA,1
  390.         GOTO    $-6             ;DE DONDE ESTA, 6 PARA ARRIBA (INCF)
  391.         CALL    H'004'
  392. ;-------------------------------------------------------------------------
  393.         MOVLW   .15
  394.         MOVWF   DESTELLO
  395.         BSF     PORT_A,4
  396.         CALL    DEMORA
  397.         BCF     PORT_A,4        ;;LED ;DESTELLOS EN EL ARRANQUE
  398.         CALL    DEMORA
  399.         DECFSZ  DESTELLO,1
  400.         GOTO    $-5
  401. ;---------------------------------------------------------------
  402.         BSF     INTCON,GIE      ;activo las interrupciones
  403.         BSF     INTCON,INTF
  404.         CALL    H'004'          ;FUERZA INTERRUPCION PARA HABILITAR
  405. ;---------------<PRESENTACION EN EL LCD>------------------------
  406. MOSTRAR
  407.         BCF     BANDERA,HABILITA        ;REFRESH,0      ;BORRO BIT PORQUE YA LO MUESTRO el contador
  408.  
  409. BLANK   MOVLW   01H             ;BORRA DISPLAY
  410.         CALL    CONTROL
  411.  
  412. CICLO  
  413.         MOVLW   ">"             ;PARA DESPLAZAR UN CARACTER (00H) QUE NO ES VISIBLE
  414.         CALL    DATO            ;Y EMPIECE A ESCRIBIR EN 01H DEL DISPLAY
  415.         CALL    RETARDO
  416.  
  417.         MOVF    MILLON,W        ;IMPRIMO VALOR DE "MILLON"
  418.         CALL    TABLA2          ;PASO DEL NUMERO AL ASCII
  419.         CALL    DATO            ;INFORMO AL LCD QUE ENVIO UN "DATO"
  420.         CALL    RETARDO         ;RETARDO POR EL LENTO LCD
  421.  
  422.         MOVF    CENMIL,W        ;
  423.         CALL    TABLA2          ;IMPRIMO VALOR DE CENTENA DE MILLON
  424.         CALL    DATO
  425.         CALL    RETARDO
  426.  
  427.         MOVF    DECMIL,W        ;DECENA DE MILLON
  428.         CALL    TABLA2
  429.         CALL    DATO
  430.         CALL    RETARDO
  431.  
  432.         MOVF    UNIMIL,W        ;UNIDAD DE MILLON
  433.         CALL    TABLA2
  434.         CALL    DATO
  435.         CALL    RETARDO
  436.  
  437.         MOVF    CENTENA,W       ;CENTENA
  438.         CALL    TABLA2
  439.         CALL    DATO
  440.         CALL    RETARDO
  441.  
  442.         MOVF    DECENA,W        ;DECENA
  443.         CALL    TABLA2
  444.         CALL    DATO
  445.         CALL    RETARDO
  446.  
  447.         MOVF    UNIDAD,W        ;UNIDAD
  448.         CALL    TABLA2
  449.         CALL    DATO
  450.         CALL    RETARDO
  451.  
  452. ;       GOTO    PRINCIPAL       ;       QUEDA EN LOOP PRESENTANDO HASTA QUE
  453.                                 ;       OCURRA UNA INTERRUPCION
  454.  
  455. ;************************** SENSAR *************************
  456.  
  457. PRINCIPAL
  458. LEER
  459. PULSADOR        ;LEER ESTADO DE Los PULSADORES (coloca o saca memoria)
  460. ;       BTFSS   PORT_B,3        ;ESTA SIN PRESIONAR rb3 =(1) SALTO
  461. ;       GOTO    MARCAR
  462. ;       BTFSS   REFRESH,2       ;LEO SI YA INDICO QUE PULSARON
  463. ;       GOTO    SALIDA
  464. ;       BCF     REFRESH,2       ;BORRO LA MARCA,SOLTARON EL PULSADOR           
  465. ;       INCF    LAP,1           ;SUMA POR CADA FLANCO ASCEND O DESCEND
  466. ;       BCF     REFRESH,1       ;BORRO PARA QUE ESCRIBA "MEMORIA" ---->refresh 1 es memoria
  467. ;       GOTO    SALIDA
  468. ;MARCAR
  469. ;       BSF     REFRESH,2       ;------- marca que fue pulsado Pulsador
  470. ;SALIDA                         ;SI ESTA PULSADO, QUEDA FIJO LA LECTURA
  471. ;       BTFSC   LAP,0           ;PERO CONTINUA CONTANDO PULSOS
  472. ;       GOTO    MEMORY          ;PRINCIPAL
  473. ;       BTFSS   REFRESH,0       ;SI BIT=1 MOSTRAR, LUEGO LO PONGO EN 0 ---->>es el contador
  474. ;       GOTO    PRINCIPAL       ;PARA NO PERDER TIEMPO EN MOSTRAR LO MISMO
  475. ;       GOTO    MOSTRAR
  476.         BTFSS   PORT_B,2        ;PULSO SI MEMO?
  477.         GOTO    MARCA1          ;SI PULSO VA A MARCA1
  478.         BTFSS   PORT_B,3        ;PULSO SACAR MEMO?
  479.         GOTO    MARCA2          ;SI PULSO VA A MARCA2
  480.         GOTO    MARCA3
  481. MARCA1  BSF     BANDERA,MEMO
  482.         GOTO    MARCA3
  483. MARCA2  BCF     BANDERA,MEMO
  484. ;       BSF     BANDERA,HABILITA
  485. MARCA3  BTFSS   BANDERA,MEMO
  486.         GOTO    MARCA5
  487.         BTFSC   BANDERA,MOSTRO
  488.         GOTO    LEER
  489.         ;       BSF     BANDERA,MOSTRO
  490.         GOTO    MEMORY
  491. MARCA5  BCF     BANDERA,MOSTRO
  492.         BTFSS   BANDERA,HABILITA
  493.         GOTO    LEER
  494.         GOTO    MOSTRAR
  495.  
  496.  
  497.  
  498.  
  499. ;************************************************************************
  500.  
  501. MEMORY  ;ESCRIBE "MEMORIA" EN EL LCD, MANTIENE FIJO EL VALOR DEL CONTADOR
  502. ;       BTFSC   REFRESH,1       ;PARA UNA FACIL VISUALIZACION, PERO SIGUE
  503. ;       GOTO    PRINCIPAL       ;INTERNAMENTE ACTUALIZANDO LA CUENTA DE
  504.        
  505.         BCF     INTCON,GIE
  506.  
  507.         CLRF    NUM_LETRA       ;CONTADOR DE LETRA A CARGAR
  508.         MOVLW   .9              ; MEMORIA ->9 LETRAS
  509.         MOVWF   CONTA           ;TOTAL DE LETRAS
  510.         INCF    NUM_LETRA,1     ;ES POSIBLE EMPLEAR UN SOLO CONTADOR
  511.         MOVF    NUM_LETRA,W     ;PERO EL MENSAJE SERIA DE ATRAS PARA ADELANTE
  512.         CALL    TABLA5          ;QUEDARIA ALREVES
  513.         CALL    DATO
  514.         CALL    RETARDO
  515.         DECFSZ  CONTA,1
  516.         GOTO    $-6             ;DE DONDE ESTA, 6 PARA ARRIBA (INCF)
  517.  
  518.         BSF     BANDERA,MOSTRO  ;       BSF     REFRESH,1       ;MEMORIZO QUE YA ESCRIBIO ---->refresh 1 es memoria
  519.         BSF     INTCON,GIE
  520.         GOTO    PRINCIPAL
  521.  
  522. ;----------------------------------------------------------------------
  523.         END

Suerte!

Norberto  :mrgreen:
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado poshijo

  • PIC10
  • *
  • Mensajes: 8
Re: Cuentavueltas con Pic 16f84
« Respuesta #4 en: 17 de Enero de 2008, 22:43:56 »
Gracias por el codigo.
De todos modos ese codigo es para un display LCD y yo tengo que usar dos displays de 7 segmentos por lo que con mis pocos conocimientos el tener que cambiar tanto codigo es como rehacer la catedral de Burgos.

Ya sé que de donde no hay , no se puede sacar, pero no doy para más.
Soy de los que se meten la boina con rosca, vamos más bruto que Agamenón.

Yo creo que no tiene que ser tan complicado, un simple contador ascendente de 0 a 99 con un pic 16f84 en modo RC y dos displays de 7 segmentos con catodo comun.
El hombre fué capaz de llegar a la Luna hace 40 años y yo no spy capaz de hacer que dos numeritos se muestren ordenadamente en dos miseros displays.

En fin , es lo que hay. Estudiaré un poco más y supongo que en unos años lo conseguiré.

Saludos y muchas gracias.
« Última modificación: 17 de Enero de 2008, 22:46:06 por poshijo »

Meta

  • Visitante
Re: Cuentavueltas con Pic 16f84
« Respuesta #5 en: 17 de Enero de 2008, 23:14:54 »
Hola mi muy distinguido amigo.

Para hacer lo que quieres, si sabes electrónica, ni siquiera te hace falta ningún tipo de PIC. Sólo trabajando con lógica, contadores y un IRD.

Ya que usas PIC, te ahorras muchas circuitería y más dinero a cambio de la programación.

- ¿Sabes programar el PIC 16F84A que sepa contar desde una pata de entrada?

Por lo que veo, en realidad necesitas 4 Display de 7segmentos de Cátodo común (Puedes conseguirlo también en azul si te gusta la pijería a cambio de más €).

2 display para cada coche que puedan llegar a 99 como máximo. Como el 16F84A sólo tiene 8 salidas tienes que meter un IC codificador del PIC al dispaly para hacer una conversión.

Se hacer todo esto sin PIC a cambio de muchos IC, mejor es con un PIC que aún no domino, te dará un ejemplo que me vino en el libro.

Lo mejor que haría sería con un IRD, un PIC con más patillajes, 2 display para cada coche, si haces esto ya eres un rey.


Haz un ejemplo como dije antes de que al activar una entrada, empiece a contar a la salida. Prueba con la tabla de la verdad. Si tienes problemas con las conversiones o consigues el 16F876A o dos PIC 16F84A.

Opcional:
Si logras hacer esta parte y te gustan las cosas bien pulida pues al menos yo haría que el que llegue primero a 50 vueltas, se enciende el LED par el ganador y suena un zumbador piezoeléctrico. También claro que hay que programar que puedas seleccionar las cantidad de vueltas que deseas no desde el PC, sino en el propio PIC, eso ya es otro cantar.

Suerte.


Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Cuentavueltas con Pic 16f84
« Respuesta #6 en: 17 de Enero de 2008, 23:14:54 »
ja ja pues Hijo!  :D

bueno, aqui esta tu codigo!, marche con fritas!!!  :mrgreen:

Código: ASM
  1. ;  º                                                                    º
  2. ;  º        _\\|//_                                                             º
  3. ;  º       (` o-o ')                                                    º
  4. ;  º------ooO-(_)-Ooo----------------------------------------------------º
  5. ;  º                                                                     º
  6. ;  º                              www.todopic.com.ar                     º
  7. ;  º    .oooO     Oooo.                                                  º
  8. ;  º    (   )     (   )        obtenga su email gratis                   º
  9. ;  º_____\ (_______) /___________________________________________________º
  10. ;  º      \_)     (_/                                                    º
  11. ;
  12. ;        
  13.       TITLE                 "Contador doble 00-99"
  14.       SUBTITLE              "Revision Nø 2"
  15.       LIST                  F = INHX8M, MM = ON, T = ON, ST = OFF
  16.       RADIX                 HEX
  17.       ERRORLEVEL            0, -302, -306
  18.       PROCESSOR             16F84A          ;16F84A-20/P
  19.  
  20.       #INCLUDE              <P16F84A.INC>
  21.       __CONFIG              _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
  22.       __IDLOCS              H'0000'
  23. ;
  24. ;  B'00111111' B'11111001'
  25. ;       3F         F
  26. ;           3FF9
  27. ;
  28. ; Configuration Bits     16F84A
  29. ;
  30. ; SCRAMBLER     CP       PWRTE      WDT      OSC
  31. ;
  32. ; 00 = SI    0 = SI     0 = SI    0 = NO   00 = LP
  33. ; 3F = NO    1 = NO     1 = NO    1 = SI   01 = XT
  34. ;                                          10 = HS
  35. ;                                          11 = RC
  36. ;
  37. ;****************
  38. ;Cristal utilizado
  39. ;****************
  40. ;
  41. ; 04Mhz en modo XT con 1 useg por instrucción
  42. ;
  43. ;****************
  44. ;Descripcion del uso de cada pin.
  45. ;****************
  46. ;
  47. ; DIGITO_2A   ( digito 2A )                    RA2             pin    1
  48. ; DIGITO_1A   ( digito 1A )                    RA3             pin    2
  49. ; PULSADOR_R  ( Pulsador R )                   RA4/TOCK1       pin    3
  50. ; MCLR/VPP    ( reset y voltage Vpp )          MCLR/VPP        pin    4
  51. ; VSS         ( negativo 0V )                  VSS             pin    5
  52. ; LED_F       ( led del segmento F )           RB0/INT         pin    6
  53. ; LED_E       ( led del segmento E )           RB1             pin    7
  54. ; LED_D       ( led del segmento D )           RB2             pin    8
  55. ; LED_C       ( led del segmento C )           RB3             pin    9
  56. ; LED_B       ( led del segmento B )           RB4             pin   10
  57. ; LED_A       ( led del segmento A )           RB5             pin   11
  58. ; LED_G       ( led del segmento G )           RB6             pin   12
  59. ; PULSADOR_I  ( pulsador I )                   RB7             pin   13
  60. ; VDD         ( positivo 5V )                  VDD             pin   14
  61. ; OSC         ( salida )                       OSC2/CLKOUT     pin   15
  62. ; OSC         ( entrada )                      OSC1/CLKIN      pin   16
  63. ; DIGITO_1B   ( digito 1B )                    RA0             pin   17
  64. ; DIGITO_2B   ( digito 2A )                    RA1             pin   18
  65. ;
  66. ;****************
  67. ;Definicion de RAM del usuario.
  68. ;****************
  69. ;
  70.       CBLOCK      H'0C'
  71.       Dig1A                     ;acumulador decenas para el contador A
  72.       Dig2A                     ;acumulador unidades para el contador A
  73.       Dig1B                     ;acumulador decenas para el contador B
  74.       Dig2B                     ;acumulador unidades para el contador B
  75.       Rota                      ;variable para desplazamiento de display
  76.       Loops1                    ;variables usadas en retardos
  77.       Loops2
  78.       ENDC
  79. ;
  80. #define       PULSADOR_R   PORTA,4
  81. #define       PULSADOR_I   PORTB,7
  82. ;
  83. Reset
  84.   ORG         H'000'            ; Vector de inicio, o sea, desde aqui
  85.                                 ; comienza la ejecución del progrma
  86.                                 ; cuando se alimenta al pic...POR.."Power On Reset"
  87.       GOTO    Inicio            ; Salta hacia el inicio del progrma
  88.   ORG         H'004'            ; Vector de interrupción, o sea aqui salta
  89.                                 ; el PCl cuando se produce una interupción
  90.       RETURN                    ; Retorna sin habilitar las interrupciones
  91. ;
  92. ;-------------------------------------------------------------------
  93. ;-                          Subrrutinas                            -
  94. ;-------------------------------------------------------------------
  95. ;
  96. Retardo                         ;subrutina de retardo
  97.       movwf   Loops1            ;la variable de trabajo contiene la cant.
  98. Top2  movlw   D'110'            ;de ms a demorar
  99.       movwf   Loops2
  100. Top1  nop
  101.       nop
  102.       nop
  103.       nop
  104.       nop
  105.       nop
  106.       decfsz  Loops2,F          ;controla si termina 1mS
  107.       goto    Top1
  108.       decfsz  Loops1,F          ;controla si termina el retardo completo
  109.       goto    Top2
  110.       return
  111. ;
  112. ;-------------------------------------------------------------------
  113. ;
  114. IncDecenas                      ;rutina de incremento x 10
  115.       clrf    INDF              ;pone a cero las unidades
  116.       incf    FSR,F             ;selecciona el registro de las decenas
  117.       incf    INDF,F            ;incrementa el contador de decenas
  118.       movf    INDF,W            ;carga en work el conteo de las decenas
  119.       xorlw   H'0A'             ;si work era 10, entonces quedara en cero
  120.       skpnz                     ;si es cero, el flag z queda alto
  121.       clrf    INDF              ;pasa de 99 a 00            
  122.       return                    ;retorna
  123. ;
  124. ;-------------------------------------------------------------------
  125. ;
  126. IncUnidades                     ;rutina de incremento
  127.       movwf   FSR               ;seleciona el registro de las unidades
  128.       incf    INDF,F            ;incrementa el contador de unidades
  129.       movf    INDF,W            ;carga en work el conteo de las unidades
  130.       xorlw   H'0A'             ;si work era 10, entonces quedara en cero
  131.       skpnz                     ;si es cero, el flag z queda alto
  132.       call    IncDecenas        ;incrementa las decenas
  133.       movlw   D'250'            ;retardo de 100ms
  134.       call    Retardo
  135.       return
  136. ;
  137. ;-------------------------------------------------------------------
  138. ;
  139. ; entrada : W            Valor bcd a convertir         (H'00' a H'09').
  140. ; salida  : W            Valor 7 segmentos
  141. ;
  142. ;La codificacion de los siete segmentos es la siguiente.
  143. ;
  144. ;   GABCDEF
  145. ;B'xxxxxxxx'
  146. ;
  147. ;        A
  148. ;      ----
  149. ;   F |    | B
  150. ;     |  G |
  151. ;      ----
  152. ;   E |    | C
  153. ;     |    |
  154. ;      ---- o
  155. ;        D
  156. Tabla                           ;genera los numeros sobre el display
  157.       andlw   B'00001111'       ;solo H'0F'
  158.       addwf   PCL,F             ;agrega al cont. programa el valor de work
  159.       retlw   B'00111111'       ;genera el 0
  160.       retlw   B'00011000'       ;genera el 1
  161.       retlw   B'01110110'       ;genera el 2
  162.       retlw   B'01111100'       ;genera el 3
  163.       retlw   B'01011001'       ;genera el 4
  164.       retlw   B'01101101'       ;genera el 5
  165.       retlw   B'01101111'       ;genera el 6
  166.       retlw   B'00111000'       ;genera el 7
  167.       retlw   B'01111111'       ;genera el 8
  168.       retlw   B'01111101'       ;genera el 9
  169. ;
  170. ;Los siguientes debuelven E de "error", esto es por si se pasa
  171. ;un valor a la tabla desde H'0A' hasta H'0F'.
  172. ;
  173.       retlw   B'01100111'       ;genera la E
  174.       retlw   B'01100111'       ;genera la E
  175.       retlw   B'01100111'       ;genera la E
  176.       retlw   B'01100111'       ;genera la E
  177.       retlw   B'01100111'       ;genera la E
  178.       retlw   B'01100111'       ;genera la E
  179. ;
  180. ;-------------------------------------------------------------------
  181. ;-                      Programa Principal                         -
  182. ;-------------------------------------------------------------------
  183. ;
  184. Inicio                          ;programa principal
  185.       bsf     STATUS,RP0        ;selecciona el banco de memoria alto
  186.       movlw   B'00010000'       ;configura RA0~RA3 como salidas
  187.       movwf   TRISA             ;y RA4 como entrada
  188.       movlw   B'10000000'       ;configura RB0~RB6 como salidas
  189.       movwf   TRISB             ;y RB7 como entrada
  190.       bcf     STATUS,RP0        ;selecciona el banco de memoria bajo
  191.       clrf    Dig1A             ;inicializa acumuladores
  192.       clrf    Dig2A
  193.       clrf    Dig1B
  194.       clrf    Dig2B
  195.       movlw   H'00'             ;envia ceros a los transistores para apagar
  196.       movwf   PORTA             ;todos los displays
  197. ;
  198. Empe  btfss   PULSADOR_R        ;¿ Esta presionado el pulsador R ?
  199.       goto    Mostrar           ;No
  200.       movlw   Dig1A             ;Carga el puntero para el primer contador
  201.       call    IncUnidades       ;llama la rutina de incremento para el contador A
  202. ;      
  203.       btfss   PULSADOR_I        ;¿ Esta presionado el pulsador I ?
  204.       goto    Mostrar           ;No
  205.       movlw   Dig1B             ;para cargar el puntero
  206.       call    IncUnidades       ;llama la rutina de incremento para el contador B
  207. Mostrar
  208.       movlw   H'08'             ;iniciar un 1 en el registro de rotacion
  209.       movwf   Rota            
  210.       movlw   Dig1A             ;con el registro selector (fsr) se apunta
  211.       movwf   FSR               ;al primer dato que se va a mostrar
  212. Disp  movlw   H'00'             ;colocar en cero el dato del display
  213.       movwf   PORTB             ;para apagarlos
  214.       movf    Rota,W            ;pasa rotacion del 1 a la variable work
  215.       movwf   PORTA             ;enciende el transistor (display)
  216.       movf    INDF,W            ;lee el dato del registro apuntado por fsr
  217.       call    Tabla             ;genera el digito de 7 segmentos
  218.       movwf   PORTB             ;envia el digito al puerto b
  219.       movlw   H'03'             ;retardo de 3ms para visualizacion
  220.       call    Retardo
  221.       btfsc   Rota,0            ;controla si terminaron las cuatro rotaciones
  222.       goto    Empe              ;si termino, vuelve desde el comienzo
  223.       bcf     STATUS,C          ;carry en cero para no afectar las rotaciones
  224.       rrf     Rota,F            ;desplaza el 1 que enciende los displays
  225.       incf    FSR,F             ;incrementa el puntero. Apunta el proximo
  226.       goto    Disp              ;digito a mostrar
  227.  
  228.       END


espero lo analices, lo interpretes bien, y lo puedas implementar... ya esta todo hecho ok?

Norberto
« Última modificación: 17 de Enero de 2008, 23:17:49 por todopic »
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado poshijo

  • PIC10
  • *
  • Mensajes: 8
Re: Cuentavueltas con Pic 16f84
« Respuesta #7 en: 17 de Enero de 2008, 23:44:57 »
Muchisimas gracias a los dos.
La semana pasada lo tenia casi conseguido, pero con un error gordo, gordo.
Conseguí hacer que el ultimo digito cambiase, incrementando, pero despues de cada incremento se me encendian todos los displays o sea mostraba el 8 , no se que hice y borré el archivo asm.
Otra vez a empezar de cero.
Luego hice el segundo y ya no lo hice igual, se me encendian los dos displays que parecia la feria de Sevilla, ala uno por aquí , otro por alli, una ruina.

Lo he intentado mil veces, que si quito, que si pongo y al final muerto de sueño a la cama sin conseguirlo.

En fin, lo probaré mañana, que aqui en España ya son casi las tres de la madrugada y tengo que levantarme temprano.

De verdad, da gusto tratar con gente como ustedes.
Un abrazo.