Fórum Eletrônica2002 (Brasil)
Seja bem vindo ao fórum Eletrônica2002.

Para ter acesso a todo o conteúdo do fórum você precisa estar cadastrado e fazer o login!

Se não é cadastrado no fórum: aproveite e faça.

Para criar um tópico, você precisa se cadastrar e estar conectado.
Ao criar um tópico, vc deve colocar a marca/modelo/e defeito do aparelho no título do tópico. Isto é regra neste fórum!
http://eletronica2002.forumeiros.com/forum-de-reparacao-de-aparelhos-eletronicos-f1/regras-do-forum-t19731.htm

Falar com o administrador?
Mande um e-mail: valdeni@eletronica2002.com.br
.
Menu de navegação


Clique nas imagens abaixo para acessar os fóruns desejados.

Fóruns:






---------------------------

PARCEIROS

E PATROCINADORES

DO FÓRUM 2002:

================

Clique nos banners:




================

Quer ser um patrocinador do fórum?

Mande um e-mail para:

Valdeni@eletronica2002.com.br


_________________
Últimos assuntos
» tv sony KDL32BX425 INTERMITENTE
Hoje à(s) 01:14 por HEBERTT

» TV Semp 2134(A) SL SK-11 liga e deslig
Ontem à(s) 22:29 por Evandro Barbosa

» Mini Sistem Philips FWT9200x com defeito na fonte
Ontem à(s) 15:05 por lander

» som Samsung mx-hs6500 nao liga
Ontem à(s) 13:41 por domingos macedo

» modulo soundigital sd600.1d fica ligado led clip
Ontem à(s) 12:35 por edson vogel

» Home Philips HTS 5530 desligando
Ontem à(s) 12:01 por vanderlei bortoli

» Mini System Aiwa Nsx Zm2800 - FM não funciona
Ontem à(s) 08:19 por Roger Rodrigues

» Tv Panasonic tc 29KL04 horizontal fechado
Ontem à(s) 01:00 por MARIO Y. SEGAWA

» Receiver Kenwood SR 4090 -CCE - (queima frequente etapa de saída)
Ter 22 Jan 2019, 22:58 por AARNALDORB

» Mini System LG x-boom cm9740 sem som
Ter 22 Jan 2019, 19:23 por tec.josé ferreira

» Defeito em TVPhilco TP - 2053
Ter 22 Jan 2019, 12:00 por Nill

» 4 dicas para remover ferrugem das ferramentas
Seg 21 Jan 2019, 10:44 por kir

» FONTE DE BANCADA COM UMA SAÍDA AJUSTÁVEL ENTRE 2 A 16 VCC E OUTRA SAÍDA FIXA COM 13,8Vcc
Seg 21 Jan 2019, 10:38 por kir

» tv lg 14fk3rb falta 3cm do lado esquerdo
Seg 21 Jan 2019, 09:02 por Paranista

» TV TOSHIBA PD 2058s VERTICAL FECHADO
Seg 21 Jan 2019, 02:03 por MARIO Y. SEGAWA

» Som aiwa nsx v900 não funciona saida surround
Seg 21 Jan 2019, 01:03 por Eduardo Passos

» Dvd semp Toshiba troquei a unidade óptica mas não lê
Seg 21 Jan 2019, 00:55 por Eduardo Passos

» BALANÇA URANO US15/5 POP-S (LIGA E DESLIGA )
Dom 20 Jan 2019, 10:22 por Nill

» tv semp 1452 fonte baixa
Sab 19 Jan 2019, 22:31 por antonio benedito de queir

» [Resolvido]tv semp 1452 fonte baixa
Sab 19 Jan 2019, 22:30 por antonio benedito de queir

» tv lg 21fu4rl vertical com linhas na parte de cima
Sab 19 Jan 2019, 02:43 por isaquewallker

» TV LG 21FJ8RL ARMANDO PROTEÇÃO
Sex 18 Jan 2019, 23:18 por Evandro Barbosa

» TV LG 29q54 TUBO - Problemas no SOM
Sex 18 Jan 2019, 11:22 por carlos.scala

» tv semp 2051 u18 com linhas brancas na parte superior
Sex 18 Jan 2019, 07:59 por Nill

» mini sistem mondial MS-03 duvida sobre potenciometro
Qui 17 Jan 2019, 21:26 por Eduardo Passos

