Página 1 de 1

Conversor A/D PIC16F877A

MensagemEnviado: 05 Set 2007 12:48
por jrmanke
Olá pessoal...
Estou com dificuldades em aprender como funciona o escalonamento do D/A do PIC 16F877A. No livro do Fabio Pereira, não esta bem claro para mim este funcionamento.
Já configurei o PIC para ler o valor ( read_adc ) e aprensentar no display. Até ai tudo certo, mas o meu objetivo é ler tensões externas, de inicio pretendo fazer um simples voltimetro 0 - 5V. Alguem pode me ajudar??

Att

Johnny

MensagemEnviado: 05 Set 2007 13:21
por ze
(D/A no pic 16f877? considerarei A/D)
se utilizas linguagem c, sugiro que não percas tempo tentando aprender como funciona o ad. basta definir variável int para a leitura e a função adc_read fornecer-lhe-á o resultado. algo como v=adc_read(channel). sendo que 0<v<1023.
veja o ex. abaixo (pic18fxxx):

Código: Selecionar todos

unsigned int adc_read(unsigned char channel)
{
ADCS1=1; //fosc/64
ADCON0 = (channell << 3) + 0x81;
delay(200);
GODONE = 1;
while(GODONE)
continue;   
return ADRESH*256 + ADRESL;
}


o pessoal do assembler deve te ajudar [se o utilizas...]

para leituras externas DC maiores que 5V, basta colocar divisor resistivo.

MensagemEnviado: 05 Set 2007 14:15
por renatokodaira
O básico é:

1) O conversor A/D tem 10 bits de resolução, logo pode representar 1023 passos (1023 intervalos ou 1024 resultados). Os 10 bits estão representados pelos registradores ADRESH e ADRESL.

2) Cada passo vai depender dos valores das tensões de referência máxima (Vref+) e referência mínima (Vref-).

3) Se você fizer Vref+ = +5V e Vref- = 0 (terra), então cada passo vai ser de: (5V - 0V) / 1023 = 4,8875 mV

4) A distribuição dos 10 bits de resultado da conversão pode ser:
8 bits MSb no ADRESH e 2 bits LSb no ADRESL (justificado pela esquerda)
ou
2 bits MSb no ADRESH e 8 bits LSb no ADRESL (justificado pela direita)

5) Usando justificação pela esquerda, você pode usar apenas o resultado do ADRESH como conversão em 8 bits (255 passos) e desprezar os 2 bits menos significativos que ficaram no ADRESL), dessa forma cada passo terá 5 / 255 = 19,61 mV

6) Você pode diminuir o valor de cada passo se diminuir a distância entre Vref+ e Vref- (desde que respeite o mínimo de 2V entre elas).

7) Não dá pra querer medir tensões negativas ou acima da tensão de alimentação usando tensões negativas no Vref- e muito altas no Vref+.
Vref- significa a menor tensão de referência, não quer dizer que pode enfiar tensão negativa nela.

8) Normalmente a menor tensão a ser convertida não pode ser menor do que 0V (terra), a maior pode ser condicionada por um divisor de tensão, mas veja que a resistência vista pelo pino do PIC da fonte de sinal não deve ser maior do que 10kohm (pra que a carga do capacitor de amostragem não demore muito tempo). Assim não funciona querer medir sinal de 100V usando um divisor de tensão de 95kohm e 5 kohm.

9) Caso a resistência seja maior do que 10kohm, pode colocar um AO buffer (seguidor de tensão) entre a fonte de sinal e a entrada do canal de conversão, para diminuir a resistência (= impedância de saída do AO, que é baixa).

MensagemEnviado: 05 Set 2007 19:12
por jrmanke
Sim estou programando em C CCS V4.033.
Estas informações vão ser muito uteis.
Vou fazer umas brincadeiras para aprender melhor.
Aproposito eu me equivoquei estou utilizando o PIC16F877A.

Obrigado

Johnny

MensagemEnviado: 05 Set 2007 19:29
por MOR_AL
Olá renatokodaira.

Beleza a sua explicação. Simples e direta.

Apenas um detalhe.

No caso do seu exemplo com uma tensão de 100V e um divisor resistivo 95k e 5k, a impedância vista pelo pino do PIC é do paralelo das duas resistências, ou 4750 Ohms.

O equivalente Thévenin é uma fonte de 5V (ou 100V * 5k / (95k + 5K)) em série com 4750 Ohms (ou 1 / ( (1/95k) + (1/5k) )

Imagem

MOR_AL

MensagemEnviado: 05 Set 2007 20:32
por renatokodaira
Olá MOR_AL,

Tem razão, tem que levar em conta o equivalente Thevenin, às vezes a gente esquece do básico da eletrônica e se enrola he he he.

Abs