Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

ADC molule microcontroller, Notas de aula de Microcontroladores

microcontroladores modulo adc...........

Tipologia: Notas de aula

2020

Compartilhado em 19/02/2020

alanfsreis
alanfsreis 🇧🇷

1 documento

1 / 20

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Módulo ADC
- Conversor de 10 bits por aproximação sucessiva;
- 14 entradas analógicas;
- Tensões de referência interna ou externa.
Modo ADC e registradores:
- ADRESH – byte alto do resultado da conversão
- ADRESL – byte baixo do resultado da conversão
- ADCON0 – registrador de controle 0;
- ADCON1 – registrador de controle 1.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14

Pré-visualização parcial do texto

Baixe ADC molule microcontroller e outras Notas de aula em PDF para Microcontroladores, somente na Docsity!

Módulo ADC

  • Conversor de 10 bits por aproximação sucessiva;
  • 14 entradas analógicas;
  • Tensões de referência interna ou externa. Modo ADC e registradores:
  • ADRESH – byte alto do resultado da conversão
  • ADRESL – byte baixo do resultado da conversão
  • ADCON0 – registrador de controle 0;
  • ADCON1 – registrador de controle 1.

ADC: Esquema interno

Requisitos da conversão

  • Para funcionar corretamente, é necessário um certo delay entre a escolha de um canal e o início da conversão. Esse tempo é chamado tempo de aquisição e depende da impedância da fonte.
  • Existe uma equação para calcular o tempo de aquisição, mas no pior caso, esse tempo é 20us.
  • O tempo para o ADC completar a conversão de 1 bit é definido como TAD.
  • O TAD deve ser no mínimo 1,6us.
  • A conversão dos 10 bits leva 11 períodos TAD.

Clock do ADC

A configuração do clock do ADC é feita com os bits ADCS1 e ADCS

Registrador ADCON

ADCS1, ADCS0 – Bits de seleção de clock de conversão do A/D

Registrador ADCON

CHS3-CHS0 – Bits de seleção do canal analógico

  • Registrador ADCON

Registrador ADCON

ADFM – bit de seleção de formato do resultado do A/D 1 – resltado da conversão justificado a direita. 0 – resultado da conversão justificado a esquerda. VCFG1 – bit de seleção de tensão da referencia negativa do conversor A/D 1 – referência negativa é aplicada no pino Vref- ; 0 – Vss é usado como referência negativa. VCFG0 – bit de seleção de referência positiva do conversor A/D 1 – referência positiva é aplicada ao pino Vref+ ; 0 – Vdd é usado como referência positiva.

Step 4 – Aguarde o requerido tempo de aquisição (aproximadamente 20uS) passar. Step 5 – Inicie a conversão setando o bit GO/DONE do registrador ADCON0. Step 6 – Aguarde a conversão terminar ADC. Se necessário, check em um loop se o bit GO/DONE foi limpo ou aguarde uma conversão ou aguarde uma interrupção do A/D (deve ser configurado previamente). Step 7 – Leia o resultado do ADC: Leia os registradores ADRESH e ADRESL.

Exemplo

Ex1: Exibir no display LCD o valor de tensão presente no pino RA2.

void main() { INTCON = 0; // todas interrupções desabilitadas ANSEL = 0x04; // pino RA2 é configurado como entrada analógica TRISA = 0x04; ANSELH = 0; // restante dos pinos configurados como digital Lcd_Init(); // inicialização do display LCD Lcd_Cmd(_LCD_CURSOR_OFF); // LCD command (cursor off) Lcd_Cmd(_LCD_CLEAR); // LCD command (clear LCD) text = "Aula 13 - ADC"; // define a primeira mensagem Lcd_Out(1,1,text); // escreve a primeira mensagem na primeira linha text = "Exemplo LCD"; // define a segunda mensagem Lcd_Out(2,1,text); // escreve segunda mensagem ADCON1 = 0x82; // referencia de tensão do A/D é VCC Delay_ms(2000); text = "tensao:"; // define terceira mensagem

While (1) { // loop infinito adc_rd = ADC_Read(2); // conversão A/D. pino RA2. Lcd_Out(2,1,text); // escreve o resultado na segunda linha tlong = (long)adc_rd * 5000; // converte o resultado em milivolts tlong = tlong / 1023; // 0..1023 -> 0-5000mV ch = tlong / 1000; // extrai volts do resultado Lcd_Chr(2,9,48+ch); // escreve o resultado em formato ASCII Lcd_Chr_CP('.'); ch = (tlong / 100) % 10; // Lcd_Chr_CP(48+ch); // ch = (tlong / 10) % 10; // Lcd_Chr_CP(48+ch); // ch = tlong % 10; // Lcd_Chr_CP(48+ch); // Lcd_Chr_CP('V'); Delay_ms(1); } }

Exemplos

Ex1:Desenvolver um firmware em C para fazer a leitura de temperatura utilizando o CI LM35 e exibir o valor da temperatura em graus Celsius em um display LCD.

Exemplos

Ex2: Escreva um firmware para exibir o valor de resistência de um sensor de luminosidade LDR.