Ir ao conteúdo
  • Cadastre-se

Potenciômetro digital parametrizavel com saida de tensão e decorrente


Daniela123

Posts recomendados

Ola à todos. Estou tentando fazer um potenciometro digital parametrizavel com saida em tensão e em corrente, para meu tcc. Ele deve ter 3 botões, um up, um down, e um select. O up e o down incrementam e decrementam, claro, e o select tem que selecionar, as funções que são senha, velocidade de subida, velocidade de descida, rampa de aceleração, tensão ao ligar, modo de operação e altera senha. Deve tb ser controlado remotamente (ou usa-se a botoeira ou comando remoto). A alimentação é de +ou-15Vcc, e a saida tem que ser selecionavel, pelo modo de operação ente 0 e 10 ou -10 e 0 Vcc. Ja montei no proteus o circuito de chaveamento pra selecionar o modo de operação. Mas estou tendo dificuldade na programação do pic, estou usando o 16f877. Logo que ligo o equipamento ele deve mostrar no display o modo de operação e o valor que ficou setado ao ligar, se aperto o select ele deve pedir a senha pra poder seguir com a parametrizacao. comecei o codigo ele ta incrementando o valor na saida, e esta indo para a senha mas n ta incrementando/ decremtnando a senha. n sei programar bem ainda e so tem 3 meses que to estudando o pic. Fico muito grata se puderem me ajudar.

//            *** Inclusão das bibliotecas ***
#include <16F877.h>
#include <regs_16f87x.h>
//-----------------------------------------------------------------------------------
// *** Configurações do Projeto ***
#use delay(clock=4000000) //informa ao sistema o frequência
//de clock, para temporização
#fuses NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP, NOCPD,NOWRT //palavras de config.
//-----------------------------------------------------------------------------------
// *** Definições do LCD ***
#define lcd_enable pin_e1
//#define lcd_rw pin_e2
#define lcd_rs pin_e0
#define lcd_d4 pin_d4
#define lcd_d5 pin_d5
#define lcd_d6 pin_d6
#define lcd_d7 pin_d7
#include <mod_lcd.c>
//-----------------------------------------------------------------------------
// *** Variáveis globais ***
unsigned int saida; //por ser global a variável pode ser acessada dentro de qualquer função
unsigned int vsenha;
//-----------------------------------------------------------------------------------
// *** Funções ***
void up(void){
// while (!input(PIN_a0)) ; //debounce da chave
if(saida != 0) { // se saida é zero já está no maior passo e pula rotina
saida--; //diminui saída, aumentando o passo
output_b(saida); //saida de bit de controle do pot
}
}
void down(void){
// while(!input(PIN_a1)); //debounce da chave
if(saida != 0xff) { //se saída = 255 ( ff ) já está no menor passo e pula rotina
saida++; //aumenta saída, diminuindo o passo
output_b(saida); //saida de bit de controle do pot
}
}
//-----------------------------------------------------------------------------
void up_senha(void) {
if(vsenha!=0){
vsenha--;
}}
void down_senha(void){
if(vsenha!=0xff){
vsenha++;
}
}
//-----------------------------------------------------------------------------------
// *** Função principal ***
void main(void){
saida=0xff; //pot tem seu valor inicial mínimo
vsenha=0xff;

lcd_ini();

while(1)
{
lcd_escreve('\f'); //apaga display

if(!input(PIN_a0))
{
while (!input(PIN_a0))
{
up(); //chama a função para subir valor se acionada sw1
}
}
if(!input(PIN_a1)) {
while (!input(PIN_a1))
{
down(); //chama a função para subir valor se acionada sw2
}
}
output_b(saida); //saida de bit de controle do pot
printf(lcd_escreve," 0V %u 10V ",saida);

if(!input(pin_a2))
{
lcd_escreve('\f');
lcd_escreve(" Digite a senha ");
printf(lcd_escreve, " %u ",vsenha);
while (input(pin_a2))
{
if(!input(pin_a0))
{
while (!input(pin_a0))
{
up_senha();
}
}
if (!input(pin_a1))
{
while(input(pin_a1))
{
down_senha();
}
}
output_c(vsenha);
// printf(lcd_escreve, " Digite a senha ");
//printf(lcd_escreve, " %u ",vsenha);
delay_ms(3500);
}
}
}
}

