lunes, 18 de septiembre de 2017

PROYECTO: RELOJ DS 1307 CON DISPLAY 7 SEGMENTOS

Objetivo General


  • Realizar un reloj mediante un PIC 16F877A y un DS 1307

Objetivos Específicos


  • Descripción del diagrama de bloques donde se definan las características físicas y programables.
  • Familiarizarnos con el lenguaje C Compiler para PIC..
  • Construcción de un circuito impreso para corroborar el funcionamiento del proyecto.

Justificación


Vamos a realizar nuestro proyecto que se refiere a una programación utilizando micro controladores, donde  uno de los factores para nuestro proyecto es el control del tiempo ya que en algunas ocasiones la hora en la mayoría de relojes o ordenadores nos son exactos , mediante el cual vamos a proyectarnos a solucionar ese inconveniente.
También podemos aplicarlo en otros recursos como son los ambientales como temperatura y porcentajes de humedad relativa, es de esencial importancia en procesos en los cuales la toma de decisiones del mismo, depende estrictamente del comportamiento de estos parámetros. 


Introducción

En el presente trabajo se describe el Reloj de Tiempo Real DS1307 de Dallas Semiconductors. La aplicación se realiza utilizando un microcontrolador PIC18F452 y el software, utilizando el PICC de CCS. Un reloj de tiempo real es un dispositivo muy útil en cualquier aplicación donde se quiera dejar constancia de fecha y hora de algún evento. El DS1307 es un RTC cuya interfaz con el microcontrolador se realiza utilizando el bus I2C (Inter-Integrated Circuit), desarrollado por Phillips Semiconductors.


Características Generales del DS1307

 El DS1307 es un poderoso reloj calendario en BCD, cuyas características más destacadas son las siguientes:


  • Reloj de tiempo real que cuenta los segundos, los minutos, las horas, la fecha, el mes, el día de la  semana, y el año, con compensación de años bisiestos, válido hasta el año 2100.
  •  Formato de 12 Horas con indicador AM/PM ó de 24 horas.
  • 56 bytes de RAM no volátil, para almacenamiento de datos.
  • Señal de onda cuadrada programable.
  • Circuitos internos de respaldo para la alimentación automático.
  • Bajo consumo de potencia: menor a 500nA en modo respaldo, a 25 grados Centígrado.
  • Sólo 8 pines


Descripción de los Pines



La figura 1, muestra la asignación de los pines del DS1307 los cuales se describen a continuación: Fig. 1 Asignación de pines del DS1307 VCC, GND: La alimentación DC es proporcionada a este circuito a través de estos pines. VCC es la entrada de +5VDC, mientras que GND es la referencia. 

VBAT: Entrada de alimentación de una pila estándar de litio de 3 Voltios. El voltaje debe esta entre 2.5 y 3.5 voltios para una operación apropiada. 

SCL: Entrada de reloj para sincronizar la transferencia de datos en la interfaz serial.

VCC, GND: La alimentación DC es proporcionada a este circuito a través de estos pines. VCC es la entrada de +5VDC, mientras que GND es la referencia.

VBAT: Entrada de alimentación de una pila estándar de litio de 3 Voltios. El voltaje debe esta entre 2.5 y 3.5 voltios para una operación apropiada.

 SDA: Entrada/salida de datos para la interfaz I2 C. Este pin es de drenaje abierto, por lo que requiere de una resistencia pull-up externa.

X1,X2: Conexiones para un cristal de cuarzo estándar de 32.768 Hz.

SQW/OUT: Salida para generar una de cuatro posibles frecuencias de salida: 1Hz, 4KHz, 8KHz ó 32KHz. Este pin también es de drenaje abierto, por lo que requiere de una resistencia pull-up externa.




Diagrama de Bloques 



Evidencias



domingo, 17 de septiembre de 2017

FASE 1: Análisis del Problema y Propuesta de solución utilizando uControlador PIC

FASE 1: Análisis del Problema y Propuesta de solución utilizando Microcontrolador PIC.

Introducción

Materiales a usar:
  • CCS Compiler instalado.
  • Entrenador de PICS
  • Pantalla LCD
  • PIC16F877A
Los pics son una familia de micro controladores tipo RISC fabricados por Microchip Technology INC., y hoy en día los PICs vienen con periféricos incluidos tales como módulos de comunicación serie UART, núcleos de control de motores, etc.