» Som LG LM-U1560a com som baixo
Qui 17 Jan 2019, 18:42 por augusto muniz dos santos

» TV Semp Toshiba 1484GAV U12 - Alta tensão
Qui 17 Jan 2019, 00:16 por MARIO Y. SEGAWA

» (ENCERRADO) som samsung mx-e 850zd armando proteçao
Qua 16 Jan 2019, 11:38 por Eduardo Passos

» Placa de circuito impresso com tinta sublimatica
Qua 16 Jan 2019, 01:50 por isaquewallker

» TV LG 29" - Mod: 29FS4RLG - Defeito: Apagada. RESOLVIDO!!!
Ter 15 Jan 2019, 20:00 por MARIO Y. SEGAWA

Quem está conectado
24 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 24 Visitantes :: 2 Motores de busca

Nenhum

O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41

tímer programável de contagem regressiva pic 16f628a + lcd 16x2

Ir em baixo

tímer programável de contagem regressiva pic 16f628a + lcd 16x2

Mensagem por arminda em Dom 14 Set 2014, 17:07

Olá boa tarde a todos, estou querendo modificar um projeto que fiz a um bom tempo, mas to enrolado aqui.
trata-se de um tímer em que o usuário coloca os minutos e segundos desejados através de 4 teclas, aperta start e ele começa a contar em ordem
decrecente o tempo programado. até aqui tenho ele funcionando certinho.
pois bem agora surgio novas idéias e eu gostaria de acrecentar nele um contador que funcionasse da seguinte forma: a cada vez que o timer
chegasse ao final da contagem do tempo programado, o contador contasse 1, ai eu defino novamente outro tempo para o timer e quando chegar ao fim conte 2, e assim por diante.

caso alguem tenha ideias palpites perguntas comenta ai... Very Happy


meu codigo:

Código:


sbit LCD_RS at RB4_bit;  // pinos do LCD
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB3_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D7 at RB0_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB1_bit;

int contagem;//VARIAVEIS
short minutos,segundos;
bit start,oldstate1,oldstate2;

void interrupt()//ROTINA DE INTERRPÇÃO
{
contagem++;
TMR0 = 0;// carrrega TMR0 com o valor 0
INTCON.T0IF=0;//limpa a flag de interrupção
}

