Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
pirulito.junior

Dúvida pic 16f648a

Recommended Posts

ola amigos do clube, sou novo aqui e estou com uma duvida a respeito do pic 16f 648a, sou leigo a respito de programaçao de microcontroladores o pouco que sei aprendi "fuçando", gostaria de saber se é possivel com o pic16f648a eu programalo para que toda ves que receber um pulso negativo ele enviar 2?

precizo para o seguinte, tenho uma moto e o contagiro marca exatamente a metade pois o painel foi adaptado então precizo dobrar os pulsos.

o circuito eu montei porém nao consigo programa-lo nao consigo escrever o programa correto. estou usando o mikrobasic.

aguardo resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce pode postar aquilo que já tem feito? como o circuito e o programa.

Eu não domino o basic, mas creio ser algo simples em qualquer linguagem.

Por exemplo em C

if(entrada==0){
saida=1;
delay
saida=0;
saida=1;
delay
saida=0;
}

e em ASM

[codeE]btfsc entrada

goto $-1

bsf saida

call delay1

bcf saida

call delay2

bsf saida

call delay1

bcf saida[/codeE]

Qual é o tempo entre os pulsos, e o tempo de duração do pulso?

Editado por LEOPUENA

Compartilhar este post


Link para o post
Compartilhar em outros sites
voce pode postar aquilo que já tem feito? como o circuito e o programa.

Eu não domino o basic, mas creio ser algo simples em qualquer linguagem.

Por exemplo em C

if(entrada==0){
saida=1;
delay
saida=0;
saida=1;
delay
saida=0;
}

e em ASM

[codeE]btfsc entrada

goto $-1

bsf saida

call delay1

bcf saida

call delay2

bsf saida

call delay1

bcf saida[/codeE]

Qual é o tempo entre os pulsos, e o tempo de duração do pulso?

o tempo nao é exato pois conforme eu acelero a moto diminui o intervalo entende? teria que ser um esquema que toda ves ki a moto mandar um pulso o pic mande 2 e conforme vou acelerando o pic também tera ki tera ki diminuir o intervalo de tempo entende? grato pela atençao..

Compartilhar este post


Link para o post
Compartilhar em outros sites
voce pode postar aquilo que já tem feito? como o circuito e o programa.

Eu não domino o basic, mas creio ser algo simples em qualquer linguagem.

Por exemplo em C

if(entrada==0){
saida=1;
delay
saida=0;
saida=1;
delay
saida=0;
}

e em ASM

[codeE]btfsc entrada

goto $-1

bsf saida

call delay1

bcf saida

call delay2

bsf saida

call delay1

bcf saida[/codeE]

Qual é o tempo entre os pulsos, e o tempo de duração do pulso?

assim acho que da certo só quero acrescentar que acho necessario um delay na segunda passagem de 0 para 1

ficando assim

if(entrada==0){

saida=1;

delay

saida=0;

delay

saida=1;

delay

saida=0;

}

pois a passagem pode ser tão rapida que o giro... pode não identificar como um pulso

quanto a imprcisão use um cristal pos a imprecisão no delay se da pela imprecisão do oscilador interno

Compartilhar este post


Link para o post
Compartilhar em outros sites
assim acho que da certo só quero acrescentar que acho necessario um delay na segunda passagem de 0 para 1

ficando assim

if(entrada==0){

saida=1;

delay

saida=0;

delay

saida=1;

delay

saida=0;

}

pois a passagem pode ser tão rapida que o giro... pode não identificar como um pulso

É exactamente isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe mas nao entendo muito a respeito, dera que alguem pode me passa um codigo pro mikrobasic? muito grato pela atençao.

Compartilhar este post


Link para o post
Compartilhar em outros sites
A ideia sugerida é ,ao receber um pulso na entrada ,você pulsa duas vezes a saida.

isso! porém conforme diminui o intervalo de tempo entre os pulsos de entrada teria que fazer o mesmo na saida mas com o dobro da entrada, entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta dizendo q o tempo do pulso da entrada tem q ser igual o da saida ,porém o dobro de pulso? Sendo assim precisaria ao receber o pulso contar o tempo em q ele mantem em x nivel e ao mudar você acionaria a saida pulsando 2 vezes com o tempo salvo no contador.

seria algo como:


se entrada=0
cont++
se entrada=1
contador=cont
cont=0
saida=1
delay(contador)
saida=0
delay(contador)
saida=1
delay(contador)
saida=0
delay(contador).....

Compartilhar este post


Link para o post
Compartilhar em outros sites
esta dizendo q o tempo do pulso da entrada tem q ser igual o da saida ,porém o dobro de pulso? Sendo assim precisaria ao receber o pulso contar o tempo em q ele mantem em x nivel e ao mudar você acionaria a saida pulsando 2 vezes com o tempo salvo no contador.

seria algo como:


se entrada=0
cont++
se entrada=1
contador=cont
cont=0
saida=1
delay(contador)
saida=0
delay(contador)
saida=1
delay(contador)
saida=0
delay(contador).....

desculpe minha ignorância.. mas nao consigo no mikro basic.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega, sei que isto pode soar um tanto quanto desanimador, mas a resposta para a sua dúvida só vai vir com estudo. Sugiro começar a dar uma lida em apostilas (há várias na internet), baixar o datasheet do PIC que você está utilizando, o manual do compilador que você está utilizando, e estudar.

Este programa que você quer fazer é um tanto quanto complexo à primeira vista, mas depois de entender o uso do periférico CCP do PIC vai ficar mais fácil. Sugiro a utilização de assembly. A ideia já foi exposta acima, deves capturar o intervalo de tempo deste pulso e duplica-lo na saída. Tudo isto pode ser feito utilizando o modo de captura do CCP e um timer como o Timer0, e o código, embora seja relativamente complexo, não é extenso.

Aqui vai uma sugestão descritiva de algoritmo:

1)Habilitar de forma individual as interrupções CCP e TIMERx (onde x é o timer que você deseja utilizar, talvez o ideal seja o TIMER1 que é um timer de 16 bits e o CCP também possui um registrador de 16 bits), utilizando o CCP em modo de captura. Habilitar as interrupções de maneira global.

2)Mover o valor do registrador do CCP para um registrador qualquer e dividir por 4 (isso mesmo, por 4), rotacionando duas vezes para a direita o valor do registrador. Este valor rotacionado vai para o registrador do Timer1, utilizando as conversões necessárias tendo em vista prescaler, postscaler, etc, de forma que o período de estouro do Timer1 seja igual ao período do registrador do CCP dividido por 4.

3)O Timer1 contém um flag, que é invertido cada vez que há estouro de contagem. Este flag é utilizado para ligar ou desligar a saída. Sendo assim, haverão duas inversões de nível lógico 0 para 1, em tempo igual.

|-----|_____ => O período do sinal original é guardado no registrador do CCP, através do modo de captura.

|--|__|--|__ => O Timer1 utiliza o valor do período, dividindo por 4 e invertendo a saída cada vez que há estouro.

Esta é uma sugestão, que pode parecer chata e complexa, mas de nada adianta darmos o código pronto. Como diz meu pai, não se dá o peixe, se ensina a pescar.

Se quiseres continuar utilizando Basic, deves ler o manual do compilador para entender as funções do mesmo. Procure pelo modo CCP e pelo Timer1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×