Ir ao conteúdo
  • Cadastre-se

Projetinho "Alarme de Tensão Baixa"


Posts recomendados

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
Link para o comentário
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

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!