>

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 y +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:

PROYECTO: Temporizador y contador en C con PIC16F877A + código + simulación proteus

Hey ¡SkullTraper! bienvenido a un nuevo post el día de hoy les traigo un proyecto muy fácil de elaborar más de allá de sólo compartir el código y ya, (Que es por lo que muchos vienen) voy a comentar a detalle todo el proyecto de 0 a 100 fácilmente y lo más entendible posible. 


¿DE QUÉ TRATA EL PROYECTO? 

Primero te dejamos este vídeo de nuestro canal ;)
 

El proyecto en cuestión es una pequeña práctica que hace poco realicé en la Universidad junto con dos compañeros más (era en grupo) el plantemiento inicialmente dice lo siguiente:

- Se desea implementar mediante un MCU de gama media, un temporizador regresivo programable de 0 a 99 segundos, de acuerdo con el diagrama y las especificaciones indicadas:


> El pulsador ‘ON/OFF’ permite prender o apagar la carga (para las pruebas un LED).

> Al oprimir el pulsador ‘Up’, se incrementa (de forma cíclica) el valor de temporización deseado.

> Al oprimir ‘Start’, el sistema realiza de forma autónoma un conteo regresivo de segundos (desde el valor previamente programado) y al llegar a cero, el estado de la carga conmuta y el sistema queda listo para volver a funcionar.



DESARROLLO COMPLETO DEL PROYECTO

Aclaro que para programar se usó el software de MPLAB la versión que se usó la tenemos en este blog compartida (Click aquí), además, de PIC C COMPILER también para compilar el código del proyecto, para simulaciones Proteus y para cargar el código al PIC el programa oficial de Pickit (Pickit 2 software), arranquemos:

1. Materiales 

Vamos a detallar que materiales son necesarios para el montaje de este proyecto más exactamente los que se usaron para hacerlo:

- x1 Programador de PICS (PICkit 2 el que usamos)
- x1 PIC 16F877A
- x2 Displays 7 segmentos (Ánodo Común)   
- x1 Fuente de voltaje, 5v está bien para trabajar.
- Jumpers o puentes de cable UTP para conexiones.
- x1 LED que será la carga, dicha en el planteamiento.
- x1 Capacitor de 22pF 
- x2 Resistencias de
- x3 pulsadores sencillos
- x1 Cristal de Cuarzo de 4Mhz
- x1 Protoboard

¡Sale! con esto empezamos sin problema alguno el proyecto.

2. Simulación

A continuación mostramos una imagen de la simulación en Proteus sería algo así:


Al final podrás descargar todo el proyecto completo con código + simulación.

3. Programando el PIC en C código del proyecto

El paso vital al que muchos quieren llegar, el código a usar es el siguiente:    
#include <16f877A.h>
#Fuses XT,NOWDT,NOPUT,NOPROTECT              
#use delay(clock=4000000)
#use fast_io(B)
#use fast_io(D)
#use fast_io(C)
#use fast_io(E)
int8 disp1,disp2, cont;
int8 const Deco[10]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 2, 0x78, 0, 0x18};


/*FUNCION DE INICIALIZACION DE PUERTOS*/
void ini_puertos(){
   port_B_pullups(true); //pull - up activos en port B
   set_tris_B(0xFF); // todo port B como entrada
   set_tris_D(0x00);
   set_tris_C(0x00);
  set_tris_E(0x00);
cont=0;
}

/*FUNCION DE INCREMENTO EN DISPLAYS POR LIMITE*/
void incrementa(){
cont++;
disp2++;
if(disp2==10){
disp2=0;
disp1++;
if(disp1==10){
disp1=0;
}}}

/*FUNCIÓN DE DECREMENTO EN DISPLAYS*/
void inicio(){
if((disp1!=0)||(disp2!=0)){
disp2--;
if(disp2==255 ){
disp2=9;
disp1--;

}
}

}
void main(){
      ini_puertos();
      disp1=0;
      disp2=0;
   output_D(Deco[disp1]);
   output_C(Deco[disp2]);
   output_high(pin_E0);       //Led apagado

while(true){
  if(!input(pin_B7)){   //CONTADOR CON BOTON 
       incrementa();
       output_D(Deco[disp1]);
       output_c(Deco[disp2]);
       delay_ms(200);   //Configuración tiempo de incremeto al pulsar el botón
   }

if(!input(pin_B5)){ //Encendido de LED ó prueba de carga
output_low(pin_E0);
delay_ms(200);
output_high(pin_E0);
}

if(!input(pin_B6)){     //descontador de #
       while(cont!=0){   
             inicio();
             output_D(Deco[disp1]);
             output_c(Deco[disp2]);
             delay_ms(1000);
            cont--;
}
if((disp1==0)||( disp2==0)){
output_high(pin_E0);
delay_ms(200);
output_low(pin_E0);
}
}

}

return;
}

Bien, muy bien el código tiene comentado lo más relevante no hace falta modificarlo si entiendes muy bien lenguaje C podrás interpretarlo completamente aunque es muy corto.

4. Montaje final 

Esta etapa y última no tiene porque ser igual para todos quiénes hagan este proyecto, de hecho a nosotros no nos quedó muy estético (de por sí ningún proyecto electrónico queda muy estético siempre <<jajaja>>) al final en foto algo así quedó:


Hasta aquí todo claro, puedes descargar todo el proyecto dando (CLICK AQUÍ). 

Espero les guste el contenido propuesto, es todo, hasta la próxima.
Compartir:

SkullTrapers

Posts más vistos

 

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