parcial 2 jesus

15
República Bolivariana De Venezuela Ministerios Del Poder Popular Para La Defensa Universidad Nacional Experimental Politécnica De La Fuerza Armada UNEFA – Caracas Asignatura: Microprocesadores Sección: 6ITTC-D01 PARCIAL #2 Tutor: Alumno: José Muñoz. Jesus Urbina CI: 19581133 Caracas, mayo de 2015

Upload: jesus-urbina

Post on 10-Nov-2015

216 views

Category:

Documents


0 download

DESCRIPTION

Informe Reloj Digital

TRANSCRIPT

  • Repblica Bolivariana De Venezuela Ministerios Del Poder Popular Para La Defensa

    Universidad Nacional Experimental Politcnica De La Fuerza Armada

    UNEFA Caracas Asignatura: Microprocesadores

    Seccin: 6ITTC-D01

    PARCIAL #2 Tutor: Alumno: Jos Muoz. Jesus Urbina CI: 19581133

    Caracas, mayo de 2015

  • Introduccin

    El presente proyecto tiene como finalidad realizar un reloj digital con una pantalla lcd en el cual la metodologa empleada es tipo basada en un contador con interrupciones debido a que el microcontrolador pic 18f4550 hace un solo proceso a la vez ya que es mono tarea utilizando un men para su configuracin en la cual se utiliza el puerto a del microcontrolador y el puerto D para la configurar la pantalla lcd 16x2 obteniendo como resultado un reloj digital con un formato de hora am pm en formato de 12 horas.

  • Reloj digital

    Se denomina al que indica la hora mediante nmeros digitales, por oposicin al reloj analgico que lo hace mediante manecillas. El funcionamiento de los relojes digitales en electrnico normalmente, si bien existen emuladores informticos que pueden presentar en la pantalla de una computadora tanto relojes analgicos como digitales.

    Materiales a utilizar

    Microcontrolador 18f4550

    Pantalla lcd 16x2

    4 pulsadores

    Resistencias de 330 ohm

    Poteciometro de 10k ohm

    Cristal de cuarzo de 4mhz

    2 condensadores de 22pF

    Cable utp

    Protoboard

    Fuente de 5v

    Conceptos bsicos

    PIC

    Son una familia de micro controladores tipo RISC fabricados por Microchip Technology Inc. y derivados del PIC1650, originalmente desarrollado por la divisin de microelectrnica de General Instrument.

    El PIC original se dise para ser usado con la nueva CPU de 16 bits CP16000. Siendo en general una buena CPU, sta tena malas prestaciones de entrada y salida, y el PIC de 8 bits se desarroll en 1975 para mejorar el rendimiento del sistema quitando peso de E/S a la CPU. El PIC utilizaba micro cdigo simple almacenado en ROM para realizar estas tareas; y aunque el trmino no se usaba por aquel entonces, se trata de un diseo RISC que ejecuta una instruccin cada 4 ciclos del oscilador.

    Caractersticas

    Los PIC actuales vienen con una amplia gama de mejoras hardware incorporados:

    Ncleos de CPU de 8/16 bits con Arquitectura Harvard modificada

    Memoria Flash y ROM disponible desde 256 bytes a 256 kilobytes

    Puertos de E/S (tpicamente 0 a 5.5 voltios)

    Temporizadores de 8/16/32 bits

    Tecnologa Nanowatt para modos de control de energa

    Perifricos serie sncronos y asncronos: USART, AUSART, EUSART

    Conversores analgico/digital de 8-10-12 bits

  • Comparadores de tensin

    Mdulos de captura y comparacin PWM

    Controladores LCD

    Perifrico MSSP para comunicaciones IC, SPI, y IS

    Memoria EEPROM interna con duracin de hasta un milln de ciclos de lectura/escritura

    Perifricos de control de motores

    Soporte de interfaz USB

    Soporte de controlador Ethernet

    Soporte de controlador CAN

    Soporte de controlador LIN

    Soporte de controlador Irda

    Timer 1

    El Timer1 es un temporizador/contador ascendente parecido al TMR0, pero con algunas peculiaridades que lo hacen muy interesante a la hora de incluir temporizaciones en nuestros programas.

    La primera de ellas, es que se trata de un contador de 16 bits cuyo valor se almacena en dos registros de 8 bits el TMR1H y el TMR1L, ambos registros se pueden leer y escribir su valor durante la ejecucin del programa.

    Cuando el Timer1 est habilitado, el valor de esos registros se incrementan desde 0000h a FFFFh y una vez que llega a su mximo valor empieza otra vez desde 0 avisndonos de ello por medio de la bandera TMR1F.

    Si est activa la interrupcin por desbordamiento del Timer 1 al desbordarse el contador, el programa entra en la funcin de tratamiento a la interrupcin por desbordamiento del Timer1.

    Procedimiento:

    Colocamos nuestra biblioteca para poder utilizar el pic, los fuses para saber con cual oscilador utilizamos que fue de 4MHZ, el perro guardin, clock entre otros. Definimos las conexiones del pic con la pantalla, incluimos la biblioteca de la LCD con sus respectivas variables las cuales son seg=0, seg1=0, min2=0, min1=0, hora=1; luego dije que la variable cond=1; esta nos sirve para contar 2 veces 0,5ms y as se pueda cumplir 1seg que es lo que se desea, la variable configuracin=0 esta nos dice que cuando est en 0 el reloj se pone en modo configuracin y si est en 1 el reloj trabaja o da la hora normal (no se detiene), la variable posicin=1 es para controlar la posicin de 1-6 dependiendo de dnde este (h:m.m1:seg.seg1 pm), si=1 significa que disminuye donde este el cursor y si es sw=0 no hace nada. La variable horario=0; es la que controla el am y el pm, cuando es horario=0 es am y cundo es horario=1 es pm.

    El timer 1. Es el contador, donde si la configuracin es igual a ==0 que es el inicio (donde debe estar siempre) entonces cumple la funcin de sumar un 1 segundo si no vuelve a cero. Como se cumple la funcin entonces el timer1 (contador) va a cumplir el segundo exacto.

    En el void main, primero habilitamos las interrupciones habilitamos la interrupcin del timer 1, habilitamos la interrupcin global.

  • Iniciamos pantalla: configuramos el timer 1 como va a funcionar con lo siguiente setup_timer_1(T1_INTERNAL),para finalizar establecemos el valor set_timer1(3036) que significa que va empezar en el valor 3036.

    El while (true): va a preguntar si estamos presionando configuracin if(input(pin_b0)==0) entonces va tener un tiempo de 80 ms entonces el botn configuracin va agregar o sumar uno entonces su configuracin es mayor a uno despus de sumarle 1van a ser dos pero como no existe dos vuelve a cero (al inicio)para vuelva contar solo uno.[ configuracin=0].luego preguntamos si est en modo de configuracin [if(configuracion==1], al pulsarlo va a pasar a 1 entones se va a detener y pasamos a modificar con los otros tres pulsadores entonces preguntamos si se presiona el botn izquierda [if(input(pin_b1)==0)] y en la posicin 6,o si no el botn derecho if(input(pin_b2)==0) en la posicin 1; ahora si presionamos el botn de cambio [if(input(pin_b3)==0)] tambin dura 80 ms va a funcionar solo cuando se presiona que pasara a 1 .

    Para utilizar el cursor y cambiar las posiciones utilizamos el switch (posicin) en el case 1 se imprime en la pantalla printf(lcd_putc,"_ conf"); de manera que si pulsamos el botn de cambio la hora cambie de forma decreciente la cual se va a ver en la posicin (4,1).para el caso 2 imprime en pantalla printf(lcd_putc,"_ conf"); de manera que se pare en la posicin de min y decremento de uno en uno en la posicin (6,1) en el saco 3 es lo mismo que el caso dos pero en el min2 y har la misma funcin que el min y estar en la posicin (7,1) y decremento de uno en uno en el caso 4 es parecido al caso tres y dos pero en diferente posicin (9,1) y en seg1 disminuye de uno a uno igualmente en el seg. Dependiendo de cul caso sea, escoger uno de ellos y pasa a break y luego pasa a la ltima llave y vuelve al principio de switch (posicin).

    Declaramos las preguntas de control de los minutos, segundos, minutos y hora

  • Conclusin

    El reloj digital, fue una experiencia muy gratificante ya que pude aprender ms sobre la programacin del lenguaje c, pudimos aplicar una nueva condicin llamada timer 1 el cual hace que nuestra programacin se nos facilite a la hora de hacer un reloj digital, pudimos programar un reloj digital en una pantalla lcd por medio de un pic 18f4550 ,tambin agregue unos pulsadores en el cual tiene pulsadores que nos hacen pasar de una hora a otra si se desea; investigue sobre una condicin en la cual hizo que mejorara mi programacin como lo es switch Y gracias a la maqueta que constru pude darle vida a un reloj que podra ser fcilmente utilizado por nosotros como adorno en un espacio deseado .

  • Cdigo

    #include

    #device ADC=8

    #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN

    #use delay(clock=4M)

    #include

    #include

    #byte port_A=0XF80

    #byte port_B=0XF81

    #byte port_C=0XF82

    #byte port_D=0XF83

    #define LCD_ENABLE_PIN PIN_D0

    #define LCD_RS_PIN PIN_D1

    #define LCD_RW_PIN PIN_D2

    #define LCD_DATA4 PIN_D4

    #define LCD_DATA5 PIN_D5

    #define LCD_DATA6 PIN_D6

    #define LCD_DATA7 PIN_D7

    int8 seg=0,seg1=0, min2=0, min1=0,hora=1;

    int8 cond=1;

    int8 configuracion=0;

    int8 posicion=1;

    int8 sw=0;

    int8 horario=0;

    #INT_TIMER1

    void contador(void)

    {

    If (configuracion==0)

    {

    If (cond==2)

    {

  • seg+=1;

    cond=0;

    }

    set_timer1(3036);

    cond+=1;

    }

    }

    void main ()

    {

    enable_interrupts(INT_TIMER1);

    enable_interrupts(global);

    lcd_init();

    setup_timer_1(T1_INTERNAL | T1_DIV_BY_2);

    set_timer1(3036);

    while(true)

    {

    if(input(pin_a0)==0)

    {

    delay_ms(80);

    configuracion+=1;

    if(configuracion>1)

    {

    configuracion=0;

    }

    while(input(pin_a0)==0)

    {

    }

    }

    If (configuracion==1)

    {

    if(input(pin_a1)==0)

    {

    delay_ms(80);

  • posicion-=1;

    if(posicion==0)

    {

    posicion=6;

    }

    while(input(pin_a1)==0)

    {

    }

    }

    if(input(pin_a2)==0)

    {

    delay_ms(80);

    posicion+=1;

    if(posicion>6)

    {

    posicion=1;

    }

    while(input(pin_a2)==0)

    {

    }

    }

    if(input(pin_a3)==0)

    {

    delay_ms(80);

    sw=1;

    while(input(pin_a3)==0)

    {

    }

    }

    switch(posicion)

    {

    case 1:

    printf(lcd_putc,"\f");

  • lcd_gotoxy(4,1);

    printf(lcd_putc,"_ MENU");

    if(sw==1)

    {

    hora-=1;

    sw=0;

    }

    break;

    case 2:

    printf(lcd_putc,"\f");

    lcd_gotoxy(6,1);

    printf(lcd_putc,"_ MENU");

    if(sw==1)

    {

    min1-=1;

    sw=0;

    }

    break;

    case 3:

    printf(lcd_putc,"\f");

    lcd_gotoxy(7,1);

    printf(lcd_putc,"_ MENU");

    if(sw==1)

    {

    min2-=1;

    sw=0;

    }

    break;

    case 4:

    printf(lcd_putc,"\f");

    lcd_gotoxy(9,1);

    printf(lcd_putc,"_ MENU");

    if(sw==1)

  • {

    seg1-=1;

    sw=0;

    }

    break;

    case 5:

    printf(lcd_putc,"\f");

    lcd_gotoxy(10,1);

    printf(lcd_putc,"_ MENU");

    if(sw==1)

    {

    seg-=1;

    sw=0;

    }

    break;

    case 6:

    printf(lcd_putc,"\f");

    lcd_gotoxy(12,1);

    printf(lcd_putc,"_MENU");

    if(sw==1)

    {

    horario+=1;

    if(horario>1)

    {

    horario=0;

    }

    sw=0;

    }

    break;

    default:

    break;

    }

    if(seg>9)

  • {

    seg=9;

    }

    if(seg1>5)

    {

    seg1=5;

    }

    if(min2>9)

    {

    min2=9;

    }

    if(min1>5)

    {

    min1=5;

    }

    if(hora==0)

    {

    hora=12;

    }

    if(horario==0)

    {

    if(hora

  • }

    else

    {

    if(hora

  • printf(lcd_putc,"%d:%d%d:%d%d am",hora,min1,min2,seg1,seg);

    delay_ms(100);

    }

    }

    else

    {

    if(hora9)

    {

    seg=0;

    seg1+=1;

    }

    if(seg1>5)

    {

    seg1=0;

    min2+=1;

    }

    if(min2>9)

    {

    min2=0;

    min1+=1;

  • }

    if(min1>5)

    {

    min1=0;

    hora+=1;

    if(hora==12)

    {

    horario+=1;

    if(horario>1)

    {

    horario=0;

    }

    }

    }

    if(hora>12)

    {

    hora=1;

    }

    }

    }

    }