void main() //CONFIGURAÇÃO DOS REGISTROS
{
INTCON.GIE=1;  //habilita interrupcao global
INTCON.PEIE = 1; //habilita interrupção dos perifericos;
INTCON.T0IE=1; //habilita interrupcao do timer0
TMR0 = 0;//carrega TMR0 com o valor 0
OPTION_REG=0b10000001; //configura timer0( prescaler 1:4 )
CMCON = 0b11111111;//desliga comparador analogico
TRISB=0b00000000;//define todas os pinos da portb como saidas
TRISA=0b11110111;//define todas os pinos da porta como entradas exeto pino a3
PORTB.F6=0;//pino RB6 saida para rele de carga
PORTA.F3=0;//pino RA3 led timer segundos
PORTB.F7=0;//pino RB7 beep
segundos=0;//DEFINIÇÃO DE VALOR DAS VARIÁVEIS
minutos=0;
start=0;
oldstate1=0;
oldstate2=0;
Lcd_Init();
Lcd_Out( 2, 1, "LINDOMAR PISETTA" );
Lcd_Out( 1, 1, " TIMER DIGITAL " );
delay_ms(700);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out( 1, 1, "Versao 1.1 Rev B" );
Lcd_Out( 2, 1, "15/02/2014" );
delay_ms(700);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out( 2, 7, "OFF   " );

while(1)
{
if(contagem>=946) //valor mais alto atrasa relogio, mais baixo adianta
{                  //947 atrasou 10 seg, 946 adiantou 7 seg
contagem = 0;
if(start)
  {
   PORTA.F3=~PORTA.F3;//se o led timer estiver ON entao OFF e vice versa
   PORTB.F6=1;//liga rele ao inicio da contagem de tempo
   Lcd_Out(2,7," ON    " );//escreve ON no display ao iniciar contagem de tempo
   segundos--;
   if(segundos<0)
     {
      segundos=59;
      minutos--;
      if(minutos<0)
           {
           minutos=0;
           segundos=0;
           start=0;
           PORTB.F6=0;//desliga rele ao final da contagem do tempo
           PORTA.F3=1;//led segundos, 0= led OFF, 1= led ON, ao final da contagem
           Lcd_Out(2,7,"OFF   ");//escreve OFF ao final da contagem do tempo
               PORTB.F7=1;//inicia a sequencia 3 beeps
           delay_ms(1000);
               PORTB.F7=0;
           delay_ms(1000);
               PORTB.F7=1;
           delay_ms(1000);
               PORTB.F7=0;
           delay_ms(1000);
               PORTB.F7=1;
           delay_ms(1000);
               PORTB.F7=0;//fim beep
           }
       }
   }
}

{          //tecla de minutos up
if(PORTA.F1)
    {
    oldstate1=1;
    }
if(PORTA.F1 && oldstate1)
        {
        oldstate1=0;
        minutos++;
        if(minutos==90) minutos=0;
        PORTB.F7=1;
        delay_ms(100);
        PORTB.F7=0;
        }
}

{           //tecla de minutos down
if(PORTA.F0)
    {
    oldstate1=1;
    }
if(PORTA.F0 && oldstate1)
        {
        oldstate1=0;
        minutos--;
        if(minutos== ~ 0) minutos=90;
        PORTB.F7=1;
        delay_ms(100);
        PORTB.F7=0;
        }
}

{           //tecla de segundos up
if(PORTA.F7)
    {
    oldstate1=1;
    }
if(PORTA.F7 && oldstate1)
        {
        oldstate1=0;
        segundos++;
        if(segundos==59) segundos=0;
        PORTB.F7=1;
        delay_ms(100);
        PORTB.F7=0;
        }
}

{          //tecla de segundos down
if(PORTA.F6)
    {
    oldstate1=1;
    }
if(PORTA.F6 && oldstate1)
        {
        oldstate1=0;
        segundos--;
        if(segundos== ~ 0) segundos=59;
        PORTB.F7=1;
        delay_ms(100);
        PORTB.F7=0;
        }
}
if(PORTA.F2)//tecla start/pause
{
oldstate2 = 1;
}
if(!PORTA.F2 && oldstate2)
{
oldstate2 = 0;
PORTB.F6=0;//desliga rele quando em contagem de tempo é pressionado start/pause
PORTA.F3=0;//desliga led pisca segundos quando em modo pause de tempo
start = ~ start;
Lcd_Out(2,9,"PAUSE");
}

Lcd_Out( 1, 1, "TEMPO" ); //escreve tempo
Lcd_Out( 1, 7, "RELE " );  //escreve rele
Lcd_Chr( 2, 1, minutos/10 + '0' );
Lcd_Chr_CP( minutos%10 + '0' );
Lcd_Chr_CP( ':' );
Lcd_Chr_CP( segundos/10 + '0' );
Lcd_Chr_CP( segundos%10 + '0' );
}
}


arminda
arminda
NOVATO
NOVATO

DESCRIÇÃO: : Técnico em informática
TEMPO DE EXPERIÊNCIA : hoby em eletronica
Sexo : Feminino
Número de Mensagens : 1
Idade : 42
Cidade/Estado: : Rio do Oeste SC
Data de inscrição : 14/09/2014

Voltar ao Topo Ir em baixo

Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2

Mensagem por nagkiller em Seg 15 Set 2014, 23:06

Já pensou em inserir um novo inteiro somando???

[Você precisa estar registrado e conectado para ver esta imagem.]

Código:

//*****************************************************************************
// MikroC Compiler for PIC
//*****************************************************************************
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB3_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D7 at RB0_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;
// End LCD module connections

int contagem;//VARIAVEIS
int vezes;
short minutos,segundos;
bit start,oldstate1,oldstate2;

void interrupt()              //ROTINA DE INTERRPÇÃO
{
  INTCON.T0IF=0;          //limpa a flag de interrupção
  TMR0 = 0;                // carrrega TMR0 com o valor 0
  contagem++;
}