Link para o comentário
Compartilhar em outros sites

A coisa ai nao é estão simples.Primeiro q pra gerar uma saida de tensão do jeito que quer,poderia optar em usar uma rede r/2r,ou um conversor digital para analogico.A questao da senha você precisa criar a rotina para verificar a senha,e tbem para receber a senha.Prentende usar teclado?

Estamos ai pra ajudar no que precisar.Abraços.

Link para o comentário
Compartilhar em outros sites

oh, Jorge, muito obrigada pela resposta. meu orientador me ajudou no circuito para selecionar o modo de operação para obter os +ou-10V nan saida, mas ainda n fiz a rotina que ira selecionar o modo de operação se é a escala de 0 a 10 ou de 0 a -10, porque o modo de operação deve vir depois da senha. Estou pensando em usar 3 botões push button. um pra up outro pro dwn e outro pra selecionar as funções. gostaria de mostrar o circuito que ja tenho sabe me dizer como? to usando o proteus.

Link para o comentário
Compartilhar em outros sites

Se vai usar apenas estes tres botões,tera q fazer a senha por meio de incrementar ou decrementar as variaveis q compoe a senha e depois verificar.Para uma senha de 4 digitos teria que ter 4 variaveis:var1,var2,var3,var4,cada uma vai de 0a 9, então pode incrementar ou decrementar.Com o botao select você seleciona o numero desejado e automaticamente ele pula para proximo numero,faça um contador q a cada vez q é incrementado muda a seleçao tipo:


while(contador==1){
"Entre com senha"
0_ _ _
while (contador==2){
0 0 _ _

,ao final dos 4 numeros escolhidos você ira comparar,ficaria tipo assim se usar o if:

 if var1==senha1 e var2==senha2 e var3==senha3 e var4==senha4 
"Senha correta"
senao
"senha incorreta"

Link para o comentário
Compartilhar em outros sites

Gostaria de fazer da seguinte forma: logo que ligar o equipamento o display estara assim: 0V 50% 10V. Indicando que ele estara operando de 0 a 10V e os 50% indica que esta em 5V. Se eu pressionar o up ele incrementa 51% se up de novo 52% e assim por diante, se der down ele decrementa. se der select ele vai para senha e exibe no display: Digite a senha e espera a senha deve ser um numero de 0 a 255 então o usuario pressiona up ou down e chega ate o numero da senha que deve ser comparado com a senha que esta na memoria e se for igual passa para a proxima função. Ate o Digite a senha esta dando certo mas quandpo pressiono o up e down ele n conta a senha entende? e tb ainda n sei guardar na memoria. encontrei umas funçoes write eeprom e read eeeprom não sei se serve ainda. help me!!!:wacko:

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois...

Ola pessoal. Ainda to na luta no tcc e to termimando o programa eu acho.

To fazendo uns ajustes, mas ta pegando nessa parte.

O negocio é o seguinte: enquanto o botão a2 não for pressionado o programa

fica dentro do laço while então se for pressionado o botão a0: incrementa

se for pressionado o a1: decrementa e se não for pressinado nem um nem outro por um tempo, volta ao inicio que é L2, e é nesse trecho que ta pegando

Programei como abaixo so que ele ta preso no último if e ta voltando pro inicio do programa que é L2. Ja percebi isso que ele fica contando o delay_ms(2000) e se tento incrementar ou decremntar não da certo. que faço?

esse é o trecho que to querendo programar

while(input(PIN_a2))

{

if (!input(pin_a0))vdes++;

if (!input(pin_a1))vdes--;

vdes1=(((float)vdes*100)/255);

vdes2=(int)vdes1;

Printf (lcd_escreve,"\f Veloc. de descida\n %d%%",vdes2);

delay_ms(70);

write_eeprom(3,vdes);

if ((input(pin_a0))||(input(pin_a1))) {delay_ms(2000); goto L2;}

}

me ajude, please

Link para o comentário
Compartilhar em outros sites

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...