Página 1 de 1

Conversor A/D PIC16F877

MensagemEnviado: 10 Fev 2010 10:00
por mdaj
Bom dia, gente!

Estou começando com o PIC nao tem mto tempo e estou tendo uns problemas com o conversor A/D dele. Estou programando em C.

Estou colocando a captura numa variável float que recebe o valor da função abaixo:

float ler_adc (int canal)
{
setup_adc_ports(AN0);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel(canal);
return read_adc();
}

No caso, eu uso o RA0.

Feito isso ele funciona, porém , eu queria trabalhar com o conversor de 10 bits, e pela simulação do Poteus ele vai de 0 a 255, ou seja, usa apenas 8 bits.

Outra coisa, quando na instrução setup_adc_ports eu uso qulquer outra configuração (que não AN0), não aparece resultado algum no display. Alguém sabe o porquê disso?

Obrigado desde já!

MensagemEnviado: 10 Fev 2010 10:16
por ze
float não combina com os 10 bits do ad (e muito menos com 8 bits do núcleo deste uC). use unsigned int.
ccs não combina com quem quer aprender mais a fundo. vá de mikroc (por enquanto). Procure entender o pic por sua verdadeira identidade (hw/datasheet) e não pelo que falam sobre ele (sw/ccs). Assim vc aprende + tanto c como pic.
abç

MensagemEnviado: 10 Fev 2010 10:22
por cristian
mude de float e usa uma var inteira de 16bits

no proteus vc seleciona o tipo de variavel para double word assim ele vai exibir o valor certo

MensagemEnviado: 10 Fev 2010 10:28
por mdaj
Muito obrigado, gente! Vou mudar a variável aqui!

E vou baixaro mikroc tbm pra ver se aprendo de fato. Pq eu vi que era no ADCON1 que configurava, pq para conseguir usar os 10 bits tem que justificar a esquerda, mas nao sabia como configurar em C.

Mais uma vez MUITO obrigado!

Abraços!

MensagemEnviado: 10 Fev 2010 10:59
por mdaj
Então cristian, eu não sei se está configurado para double word, mas quando eu cliquei sobre o pic no programa, existe m campo "Program Configuration Word" e na frente dele está uma palavra 0x3FFB, isso significa algo.

E no mais, mesmo mudando a variável para unsigned long, o valor varia apenas varia de 0 a 255!

Obrigado!

MensagemEnviado: 10 Fev 2010 13:24
por mdaj
Boa tarde gente! Então, para quem olhou e não soube tbm, acabei descobrindo aqui.

Para configurar o adc para 10bits (pelo menos com o CCS) tem que usar uma diretiva espcífica no programa:

#device adc = 10

Ela deve vir logo após o
#include <16F877.h>
que é declaraado no início do programa.

Vlw pela ajuda, principalmente cristian e Lellis

Abraços!

MensagemEnviado: 10 Fev 2010 20:11
por barboza
mdaj escreveu:
Para configurar o adc para 10bits (pelo menos com o CCS) tem que usar uma diretiva espcífica no programa:

#device adc = 10

Ela deve vir logo após o
#include <16F877.h>
que é declaraado no início do programa.




Tem coisas que Mastercard resolve, outras só o ccs faz por você!!!