void main()                //CONFIGURAÇÃO DOS REGISTROS
{
  INTCON.GIE = 1;          //habilita interrupcao global
  INTCON.PEIE = 1;        //habilita interrupção dos perifericos;
  INTCON.T0IE = 1;        //habilita interrupcao do timer0
  TMR0 = 0;                //carrega TMR0 com o valor 0
  OPTION_REG = 0b10000001; //configura timer0( prescaler 1:4 )
  CMCON = 0b11111111;      //desliga comparador analogico
  TRISB = 0b00000000;      //define todas os pinos da portb como saidas
  TRISA = 0b11110111;      //define todas os pinos da porta como entradas exeto pino a3
  PORTB.F6 = 0;            //pino RB6 saida para rele de carga
  PORTA.F3 = 0;            //pino RA3 led timer segundos
  PORTB.F7 = 0;            //pino RB7 beep
  segundos = 0;            //DEFINIÇÃO DE VALOR DAS VARIÁVEIS
  minutos = 0;
  start = 0;
  oldstate1 = 0;
  oldstate2 = 0;
  vezes = 0;
  Lcd_Init();
  Lcd_Out( 2, 1, "LINDOMAR PISETTA" );
  Lcd_Out( 1, 1, " TIMER DIGITAL " );
  delay_ms(700);
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out( 1, 1, "Versao 1.1 Rev C" );
  Lcd_Out( 2, 1, "15/09/2014" );
  delay_ms(700);
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
  Lcd_Out( 2, 7, "OFF   " );

  while(1)
  {
    if(contagem >= 946)    //valor mais alto atrasa relogio, mais baixo adianta
    {                      //947 atrasou 10 seg, 946 adiantou 7 seg
      contagem = 0;
      if(start)
      {
        PORTA.F3=~PORTA.F3;//se o led timer estiver ON entao OFF e vice versa
        PORTB.F6 = 1;//liga rele ao inicio da contagem de tempo
        Lcd_Out(2,7," ON    " );//escreve ON no display ao iniciar contagem de tempo
        segundos--;
        if(segundos < 0)
        {
          segundos = 59;
          minutos--;
          if(minutos < 0)
          {
            minutos = 0;
            segundos = 0;
            start = 0;
            PORTB.F6 = 0;//desliga rele ao final da contagem do tempo
            PORTA.F3 = 1;//led segundos, 0= led OFF, 1= led ON, ao final da contagem
            Lcd_Out(2,7,"OFF   ");//escreve OFF ao final da contagem do tempo
            PORTB.F7 = 1;//inicia a sequencia 3 beeps
            delay_ms(1000);
            PORTB.F7 = 0;
            delay_ms(1000);
            PORTB.F7 = 1;
            delay_ms(1000);
            PORTB.F7 = 0;
            delay_ms(1000);
            PORTB.F7 = 1;
            delay_ms(1000);
            PORTB.F7 = 0;//fim beep
            vezes++;
          }
        }
      }
    }
    //tecla de minutos up
    if(PORTA.F1)
    {
    oldstate1=1;
    }
    if(PORTA.F1 && oldstate1)
    {
      oldstate1=0;
      minutos++;
      if(minutos==90) minutos=0;
      PORTB.F7=1;
      delay_ms(100);
      PORTB.F7=0;
    }
    //tecla de minutos down
    if(PORTA.F0)
    {
      oldstate1=1;
    }
    if(PORTA.F0 && oldstate1)
    {
      oldstate1=0;
      minutos--;
      if(minutos== ~ 0) minutos=90;
      PORTB.F7=1;
      delay_ms(100);
      PORTB.F7=0;
    }
    //tecla de segundos up
    if(PORTA.F7)
    {
      oldstate1=1;
    }
    if(PORTA.F7 && oldstate1)
    {
      oldstate1=0;
      segundos++;
      if(segundos==59) segundos=0;
      PORTB.F7=1;
      delay_ms(100);
      PORTB.F7=0;
    }
    //tecla de segundos down
    if(PORTA.F6)
    {
      oldstate1=1;
    }
    if(PORTA.F6 && oldstate1)
    {
      oldstate1=0;
      segundos--;
      if(segundos== ~ 0) segundos=59;
      PORTB.F7=1;
      delay_ms(100);
      PORTB.F7=0;
    }
    if(PORTA.F2)        //tecla start/pause
    {
      oldstate2 = 1;
    }
    if(!PORTA.F2 && oldstate2)
    {
      oldstate2 = 0;
      PORTB.F6=0;//desliga rele quando em contagem de tempo é pressionado start/pause
      PORTA.F3=0;//desliga led pisca segundos quando em modo pause de tempo
      start = ~ start;
      Lcd_Out(2,9,"PAUSE");
    }

    Lcd_Out( 1, 1, "TEMPO" );  //escreve tempo
    Lcd_Out( 1, 7, "RELE " );  //escreve rele
    Lcd_Chr( 2, 1, minutos/10 + '0' );
    Lcd_Chr_CP( minutos%10 + '0' );
    Lcd_Chr_CP( ':' );
    Lcd_Chr_CP( segundos/10 + '0' );
    Lcd_Chr_CP( segundos%10 + '0' );
    Lcd_Out( 1, 14, "VEZES" );
    Lcd_Chr( 2, 14, vezes/10 + '0' );
    Lcd_Chr_CP( vezes%10 + '0' );
  }
}