Ahora veremos algunas características del PIC:




  • Memoria ROM: 8Kb
  • Memoria RAM: 368 x 8 bytes
  • Pines I/O: 33
  • Frecuencia: 20 Mhz con cristal externo
  • Permite programación ICSP
  • Consta de 40 pines

  • Diagrama de bloques sobre la tarjeta entrenadora con pic PIC16F877A


    Imagen del PIC a usar y diagrama interno del mismo



    Propuestas de proyecto.

    -Reloj con PIC

    -Cerradura electrónica 4x4 con el PIC 16F877A



    -Control de Tanque con pic16F877 y lcd 16x2



    -Alarma Programable PIC16F877A



    Conversor ADC.



    #include <16f877a.h>

    #device adc=10

    #fuses HS, NOPROTECT, NOWDT

    #use delay(clock=20M)

    #define lcd_data_port getenv("sfr:portd")

    //#define lcd_rs_pin pin_b0

    //#define lcd_rw_pin pin_b1

    //#define lcd_enable_pin pin_b2



    #define LCD_ENABLE_PIN        PIN_D3

    #define LCD_RS_PIN            PIN_D2

    #define LCD_RW_PIN            PIN_A0

    #define LCD_DATA4             PIN_D4

    #define LCD_DATA5             PIN_D5

    #define LCD_DATA6             PIN_D6

    #define LCD_DATA7             PIN_D7  

    #include <lcd.c>



    void main()

    {

       int16 q;

       float p;

       setup_adc_ports(ALL_ANALOG);

       setup_adc(adc_clock_internal);

       lcd_init();

       while(true)

       {

          set_adc_channel(3);

          delay_us(20);

          lcd_gotoxy(1,1);

          q=read_adc();

          p=(5.0*q)/1024.0;

          printf(lcd_putc," ADC = %4Ld",q);
          printf(lcd_putc,"\n voltaje = %1.2f",p);
       }
    }
    Video
     
     


    Programación Mediante Maquinas de Estados.


    #include <16f877a.h>

    #device adc=10

    #fuses HS, NOPROTECT, NOWDT

    #use delay(clock=20M)

    #define lcd_data_port getenv("sfr:portd")

    //#define lcd_rs_pin pin_b0

    //#define lcd_rw_pin pin_b1

    //#define lcd_enable_pin pin_b2



    #define LCD_ENABLE_PIN        PIN_D3

    #define LCD_RS_PIN            PIN_D2

    #define LCD_RW_PIN            PIN_A0

    #define LCD_DATA4             PIN_D4

    #define LCD_DATA5             PIN_D5

    #define LCD_DATA6             PIN_D6

    #define LCD_DATA7             PIN_D7  

    #include <lcd.c>





    void main()

    {

       int16 q;

       int s;

       float p;

       int ESTADO=1;

       int m=0;

       setup_adc_ports(ALL_ANALOG);

       setup_adc(adc_clock_internal);

       lcd_init();

      while(true)

       { 

              while(ESTADO==1)

              {
                         set_adc_channel(1);
                         delay_us(20);
                         lcd_gotoxy(1,1);
                         q=read_adc();
                         p=(5.0*q)/1024.0;
                         printf(lcd_putc," ADC = %4Ld",q);
                         printf(lcd_putc,"\n voltaje = %1.2f",p);
                         delay_ms(100);     
                  IF (input(PIN_b1))
                            {         
                               ESTADO=2;
                            }    
              }
       delay_ms(50);
       printf(lcd_putc," \f ");
             while(ESTADO==2)
             { 
                   IF (input(PIN_b2))
                           {
                               delay_ms(50);
                               m=m+1;
                           }   
                   IF (input(PIN_b3))
                           {
                              delay_ms(100);
                              m=m-1;
                           }                                
                   lcd_gotoxy(1,1);    
                   printf(lcd_putc,"  CONTADOR");
                   printf(lcd_putc,"\n %i",m);    
                   IF (input(PIN_b1))
                     {
                            ESTADO=1;
                     }     
              }
        printf(lcd_putc," \f ");
       }  
    }
    Vídeo



    Observaciones y Conclusiones:

    • En este laboratorio aprendimos como es que funciona un convertidor ADC y come hacer uno mediante programacion en el programa CCS compiler.
    • En este laboratorio aprendimos a realizar maquinas de estados las cuales nos ayudaron a realizar trabajos los cuales tenían funciones múltiples.
    • Realizamos una maquina de estados simples para comprobar que este efectivamente este nos ahorraba tiempo y mejoraba el funcionamiento de nuestra programación, ya que ahora no era necesario usar algunos códigos.
    • Observamos que podemos aplicar maquinas de estados en cualquier tipo de proyecto en donde este tenga mas de una función.

    FASE 2: SIMULACION EN PROTEUS.







    Observaciones y Conclusiones:

    • Observamos que fue necesario usar el circuito integrado ds1307 para poder tener una hora exacta y sin problemas de adelanto o trazo de esta.
    • El circuito integrado ds1307 contaba con una alimentación externa de 3 V la cual hacia que el reloj de 32.768 kz siga operando, y por la tanto el tiempo de este no se detendría amenos que cortemos la alimentación de 3 V.
    • Aprendimos que los pines del puerto B tienen la función principal de interrupciones, por eso es que utilizamos estos puertos como pulsadores de hora,min,clk y pause.



    FASE 3: CODIGO EN PIC CCS E IMPLEMENTACION FISICA.

    CÓDIGO:














    IMPLEMENTACIÓN FÍSICA




    Observaciones y Conclusiones:

    • Observamos que es importante revisar antes el datasheet de los componentes a utilizar, ya que mucho de estos tienen alimentación propia y funciones especificas.
    • Fue muy importante revisar foros de electrónica para buscar información del enlace entre el PIC y el ds1307.
    • Aprendimos a utilizar y conectar el ds1307.
    • Fue necesario hacer pruebas de la programacion en el simulador Proteus para poder armarlo físicamente.
    • Hicimos uso de maquinas de estados para poder hacer la configuración de la hora en nuestro reloj.

    FASE 4: FUNCIONAMIENTO FISICO.