>

PROYECTO: Cronómetro con PIC16F877A y display 7 segmentos en Assembler

Este proyecto es desarrollado en Assembler al final del post puedes descargar todo el proyecto + código + simulación

¡Un post más! Un buen SkullTraper sabe que aquí ponemos excelentes proyectos para motivarte, el día de hoy traemos un proyecto hecho en el lenguaje "Assembler" antes que nada quiero agradecer a +Juanita triana+Nathan Bromberg  que me facilitó su proyecto yo hice algunos vídeos y pequeñas modificaciones sobre su proyecto ya que son compañeros de la Universidad.




¿DE QUE TRATA EL PROYECTO? 

Te dejo un vídeo del Proyecto funcionando ;)


Este proyecto tiene como objetivo realizar un cronómetro pero en lenguaje ensamblador (Este no es en C como los otros proyectos 😧), más exactamente el planteamiento dice lo siguiente:

  • Tomando como referencia el diagrama que se ilustra en la figura, se desea diseñar e implementar un cronómetro cuyo conteo esté dado en décimas de segundo (0.0 - 0.1 - 0.2 --- 9.8 - 9.9 - 0.0 --). Un pulsador permite iniciar o continuar el conteo, otro permite detener y otro borrar. 


DESARROLLO COMPLETO DEL PROYECTO

Como siempre y es sagrado de inicio aclaro que el proyecto fue realizado en MPLAB "El viejo confiable para proyectos con PIC" no se hizo uso de librerías especiales añadidas, para simulación proteus como siempre, como tal el proyecto es sencillo y fácil de entender al final podrás descargar todo el contenido de este proyecto 😄:


1. MATERIALES Y COMPONENTES En este proyecto fue necesario el siguiente uso de componentes:

- x1 Programador de PICS (Pickit2)
- x1 PIC16F877A
- x2 Displays 7 segmentos 
- x3 leds pequeños
- x3 pulsadores normales
- x3 resistencias de 220 ohms
- x2 Capacitores de 15pF
- Jumpers o puentes de conexión
- x1 Protoboard
- x1 fuente de voltaje, 5V está bien para trabajar
- x1 Cristal de Cuarzo de 4MHz
- x2 resistencias de 330 ohms
- x1 resistencia de 10k ohms
- x1 capacitor de 0,1uF

¡Listo! con esto podremos iniciar el proyecto sin problema alguno.

1.1. Cálculos de resistencias y demás   

Este paso es opcional pues prácticamente más arriba di los números precisos de cada componente, pero, si deseas saber como se hizo aquí te lo explico, este paso es para determinar a exactitud que valor de resistencias usar para los leds y displays, ¡Vamos que si llevan por seguridad

  • Resistencias de los LEDS, sabemos que la máxima corriente de salida de los puertos del micro que usamos, es decir, el PIC es de 25mA, pero, en este caso sólo se usará 15mA. El voltaje promedio son 5V y en los leds irán 3,5V usarán los leds, ahora, por ley de ohm nuestro pequeño despeje queda:

  • Resistencias para los displays, aplicamos el mismo principio anterior, ley de Ohm, entonces nos da:
  • Retardo en mS, para el retardo incialmente se había propuesto 100mS, pero, después del retardo siguen algunas instrucciones antes de volver a incrementar, se propone un retardo de 45mS aproximadamente:
 2. SIMULACIÓN PROTEUS 

La simulación como siempre hecha en Proteus todo normal y fácil de entender es apenas algo así: 


 3. CÓDIGO COMPLETO, PROGRAMA PIC

El código del proyecto no es muy largo y de hecho es bastante fácil de entender "siempre y cuando domines el lenguaje" no se hizo necesario el uso de alguna librería personalizada o similar:
 

 ;******************************************************************************************
