Ir ao conteúdo

Voltimetro PIC16F628A + LCD -- Dificuldades


Pc100

Posts recomendados

Postado

Galera, to tentando fazer um voltimetro com o pic16f628a mas o código n ta compilando, peguei um que vi num tópico aqui mesmo no CDH, sealguem puder me ajudar!

O tópico em questão é:

http://forum.clubedohardware.com.br/projeto-voltimetro-digital/923223

E o erro que da aqui é:

Executing: "C:\Program files\Picc\CCSC.exe" +FM "piscaled.c" +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 12 "piscaled.c" Line 25(19,20): Undefined identifier -- setup_adc_ports
*** Error 12 "piscaled.c" Line 26(13,14): Undefined identifier -- setup_adc
*** Error 12 "piscaled.c" Line 28(19,20): Undefined identifier -- set_adc_channel
*** Error 12 "piscaled.c" Line 33(20,21): Undefined identifier -- read_adc
4 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Feb 19 15:06:31 2013

Se alguém puder m ajudar eu agradeceria!

----edit----

Achei isso na internet, o cara fiz um video mostrando funcionando com dysplay de 7 segmentos

tinha isso para baixar:

https://dl.dropbox.com/u/100193359/delta%20sigma%20%28display%29.rar

dei uma olhada, e ele usa ADC, então tem uma forma!

Analisando o código que vi no vídeo e modificando o meu consegui fazer isso:

#include <16F628A.h>
#FUSES NOWDT, INTRC_IO, NOPUT, NOPROTECT, NOBROWNOUT, MCLR, NOLVP, NOCPD
#use delay(clock=4000000)

#bit saida_comp = 0x1F.7 //Bit 7 do registrador CMCON equivale a saída do segundo comparador C2OUT e só pode ser lida
#bit pino_modul = 0x05.3 //Pino do modulador (RA3) que írá aplicar 5V ou 0V no integrador (capacitor).
#bit pino_ra0 = 0x05.0 //No mesmo resgistrador (0x05 = PORTA) o registrador responsável pelo controle do pino RA0 está sendo acessado.
#bit tris_modul = 0x85.3 //Bit 3 do resgistrador TRISA para configurar o pino RA3 como saida
#byte cmcon_reg = 0x1F //Registrador do módulo comparador analógico
#byte vrcon_reg = 0x9F //Módulo de referência interna de tensão

#include <lcd_flex.c>

void parametros_iniciais() //Inicializa os registradores e o pino RA3 como saída
{
vrcon_reg = 0b11101100; //0b11101100 coloca o módulo de referência na pequena escala
tris_modul = 0; //Pino RA3 como saída > para mais detalhes vá ao datasheet do uC
cmcon_reg = 5; //Comparador no modo 5
}

int read_adc()
{
unsigned long resultado = 0, resolucao = 0;
cmcon_reg = 5;
//Para entender o funcionamento do programa é interessante dar uma olhada nos seguintes sites:
//http://designtools.analog.com/dt/sdtutorial/sdtutorial.html - Com simulação
//http://www.beis.de/Elektronik/DeltaSigma/DeltaSigma.html
for(resolucao = 0 ; resolucao <= 256 ; resolucao++) //Neste caso temos uma resolucão de 8 bits
{
if(saida_comp) //Caso a saida esteja em nível alto ( == 1)
{
pino_modul = 1;
}
else //Caso a saida esteja em nível baixo ( == 0)
{
pino_modul = 0;
resultado++;
}
}
cmcon_reg = 5;

//A porcentagem de 1's na conversão determina o valor da tensão amostrada
//Se fossem utilizados 5 iterações e das cinco vezes que foi verificado o loop apenas 3 vezes a saida esteve em nivel
//lógico alto então seria equivalente a dizer que tem-se 3/5 da tensão no pino.
//Como são usadas 255 iterações é equivalente a dizer que temos um AD de 8 bits
//A resolução pode ser aumentada entretanto o sistema pode ficar mais lento e impreciso
return(resultado);
}

void main()
{
unsigned long valor; // variável que receberá o valor da coversao
float teste=0;
delay_ms(500);
lcd_init(); // Inicializa o LCD
delay_ms(100); // Aguarda 300 ms
printf(lcd_putc,"\f INICIANDO..."); // Escreve no LCD
delay_ms(200); // Aguarda 100 ms


setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);

parametros_iniciais();

while(true)
{
valor = read_adc(); //Efetua a leitura da tensão e armazena em valor (valor vai de 0 a 255)
valor = (valor*50)/255; // Escalona o valor da leitura para 0V a 5V

teste = valor;
teste = teste/10;
printf(lcd_putc,"\fVOLTS %.2f", teste);

delay_ms(30);
}
}

Funcionou, mediu a tensão, mas ele esta com uma margem de erro de 0,2V para mais e para menos, tem como corrigir isto?

Postado

É, pelo que o autor explicou é o sistema delta sigma mesmo!

N sabia q o 16F628A n tinha ADC...

A precisão do sistema delta sigma n é como a do sistema ad correto?

Postado
esse pic que você esta usando não tem conversor A/D você usou o delta/sigma para poder converter ou foi de outro modo??

É só baixar os arquivos do link,e sim,usa delta sigma.

Usando Delta sigma,a margem de erro é razoavel.

Postado

Tem como me dar uma ajudinha, eu baixei os arquivos, mexi batante no código, mas entendi muito, precisava que ele lesse até 15V, como esta ali ele mede até 5V.

Saberia me dizer se o Pic16f84a tem ADC? esse pode ser substituído na minha placa pois tem os pinos nas mesma posições!

Postado
Tem como me dar uma ajudinha, eu baixei os arquivos, mexi batante no código, mas entendi muito, precisava que ele lesse até 15V, como esta ali ele mede até 5V.

Nunca usaei Delta sigma,então não poderia ajudar.

Saberia me dizer se o Pic16f84a tem ADC? esse pode ser substituído na minha placa pois tem os pinos nas mesma posições!

Não tem e é um Micro fora de linha a um tempo.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!