Últimos assuntos
Quem está conectado?
Há 396 usuários online :: 0 registrados, 0 invisíveis e 396 visitantes :: 1 motor de buscaNenhum
O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41
Tópicos semelhantes
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 : 47
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 : 2853
Idade : 43
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 : 54
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 : 2853
Idade : 43
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 : 54
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 : 2853
Idade : 43
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011
Tópicos semelhantes
» contagem regressiva para o fim do ano !!
» Programa em c para pic 16f628a
» Contagem Regressiva vem chegando 2011 Feliz Ano Novo!!!
» Programa em c para pic 16f628a
» Contagem Regressiva vem chegando 2011 Feliz Ano Novo!!!
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
Ontem à(s) 23:58 por Rafael2
» Caixa de som multilaser sp359 não liga
Ontem à(s) 20:51 por antonio benedito de queir
» SOM AIWA Z-R997 TRAVADO - SÓ ACENDE PAINEL DE BOTÕES!
Ontem à(s) 14:12 por Paranista
» a decadência da minha eletronica
Ontem à(s) 13:09 por adriano cesar
» Tv semp TCL 32lL800 sem imagem Resolvido
Qua 08 maio 2024, 17:45 por nagkiller
» Esquema do cce md3280
Seg 06 maio 2024, 22:17 por Rafael2
» Microonda ELECTROLUX MEF33 sem funcionar porcoes liga e cancela Resolvido
Seg 06 maio 2024, 13:27 por everardes
» Minisystem cce md3280 não, N tem standby
Seg 06 maio 2024, 12:50 por francisco constantino
» Esquema do cce md3280
Seg 06 maio 2024, 12:01 por francisco constantino
» Minisystem cce md3280 não, N tem standby
Seg 06 maio 2024, 08:55 por francisco constantino
» Módulo taramps TA-3500D liga normal, porém sem áudio
Dom 05 maio 2024, 14:44 por Nill
» Duvida slot microSD
Dom 05 maio 2024, 07:52 por gamemaniaco
» Alguém teria o arquivo raiz do receptor Neonsat Tro HD e do receptor satmax 5?
Sáb 04 maio 2024, 07:28 por Claude
» CIRCUITO INTEGRADO USADO NO GRDIENTE PRO1200
Sex 03 maio 2024, 22:33 por Rafael2
» atualizaçao tv philips 42pfl3008d/78
Qui 02 maio 2024, 19:06 por tokiotecnica
» Tv philips 50pug6654, liga tem som,mas não tem imagem
Qui 02 maio 2024, 13:24 por Renaldo Domingos
» [Resolvido]DVD H Buster HBD-9540AV não liga
Qui 02 maio 2024, 08:52 por Rosélio
» Abrir minha eletrônica ou não, rsrs?!!
Qua 01 maio 2024, 12:14 por Rafael2
» Micro System LG Xboom cm9740 não sai som nas caixas de som
Ter 30 Abr 2024, 15:52 por sugeda
» CIs damplaca Tcon
Ter 30 Abr 2024, 12:01 por nagkiller
» Microondas Brastemp MOD- BHS 27A BHNA, visor indicando ERR 3
Seg 29 Abr 2024, 19:22 por tokiotecnica
» cliente que não busca os aparelhos consertados, o que fazer
Dom 28 Abr 2024, 13:49 por MARIO Y. SEGAWA
» Aqui no fórum vemos de tudo
Dom 28 Abr 2024, 13:22 por MARIO Y. SEGAWA
» MICROONDAS SAMSUNG MB6752W NÃO RESPONDE COMANDOS DO TECLADO
Sáb 27 Abr 2024, 16:46 por WALTER JANSEN
» Prolongar a vida util das lampadas led.
Sáb 27 Abr 2024, 09:51 por Paranista
» Caixa JBL Max 15 (preciso do valor do R30)
Sáb 27 Abr 2024, 09:28 por Elismark
» CAIXA AMPLIFICADA FRAHM MP5000 APP NÃO LIGA SEM TENSAO NA FONTE SECUNDARIA
Sex 26 Abr 2024, 22:01 por Oliveira Rabelo
» Tv multilaser tl032m modo de servico
Sex 26 Abr 2024, 15:06 por Gustavo machado costa
» Explosound XM 3600 preciso do esquema
Sex 26 Abr 2024, 12:27 por sobraltec
» Amplificador Potencia Times One Advance Rf 802 4000w
Sex 26 Abr 2024, 10:42 por fernando0