Ir ao conteúdo
  • Cadastre-se

estou precisando programar um relógio com alarme usando o pic 18f4520


Posts recomendados

preciso programar um relogio em tempo real com alarme so que nao sei como devo encaixar a programaçao do alarme alguém ai pode me ajudar?

LEMBRANDO QUE o ALARME DEVE SER ACIONADO QUANDO PULSAR B3.ESTOU ULTILIZANDO também O DISPLAY DE LCD 16X2
segue abaixo meu codigo:

#include <p18f4520.h>     //bibiblioteca do PIC18f4550
       
#include <stdio.h>        //bibilioteca  de entradas e saídas
#include <delays.h>          //Adiciona a bibilioteca de funcões do delay 
#include <adc.h>          //Adiciona a bibilioteca de funções para o conversor A/D
#include <timers.h>       //Adiciona a bibilioteca de funções do timer 
#include "lcd_lib.h"        // lib.lcd

#pragma config OSC = HS      //Oscilador e cristal 20Mhz
#pragma config PWRT = ON     //Power Up Time Enable 
#pragma config BORV = 1         //tensão do BOR é 4,33v
#pragma config WDT = OFF     //Desabilita o Watchdog Timer
#pragma config PBADEN = OFF  //RB0:RB4 I/O Digital
#pragma config LVP = OFF     //ICSP. Low power programming Digital
#pragma config LPT1OSC = ON  //programado pra operar no modo Low-power

#define B1 PORTBbits.RB0
#define B2 PORTCbits.RC0
#define B3 PORTAbits.RA4

char lcd[17];
unsigned  char conta_100ms =0 , segundo ,minuto ,hora ;
void ISR_alta_prioridade(void); //Protótipo da função de interrupção
#pragma code int_alta=0x08      //Vetor de interrupção de alta prioridade 
void int_alta(void)
{
    _asm goto ISR_alta_prioridade _endasm  //Desvia o programa para a função ISR_alta_prioridade

#pragma code 
#pragma interrupt ISR_alta_prioridade
void ISR_alta_prioridade(void)
{
    WriteTimer1(40535);
    if(PIR1bits.TMR1IF){
      conta_100ms++;
      PIR1bits.TMR1IF = 0;
    }
    if(conta_100ms == 10){
      segundo++;
      conta_100ms = 0;
    }          
          
    
    if(segundo==60)
    {
        minuto++;
        segundo = 0;
     if(minuto==60)
    {
        hora++;
        minuto =0;
    if(hora==24)
        hora=0;
    }
    }
}
void main (void)
{
    TRISA = 0x00;
    TRISB = 0x01;
    TRISC = 0x00;
    TRISD = 0x00;
    TRISE = 0x00;
    ADCON1 = 0x0F;
    OpenTimer1(TIMER_INT_OFF
                 &T1_8BIT_RW
                 &T1_SOURCE_INT
                 &T1_OSC1EN_ON
                 &T1_SYNC_EXT_OFF
                 &T1_PS_1_1);
     PORTD = 0x00;
     PORTE = 0x00;
     Delay10KTCYx(100);
     
     PIR1bits.TMR1IF = 0;
     IPR1bits.TMR1IP = 1;
     PIE1bits.TMR1IE = 1;
     InitLCD();
  while(1){
    ComandoLCD (0x81);                 //posiciona o cursor linha 1 coluna
    sprintf(lcd,"REAL TIME CLOCK");      //Envia a msg para o vetor
    putsLCD(lcd);                 // posiciona o cursor linha 2 coluna 4
    ComandoLCD(0xC3);
    sprintf(lcd,"%02d:%02d:%02d",hora,minuto,segundo);    //Envia a mensagem para o vetor
    putsLCD(lcd);
    RCONbits.IPEN = 1;
    INTCONbits.GIEH = 1;
    INTCONbits.GIEL = 1;
    TMR1H = 0x80;
    TMR1L = 0x00; 
        }
        Delay10KTCYx(100);
}
 

Link para o comentário
Compartilhar em outros sites

Amigo, qual RTC você vai usar? Pra te ser sincero, os que existem no mercado são umas belas porcarias em se tratando de precisão, eu te aconselharia usar o DS3231, é o mais preciso que já vi, sem contar os recursos de correção que ele possui.

 

Caso você não vá usar um RTC e o relógio for implementado via programação, já te adianto que uma precisão razoável será difícil de ser conseguida, a não ser que você use uma frequência externa para servir de base ou então programe tudo em Assembler. Ainda assim insisto no RTC.

 

Outra coisa, o seu alarme, vai despertar por dias da semana ou será somente por horário mesmo?

Link para o comentário
Compartilhar em outros sites

10 horas atrás, ViniciusKruz disse:

Amigo, qual RTC você vai usar? Pra te ser sincero, os que existem no mercado são umas belas porcarias em se tratando de precisão, eu te aconselharia usar o DS3231, é o mais preciso que já vi, sem contar os recursos de correção que ele possui.

 

Caso você não vá usar um RTC e o relógio for implementado via programação, já te adianto que uma precisão razoável será difícil de ser conseguida, a não ser que você use uma frequência externa para servir de base ou então programe tudo em Assembler. Ainda assim insisto no RTC.

 

Outra coisa, o seu alarme, vai despertar por dias da semana ou será somente por horário mesmo?

 

adicionado 1 minuto depois

O alarme despertará  por hora mesmo e vou ter fazer via programação  em c

 

 

Link para o comentário
Compartilhar em outros sites

@Victor 222222 Ok, entendi. Seu código que foi postado já é um relógio por programação, você precisa agora implementar o alarme né. Como esse relógio seu não tem menu de programação nem das horas, você vai precisar implementar isto, caso contrário não vai ter como acertar o alarme nem as horas. Vai querer fazer esta parte também?

 

Se não for implementar os menus, é só criar as variáveis do alarme:

 

int minutoAlarme;

int horaAlarme;

 

Depois compara dentro do main():

 

while(1){
  minutoAlarme=0;
  horaAlarme=12;//alarme programado para as 12:00
  if((minuto>=minutoAlarme) && (minuto<= minutoAlarme+1) && (hora==horaAlarme)){//aqui só vai entrar e permanecer em disparo por 1 minuto
  	//dispara o alarme por um minuto
  }
}

 

Para disparar o alarme pressionando uma tecla, seria também dentro do while(1):

while(1){
  minutoAlarme=0;
  horaAlarme=12;//alarme programado para as 12:00	
  if((minuto>=minutoAlarme) && (minuto<= minutoAlarme+1) && (hora==horaAlarme)){//aqui só vai entrar e permanecer em disparo por 1 minuto
  	//dispara o alarme por um minuto
  }
  
  if(botão pressionado){
    //dispara o alarme
  }
    
}

Basicamente acho que a lógica seria esta, mas como eu disse, se você for implementar as telas de menu, aí já serão outros quinhentos.

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!