;*           *
;* DESCRIPCIÓN DEL PROGRAMA
;* 
;* *ESTE PROGRAMA PERMITIRA CONTAR DE 0 A 99 DE FORMA ASCENDENTE Y DESCENDENTE
;* ACCIONADO POR DOS BOTONES. AL PULSAR UN BOTON, ESTE EMPIEZA A CONTAR DE FORMA ASCENDENTE
;    Y AL PULSAR EL OTRO, DE MANERA DESCENDENTE    *
;*          *
;*  AUTORES: JUANITA TRIANA 
;*                       *NATHAN BROMBERG
;*   *EDGAR CHICA
;*  MICRO:  PIC 16F877A           *
;*  OSCILADOR: 4 MHz            *
;*                *
;******************************************************************************************
;
;
 LIST p=16F877A
 #INCLUDE "p16F877A.inc"
;
 __CONFIG 3F71
;
;
; *************  DECLARACIÓN DE VARIABLES         *******************************
;
 CBLOCK 20
 UNID,DEC, R1, R2 
 ENDC
;

;EQU 

;
; ********************        DEFINICIONES GENERALES      ******************************
     #DEFINE BOTON_START PORTB,7 
     #DEFINE BOTON_STOP PORTB,6 
     #DEFINE BOTON_RESET PORTB,5
     #DEFINE LED_VERDE PORTB,0
     #DEFINE LED_ROJO PORTB,1
     #DEFINE LED_AZUL PORTB,2
     
;

;
; ________________________________________________________________________________________
;|          |
;|          DECLARACIÓN DE MACROS         |
;|________________________________________________________________________________________|
  INI_PUERTOS MACRO
    BCF STATUS,RP1 ;BK1
    BSF STATUS,RP0 ;BK0
    BCF OPTION_REG,7 ;PULL UP
    BSF TRISB,7 ;RB7 ENTRADA
    BSF TRISB,6 ;RB6 ENTRADA
    BSF TRISB,5 ;RB5 ENTRADA
    BCF TRISB,0 ;RB0 SALIDA
    BCF TRISB,1 ;RB1 SALIDA
    BCF TRISB,2 ;RB2 SALIDA
    CLRF TRISC ;PORTC SALIDA
    CLRF TRISD ;PORTD SALIDA
    BCF STATUS,RP0    ;BK0
    ENDM 



;-----------------------------------------------------------------------------------------
;
 ORG 00   ; VECTOR DE RESET
 GOTO INICIO
;
;
; ________________________________________________________________________________________
;|          |
;|         TABLAS Y PROCEDIMIENTOS    |
;|________________________________________________________________________________________|
;TABLA DECO
TABLA_DECO ;ANODO COMÚN 
 CLRF PCLATH
 ADDWF PCL,F
    DT 40, 79, 24, 30, 19, 12, 2, 78, 0, 10
 RETURN
;---------------------------------------------------------------------------------------------- 
;VISUALIZA
VISUALIZA
    MOVFW UNID
    CALL TABLA_DECO
    MOVWF PORTC
    MOVFW DEC
    CALL TABLA_DECO
    MOVWF PORTD
    RETURN
    
;INCREMENTA
INCREMENTA
    INCF UNID,F
    MOVLW .10
    XORWF UNID,W
    BTFSS STATUS,Z 
    GOTO SALE_INC
    CLRF UNID
    INCF DEC,F
    MOVLW .10
    XORWF DEC,W
    BTFSS STATUS,Z
    GOTO SALE_INC
    CLRF DEC
SALE_INC
    RETURN
    
;RESET
REINICIAR
    CLRF UNID
    CLRF DEC
    CALL VISUALIZA
    RETURN
    
;RETARDO_100MS
RETARDO_100MS
    MOVLW .122
    MOVFW R2
    
CICLO2
    MOVLW .122
    MOVWF R1
    
CICLO1 
    DECFSZ R1,F
    GOTO CICLO1
    DECFSZ R2,F
    GOTO CICLO2
    
   RETURN 
;LEDS
LED_1
BTFSC PORTB,7
GOTO SALE_L1
BCF PORTB,0
SALE_L1
RETURN

LED_2
BTFSC PORTB,6
GOTO SALE_L2
BCF PORTB,1
SALE_L2
RETURN

LED_3
BTFSC PORTB,5
GOTO SALE_L3
BCF PORTB,2
SALE_L3
RETURN

APAGA1
BSF PORTB,0
RETURN