Última edição por nagkiller em Qui 24 Dez 2015, 13:13, editado 4 vez(es)

_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
nagkiller
nagkiller
Moderador do fórum
Moderador do fórum

DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo : Masculino
Número de Mensagens : 1818
Idade : 38
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011

Voltar ao Topo Ir em baixo

Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2

Mensagem por yuri gagarin nicolsky em Ter 22 Dez 2015, 09:30

OLA AMIGO,EU SOU RECÉM CHEGADO AO FÓRUM E ESTAVA A PROCURA DE UM COD FONTE ,TIMER REGRESSIVO COM LCD.GOSTEI D + DO SEU PROJETO TERIA COMO ME ENVIAR O ESQUEMA ? POIS SOU NOVATO NA ELETRÔNICA E ESTUDO SOZINHO. ANTECIPADAMENTE OBRIGADO.
yuri gagarin nicolsky
yuri gagarin nicolsky
NOVATO
NOVATO

DESCRIÇÃO: : Consumidor final (cliente)
TEMPO DE EXPERIÊNCIA : I ANO
Sexo : Masculino
Número de Mensagens : 2
Idade : 49
Cidade/Estado: : BELO HORIZONTE
Data de inscrição : 21/12/2015

Voltar ao Topo Ir em baixo

Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2

Mensagem por nagkiller em Qui 24 Dez 2015, 13:06

Segue anexo circuito básico.

Com os comentários do próprio código, sabe-se o que serão ligados como saída ou entrada.

[Você precisa estar registrado e conectado para ver esta imagem.]

Se atente ao circuito de BUZZER (pode ou não funcionar!!!):
Caso não funcione, remova o transistor Q2, e resistor R27, um dos pinos do buzzer, conecte ao pino do resistor R27 que vai para o pino 13 do microcontrolador, e o outro pino do buzzer, no pino que era o emissor do transistor Q2. Ficando assim:

[Você precisa estar registrado e conectado para ver esta imagem.]

Flw...

_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
nagkiller
nagkiller
Moderador do fórum
Moderador do fórum

DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo : Masculino
Número de Mensagens : 1818
Idade : 38
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011

Voltar ao Topo Ir em baixo

Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2

Mensagem por yuri gagarin nicolsky em Sex 01 Jan 2016, 18:24

OLÁ NAGKILLER, UM BOM ANO NOVO.OBRIGADO POR TER ME MANDADO OS CIRCUITOS,GOSTARIA QUE VERIFICASSE PARA MIM PORQUE QUANDO VOU COPILAR ME É APRESENTADO ERRO NA LINHA 23.OBRIGADO .
yuri gagarin nicolsky
yuri gagarin nicolsky
NOVATO
NOVATO

DESCRIÇÃO: : Consumidor final (cliente)
TEMPO DE EXPERIÊNCIA : I ANO
Sexo : Masculino
Número de Mensagens : 2
Idade : 49
Cidade/Estado: : BELO HORIZONTE
Data de inscrição : 21/12/2015

Voltar ao Topo Ir em baixo

Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2

Mensagem por nagkiller em Sex 01 Jan 2016, 18:47

Remova os espaços em branco e as tabulações... Isso deve resolver...

Mais três detalhes:

1 - Não sou o responsável pelo projeto.
2 - O compilador utilizado é o MikroC for PIC ( [Você precisa estar registrado e conectado para ver este link.] )!!! Se tentar em outros compiladores, haverá erros de compilação.
3 - Atenção com os fusíveis de programação.
Use as combinações Ctrl + Shift + E ou vá em Project / Edit Project para configurar os fuses.

Escolha as opções a seguir:
[Você precisa estar registrado e conectado para ver esta imagem.]

[Você precisa estar registrado e conectado para ver esta imagem.]

Flw...

_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
nagkiller
nagkiller
Moderador do fórum
Moderador do fórum

DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo : Masculino
Número de Mensagens : 1818
Idade : 38
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011

Voltar ao Topo Ir em baixo

Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum