Ir ao conteúdo
  • Cadastre-se
Formigoni

Projetinho "Alarme de Tensão Baixa"

Recommended Posts

Ola Pessoal...

 

Estou tentando fazer um projetinho bem simples pois estou iniciando em programação em C para PIC... Eu uso o Micro C para escrever o código e o Proteus para simular..

O projeto consiste em acender um LED toda vez que a tensão recebida em uma Porta ADC do PIC for abaixo de um valor determinado...

Estou usando um range de 0,00 a 6,00 Volts.

 

Então seria toda vez que a tensão recebida pelo PIC for abaixo de 2.10 Volts ele acende o led por um determinado tempo definido, e todas as vezes que a tensão voltar a cair o led acende novamente por um determinado tempo... Ele não pode ficar acesso direto mesmo com a tensão baixa... Ele só acende quando a tensão abaixar e logo apaga... 

 

Escrevi o código dessa forma... Mas não estou conseguindo fazer o led temporizar, só consigo fazer ele ficar acesso direto com tensão baixa ou apagado com tensão normal... Ou então o led ficar piscando com a tensão baixa, mas não é isso que quero... 

 

Se alguem puder me falar aonde estou errando eu agradeço muito...

 

 
Código....
 
#int_RTCC
 
void  RTCC_isr(void) 
{
  float v;
 
  Printf("\n \r TESTE!!");
  set_adc_channel(1);
  v=read_adc();
  Delay_ms(1000);
  v=v*0.00586510263929618768328445747801;
  Delay_us(10);
  Printf("%f \n \r ",v);
  
}
 
 
   #include  "lcd.c"
 
   #define LCD_DATA_PORT getenv("SFR:PORTB")
     
   #define LCD_ENABLE_PIN   PIN_b0
   #define LCD_RS_PIN       PIN_b1
   #define LCD_RW_PIN       PIN_b2
   #define LCD_DATA0        PIN_b4
   #define LCD_DATA1        PIN_b5
   #define LCD_DATA2        PIN_b6
   #define LCD_DATA3        PIN_b7
 
float v;
int32 c;
 
    
void Alarme(){
   
   output_High(pin_c1);
   delay_ms(2000);
   output_low(pin_c1);
 
}
 
void main()
{
 
   setup_adc_ports(AN0_TO_AN1|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
   
   lcd_init();
  
  
  While (true){
  
  set_adc_channel(1);
  v=read_adc();
  Delay_ms(1000);
  v=v*0.00586510263929618768328445747801;
  Delay_us(10);
  
   
  
  If (v<2.10){
  
   Alarme();
  }
  else {
  
  output_low(pin_c1);
   
  }  
  
 
 
 
 
Obrigado,
 
Abraços
Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fico até envergonhado...

Porque PIC se em AVR em 5 linhas dá pra fazer este programa?

É pra escola?

 

Ola Xykote...

 

 

Então,  é para um projetinho caseiro mesmo... 

Aprendendo a programar... rsrs....

 

 

 

E depois que postei esse tópico dei mais umas fuçadas e acabei conseguindo o que queria... Pelo menos no simulador né.. rsrs..

 

Mesmo assim agradeço a ajuda 

 

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×