Ir ao conteúdo

Ajuda com programa


heliosouza

Posts recomendados

Postado

Olá à todos.

Sou iniciante na programação em pics e estou aprendendo a usar o compilador ccs .

Já busquei em apostilase etc,mas não encontro uma forma de fazer com que acionando uma entrada do pic (16f628), ela aguarde o tempo de eu acionar outra entrada para fazer acionar uma saida (led).

Ou seja, preciso apertar dois botões (um depois outro) para acender um led.

Agradeço a colaboração de quem puder ajudar.

Postado

Circuito:

16F628A_buttons.png

OBS: Photobucket tá bugado.. Não mostra a imagem inserida no post. Só clicar acima. CORRIGIDO!

Código:

#include <16F628A.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc > 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP
#FUSES NOCPD //No EE protection

#use delay(clock = 4000000)

#define botao_1 PIN_B0
#define botao_2 PIN_B1

#define LED PIN_B7

void main()
{
while (TRUE)
{
if (input(botao_1))
{
if (input(botao_2))
{
output_high (LED);
}
else
{
output_low (LED);
}
}
else
{
output_low (LED);
}
}
}

Falou

Postado

Olá, Matheus.

Agradeço sua ajuda, mas não era o que precisava...

O que eu procuro é um circuito tipo senha de dois digitos, onde voce aperta um botão, solta ele, e aperta outro botão para ligar o led.

Mais alguma ideia?

Postado

Agora você explicou direito.

Como é esse seu botão? É um teclado numérico?

Falou

Agora você explicou direito.

Como é esse seu botão? É um teclado numérico?

Falou

Postado

Não é teclado numérico. O circuito que voce enviou no isis serve certinho para meu uso.

Só preciso apertar um dos botões , soltar ele, e quando apertar o outro botão , o led acender.

Ou seja, preciso apertar dois botões em sequencia para ativar o led.

Postado
Não é teclado numérico. O circuito que voce enviou no isis serve certinho para meu uso.

Só preciso apertar um dos botões , soltar ele, e quando apertar o outro botão , o led acender.

Ou seja, preciso apertar dois botões em sequencia para ativar o led.

Não entendo muito do CCS, mas vamos ver assim...

Declare duas variaveis short int. Então você testa um botão e se ele for igual a um, faz a primeira variavel = 1, depois faça o mesmo com o segundo botão e a segunda variavel. Em seguida faça um teste com as duas variaveis para acender o led...

#include <16F628A.h>

#FUSES NOWDT //No Watch Dog Timer

#FUSES XT //Crystal osc > 4mhz

#FUSES PUT //Power Up Timer

#FUSES NOPROTECT //Code not protected from reading

#FUSES BROWNOUT //Reset when brownout detected

#FUSES NOLVP

#FUSES NOCPD //No EE protection

#use delay(clock = 4000000)

#define botao_1 PIN_B0

#define botao_2 PIN_B1

#define LED PIN_B7

short int a = 0,b = 0;

void main()

{

while (TRUE)

{

if (input(botao_1)){

a=1;

}

if (input(botao_2)){

b=1;

}

if( a & b )

{

output_high(LED);

}

else

{

output_low (LED);

}

}

}

Compilei aqui sem erro, aproveitando o codigo que esta acima... não testei em hardware... mas talvez possa te ajudar um pouco...

Postado

Obrigado Mateus! Mas quanto a linha incorreta, ai não seria uma operação bit a bit, ja que a variavel foi declarada como short int ??

E quanto ao restante do programa, pode por favor, corrigir se houver mais alguma falha, o importante é ajudar ao amigo do post, e com isso eu aprendo tambem...

Ao amigo do post, cabe testar e voltar com resultados pra gente saber se ajudamos né...

Postado

Matheus e Cis. Agradeço a atenção.

Quanto ao programa que o Cis passou, testei ele no Isis e funcionou bem, independente de ser if( a & b ) ou if( a && b ).

Como já disse, estou aprendendo e aí vai uma "dica" : Em uma função IF, se houver só uma condição, não é preciso o uso de chaves entre ela. Veja como compilei o seu programa:

************************

While(true)

{

if (input(botao_1))

a=1;

if (input(botao_2))

b=1;

if( a & b )

output_high(LED);

else

output_low (LED);

}

************************

Agora, com este programa, tanto faz apertar o botão 1 ou 2 (não importa a ordem) que o led acende.

Eu preciso de colocar em ordem, por exemplo : botão 2 → botão 1 → led.

Mas já é um começo...

Outra dúvida: Se eu aterrar o pino 4 do pic (MCLR), ele deixaria o circuito em "Stand-By" ou é melhor desligar a alimentação do circuito?

Postado

Beleza quanto a dica, mas é um costume meu sempre ao usar um comando abrir e fechar chaves. Para por em ordem os botões tenta assim

**************************************

While(true)

{

if (input(botao_1))

a=1;

if (input(botao_2)&& a=1)

b=1;

if( a && b )

output_high(LED);

else

output_low (LED);

}

Neste caso, a variavel b só sera incrementada sem o botão 2 = 1, e a variavel a ja tiver sido incrementada, sendo que para a variavel a ter sido incrementada, o primeiro botão teve que ser apertado... tenta ai, mas cuidado com os operadores & e &&, ainda não estou muito certo quanto ao uso deles...

Corrigindo um erro meu, não tem nada de incrementos... são atribuições,

mas acho que você entendeu...rsrsrsrs

Postado

Obrigado, CIS.

Corrigi somente a linha " if (input(botao_2)&& a==1) " e funcionou conforme o esperado.

Quanto a questão do pino MCLR, voce saberia me dizer se posso deixar ele aterrado para parar o funcionamento do pic (de vez em quando, por algum tempo) ou é melhor desliga-lo mesmo?

Postado

é, a linha ficou errada mesmo, ainda bem que você é atencioso... Sobre o MCLR, não sei te responder, ate acho interessante questão e quero ver as respostas dos mais experientes...

Desculpe os erros no codigo, é que estou no trabalho e to com a atenção divida, mas se ajudei, fico contente...

  • Coordenador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!