APAGA2
BSF PORTB,1
RETURN

APAGA3
BSF PORTB,2
RETURN



   
;

;
;
;******************************************************************************************
;*          *
;*                   PROGRAMA  PRINCIPAL       *
;*               *
;******************************************************************************************
;
;
;
INICIO
    INI_PUERTOS
    CLRF UNID
    CLRF DEC
    CALL VISUALIZA
    
PRINCIPIO
    BTFSC BOTON_START
    GOTO PRINCIPIO
    
INCREMENTO
    CALL APAGA2
    CALL APAGA3
    CALL LED_1
    CALL INCREMENTA
    CALL VISUALIZA
    CALL RETARDO_100MS
    
    BTFSC BOTON_STOP
    GOTO INCREMENTO
    CALL APAGA1
    CALL LED_2
    CALL VISUALIZA
    GOTO MIENTRAS
    
MIENTRAS
    BTFSC BOTON_START
    GOTO REINICIO
    GOTO INCREMENTO
    
REINICIO
    BTFSC BOTON_RESET
    GOTO MIENTRAS
    CALL APAGA2
    CALL LED_3
    CALL REINICIAR
    GOTO PRINCIPIO
    
 END 
4. MONTAJE FINAL DEL PROYECTO 

Como es siempre sagrado el montaje final del proyecto en una foto, aunque este proyecto no lo montó ningún miembro del equipo de SkullTrap damos la foto de como debería quedar similar:


Es todo en este proyecto, como siempre digo que en la publicación de proyectos no profundizamos mucho en explicaciones ya que seguro si buscas un proyecto de este calibre es porque entiendes la gran mayoría de cosas. De igual forma si tienes dudas puedes comentar libremente, seguro te la podemos resolver de ser posible.

https://drive.google.com/open?id=0B8xtMFpL-ixBdWd6SmtqcmFzWmc


Es todo en este artículo hasta la próxima 😊,
Compartir:

12 comentarios:

  1. disculpa, si realizo el armado en físico de lo que hay en la simulación, con displays de ánodo común normales no me funcionan, también en la foto del armado hay dos capacitores que no aparecen en la simulación, estos que función tienen?

    ResponderEliminar
    Respuestas
    1. Estos capacitores van en paralelo al cristal de cuarzo

      Eliminar
  2. Estoy intentando realizr este proyecto pero que tenga, minutos, segundo y milescimas, estoy intentando realizarlo con 3 7segmentos dobles de anodo comun pero no he podido ni siquiera darle arranque, les agradeceria si tienen en sus archivos algun proyecto con esas caracteristicas.

    ResponderEliminar
    Respuestas
    1. Hola no, lastimosamente no tenemos nada de lo que deseas.

      Saludos,

      Eliminar
  3. el codigo de la parte de arriba se copita todo o no

    ResponderEliminar
    Respuestas
    1. Hola Gregorio copias todo el código desde la línea 1 hasta la línea 220 todo lo requieres

      Saludos,

      Eliminar
    2. hola que puedo hacer quiero que cuente de uno en uno pulsando

      Eliminar
    3. Hola anónimo me es imposible explicarte en un comentario pero trata de buscar en Google contador por pulso en assembler a ver como te va.

      Salu2,

      Eliminar
  4. Quiero simular el proyecto en proteus pero me aparecen dos errores [PIC16] Program filename has no extension. [U1] y Real Time Simulation failed to start. Que debo cambiar?

    ResponderEliminar
    Respuestas
    1. Hola lastimosamente el proyecto no lo he desarrollado yo y ha sido un aporte de unos compañeros de la universidad hace ya 4 años

      Eliminar
  5. Podrian decirme como conectar? Lo conecte de acuerdo al diagrama de proteus y no sirve. Hice el modelo en proteus y me funciona perfectamente. De que valor el el capacitor que va en el pin 1 del PIC? Si tuvieran un diagrama me seria de super ayuda :c

    ResponderEliminar

SkullTrapers

Posts más vistos

 

CLICK AQUI PARA IR A NUESTRA TIENDA ON LINE ARDUINO, ELECTRÓNICA, COMPONENTES