Últimos assuntos
Quem está conectado?
Há 414 usuários online :: 0 registrados, 0 invisíveis e 414 visitantes :: 1 motor de buscaNenhum
O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41
Anuncios
Nenhum anúncio
tímer programável de contagem regressiva pic 16f628a + lcd 16x2
3 participantes
Página 1 de 1
tímer programável de contagem regressiva pic 16f628a + lcd 16x2
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...
meu codigo:
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...
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- NOVATO
- DESCRIÇÃO: : Técnico em informática
TEMPO DE EXPERIÊNCIA : hoby em eletronica
Sexo :
Número de Mensagens : 1
Idade : 48
Cidade/Estado: : Rio do Oeste SC
Data de inscrição : 14/09/2014
Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2
Já pensou em inserir um novo inteiro somando???
- 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- Moderador do fórum
- DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo :
Número de Mensagens : 2997
Idade : 44
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011
Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2
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- NOVATO
- DESCRIÇÃO: : Consumidor final (cliente)
TEMPO DE EXPERIÊNCIA : I ANO
Sexo :
Número de Mensagens : 2
Idade : 55
Cidade/Estado: : BELO HORIZONTE
Data de inscrição : 21/12/2015
Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2
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.
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:
Flw...
Com os comentários do próprio código, sabe-se o que serão ligados como saída ou entrada.
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:
Flw...
_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
nagkiller- Moderador do fórum
- DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo :
Número de Mensagens : 2997
Idade : 44
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011
Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2
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- NOVATO
- DESCRIÇÃO: : Consumidor final (cliente)
TEMPO DE EXPERIÊNCIA : I ANO
Sexo :
Número de Mensagens : 2
Idade : 55
Cidade/Estado: : BELO HORIZONTE
Data de inscrição : 21/12/2015
Re: tímer programável de contagem regressiva pic 16f628a + lcd 16x2
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 ( http://www.mikroe.com/mikroc/pic/ )!!! 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:
Flw...
Mais três detalhes:
1 - Não sou o responsável pelo projeto.
2 - O compilador utilizado é o MikroC for PIC ( http://www.mikroe.com/mikroc/pic/ )!!! 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:
Flw...
_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
nagkiller- Moderador do fórum
- DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo :
Número de Mensagens : 2997
Idade : 44
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
Ontem à(s) 17:46 por antonio benedito de queir
» Akai AA-A35 Display apagado
Ontem à(s) 17:32 por city2010
» TV STI DL3270 A W , sem audio
Ontem à(s) 14:00 por valdircp
» Caixa de Som Amplificada CSR 4000A Som Distorcido e Pouca Potência!!!
Sáb 23 Nov 2024, 18:05 por prva
» OU O FÓRUM ACABOU OU NINGUÉM PARTICIPA DO FÓRUM MAIS.
Sáb 23 Nov 2024, 09:09 por Paranista
» Tv lcd,marca Aoc, modelo- LE 39D0330 -defeito,só liga depois de um tempo(quando aquece)
Sáb 23 Nov 2024, 08:28 por jailton da silva santos
» Notbook asus mod. X44C K43L versão 1 preciso do esquema
Sáb 23 Nov 2024, 02:30 por willian8952
» ameaçado por nao consertar aparelho por falta de peças
Sex 22 Nov 2024, 22:19 por joaquimrosadesouza
» Componentes estourados Fonte Usina Spark 120A
Sex 22 Nov 2024, 21:13 por antonio carlos bitti
» fonte usina 60 amperes cai tensao qdo conecta bateria
Sex 22 Nov 2024, 21:04 por antonio carlos bitti
» Tv Philips 50pug6654/78 sem imagem
Sex 22 Nov 2024, 16:02 por SEBCICM
» PS2 Slim 90k testar entradas do memory card
Sex 22 Nov 2024, 11:51 por gamemaniaco
» Procuro a placa lateral do sistema de som Sony MHC-GTX88 e Ci BD3451KS
Sex 22 Nov 2024, 10:16 por Silas Silva Nogueira
» fonte taramps tef 60 amperes ci estourado
Qui 21 Nov 2024, 19:27 por antonio carlos bitti
» [Resolvido] TV PLASMA SAMSUNG PL51F4900AG Não liga , led stand by piscando ( RESOLVIDO )
Qui 21 Nov 2024, 13:28 por Paranista
» TV LG MODELO 42LB5600 ACENDE O LED MAS NÃO LIGA
Qua 20 Nov 2024, 18:27 por Tales g
» Compro placa principal da LG 42lh45ed ou 42lh40ed
Seg 18 Nov 2024, 11:22 por Paulo Costa II
» Som Philips fw c 505 Ajuda entender o esquema
Sáb 16 Nov 2024, 10:03 por nagkiller
» (Resolvido) AIWA NSXF959 SEM SOM MÉDIOS AGUDOS
Sáb 16 Nov 2024, 00:31 por ZACREAL
» como descartar TRC
Sex 15 Nov 2024, 08:32 por jailton da silva santos
» cliente que não busca os aparelhos consertados, o que fazer
Sex 15 Nov 2024, 00:59 por MARIO Y. SEGAWA
» compro placa pricipal tv lg 50pb560
Qua 13 Nov 2024, 11:11 por Eletronica Manoel
» Modulo Taramps t800.1 com os resistores r32 e r5 torrados
Seg 11 Nov 2024, 10:41 por prisma eletronica
» Akai AA-A35 Seletor de Tensão
Seg 11 Nov 2024, 08:34 por city2010
» [RESOLVIDO] TV LCD UN50FH5303G Componentes danificados
Seg 11 Nov 2024, 00:54 por nagkiller
» TV PANASONIC TC- 32A400B Imagem travando
Dom 10 Nov 2024, 16:01 por ramon figueiredo
» ATENÇÃO de todos os usuários da 2002! (Nova regra).
Dom 10 Nov 2024, 12:00 por robsonseixas
» Microondas MEF-41 Eletrolux, não acende luz da porta quando abre, e quando fecha não liga
Sex 08 Nov 2024, 22:30 por joaquimrosadesouza
» Caixa som Ciclotron mult 500 Preciso do esquema
Sex 08 Nov 2024, 21:34 por prisma eletronica
» Pessoal tenho placa barato.
Sex 08 Nov 2024, 20:47 por francisco carlos de jesus