Ir ao conteúdo

Posts recomendados

Postado

Olá, bom dia a todos.

Gostaria de pedir a ajuda dos colegas para explorar a possibilidade de criar um volt-amperimetro com controlador pic (16f876 por exemplo) + lcd.

Eu criei este tópico porque navegando na net achei esses dois links:

http://www.arnerobotics.com.br/eletronica/voltimetro_pic.htm

http://electronics-diy.com/70v_pic_voltmeter_amperemeter.php

O primeiro mostra um esquema completo de um voltímetro(range de 0v-25v) utilizando um pic 16f876, com direito a tudo: código hex, pcb, esquema do circuito, etc, muito bacana do dono do site disponibilizar esse material.

O segundo mostra outro esquema muitooooo parecido utilizando o mesmo pic 16f876(só que é um volt-amperimetro!!!!), ele dá a lista de componentes, o circuito e tudo mais, só que o código ele não dispõem, ele vende. Vende o kit com todas as peças e tal por U$ 39,90 + frete, até que não é caro para um treco tão bem feito!!

Como eu tenho muitasss peças aqui, inclusive o controlador citado gostaria de ajuda para adequar estes códigos dos link para fazer um volt-amperimetro, se for possível claro. Pois embora exista os amperimetros e voltimetros no ebay e sejam baratos, se houver a possibilidade de montar um com esses componentes(pic, lcd , etc), que tenho de monte, seria super viável para im e para muitos outros, com certeza.

Eu estou começando na eletrônica, essas programações são muito complexas para mim, ainda...

Desde já agradeço qualquer ajuda ou ideia dos colegas.

Postado

Fiz esse código pra uma aplicação minha. Ele aparece a tensão, (0-30V) Corrente(0-5amp) e Potência. A resolução não ficou muito boa, em torno de 200ma. porque eu não usei amplificadores operacionais. Se você usar amplificadores operacionais, use o valor real que está no comentário do código)

#include <16F877A.h>
#device adc=10

#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#include <lcd.c>
int16 q1;
float tensão,p,q2,pot;

void main()
{
lcd_init();
delay_ms(100);
setup_adc_ports(AN0_AN1_AN3); //Canal 0 analógico
setup_adc(ADC_CLOCK_INTERNAL); //Fuente de reloj RC

while (TRUE)
{
set_adc_channel(0); //Habilita canal 0
delay_ms(10); //Espera um pouco, obrigatório!
q1 = read_adc(); //Lê canal 0
p = (q1 * 5)/1023.0; //Conversão para tensão.
q2 = p * 6;
SET_ADC_CHANNEL(1);
delay_ms(10);
valor = READ_ADC(7);
delay_ms(10);
tensão = valor * 0.048828125 / 5 * 5; //0.0048828125 valor real
delay_ms(10);
pot = tensão * q2;
delay_ms(100);
printf(lcd_putc,"\f%2.2fA %2.2fVolts\n%2.2fW", tensão,q2,pot);
}
}

Postado

Boa tarde chacalgbi, muito obrigado pela ajuda!!

Só me ajuda um pouquinho mais, sou iniciante e não entendi o que você explicou sobre a questão de resolução com controladores operacionais. Pode por gentileza me explicar como posso melhorar esta resolução?

Muitoooo obrigado mesmo amigo. Abração.

Postado

Olha, chegando lá em casa vou postar pra você o tutorial com o código + fonte em C CCS + esquema do proteus. Ai você vai entender.

A questão da resolução é que se o meu tá com resolução de 200mA, ele só vai mudar de 200mA em 200mA, se eu tiver só um LED ligado que consome 20mA ele não vai aparecer nada, entendeu? continuará marcando 0 no amperímetro, só depois de 200mA é que vai variar, se você fazer tudo que tá escrito no tutorial, vai ser bem mais fácil.

Detalhe: você vai precisar de uma fonte simétrica ou seja (+12V Positivo | Terra | -12V Negativo)

Postado
Olha, chegando lá em casa vou postar pra você o tutorial com o código + fonte em C CCS + esquema do proteus. Ai você vai entender.

A questão da resolução é que se o meu tá com resolução de 200mA, ele só vai mudar de 200mA em 200mA, se eu tiver só um LED ligado que consome 20mA ele não vai aparecer nada, entendeu? continuará marcando 0 no amperímetro, só depois de 200mA é que vai variar, se você fazer tudo que tá escrito no tutorial, vai ser bem mais fácil.

Detalhe: você vai precisar de uma fonte simétrica ou seja (+12V Positivo | Terra | -12V Negativo)

Bom dia, chacalgbi não estou cobrando pois se eu fizer isto eu estaria errado pois você não tem obrigação :lol:, mas fiquei interessado no assunto e também sou hobbista/iniciante e todo material teórico/explicativo é de grande valia :D:D:D

  • mês depois...
Postado

Eae Brunocavaledo, se você é iniciante e não sabe como estudar o programa, faça o seguinte, va apagando linhas, mudando valores e vai anotando a função de cada uma.

T+

Postado

Brunocavaledo,

Eu tenho um projetinho muito parecido, que mede tensão e corrente, usando EXATAMENTE o mesmo princípio ( mas tensão até 20 V e corrente até 20A ), utilizando um microcontrolador AVR ATMEGA48, e que possui apenas a calibração de corrente devido à tolerância do resistor shunt ( 10% ).

É práticamente idêntico em funcionamento e ajuste ao segundo esquema que voce postou.

A medição de tensão tem precisão dentro de 5% e para mim é o suficiente, mas pode ser alterado no programa para também poder ajustar mais precisamente a tensão.

Posso modificar ele para a tensão e corrente que voce precisar, e o código-fonte está escrito em BASCOM ( Basic ).

Veja se te ajuda, ok ?

Paulo

  • 4 meses depois...
Postado

galera sou novo aqui,

estou aprendo programação e gostaria de saber se poderiam me ajudar com um programa (trabalho escola).

ja testei no proteus, mas não esta funcionando exatamente como quero.

quando aberto o botão só aparece no lcd o primeiro e o ultimo dígito.

se puderem me ajudar agradeço.

# include <18f4431.h>
# include <stdio.h>
# fuses hs,put,nocpd,nolvp,noprotect,nomclr,nowdt,brownout
# use delay(clock=20000000)
# include <lcd.c>

int w;
int x;
void main(){

lcd_init();
delay_us(70);
printf(lcd_putc"\f MultiRepelente \n Bugiganga ");
while (true ){

if (input(pin_a0)==1){
delay_ms(70);
if (input(pin_a0)==1){
x--;

}
}
if (input(pin_a1)==1){
delay_ms(70);
if (input(pin_a1)==1){
x++;

}
}
if (input(pin_a2)==1){
delay_ms(100);
if (input(pin_a2)==1){
w++;

if (w==1){x=58; //Pernilongo 58
lcd_gotoxy(1,1);
lcd_putc("\f Pernilongo \n");
lcd_gotoxy(1,2);
printf(lcd_putc,"\f Hertz:%u",x);
}
else if (w==2){x=100; //Cão 23
lcd_gotoxy(5,1);
lcd_putc("\f Cão \n");
lcd_gotoxy(1,2);
printf(lcd_putc,"\f Hertz:%u",x);
}
else if (w==3){x=16; //Gato 16
lcd_gotoxy(5,1);
lcd_putc("\f Gato \n");
lcd_gotoxy(1,2);
printf(lcd_putc,"\f Hertz:%u",x);
}
else if (w==4){x=70; //Rato 11
lcd_gotoxy(1,1);
lcd_putc("\f Rato\n");
lcd_gotoxy(1,2);
printf(lcd_putc,"\f Hertz:%u",x);
}
else if (w==5){x=208; //pombo 208
lcd_gotoxy(1,1);
lcd_putc("\f Pombo \n");
lcd_gotoxy(1,2);
printf(lcd_putc,"\f Hertz:%u",x);
}
else if (w==6){w=0;}
}
}

output_high(pin_b0);
delay_us(x);
output_low(pin_b0);
delay_us(x);
}

}

  • 7 meses depois...
  • mês depois...
  • 3 anos depois...
Postado

Chacalgbi, Vi seu artigo de "7 de fevereiro de 2012" sobre, Voltimetro Ampêrimetro com PIC, quero montar este circuito, sou estudante iniciando em eletrônica, você poderia me enviar o projeto? fonte em C e circuito no proteus.

Antecipadamente, obrigado!

 

adicionado 24 minutos depois

Chacalgbi, Vi seu artigo de "7 de fevereiro de 2012" sobre, Voltimetro + Ampêrimetro com PIC, quero montar este circuito, sou estudante iniciando em eletrônica, você poderia me enviar o projeto? fonte em C e circuito no proteus. Antecipadamente, obrigado!

Visitante
Este tópico está impedido de receber 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...