Roteiro 5 EA870 2S2009

De DCA-Wiki

Contents

Roteiro 5 - Conversão Analógico/Digital

  • Uso do periférico de conversão Analógico/Digital

Agradecimentos

O desenvolvimento deste roteiro teve a grata contribuição de Carolina Franciscangelis (carolina.franciscangelis@gmail.com), Alexandre Passos, Guilherme A. Zalewski (buzzag@gmail.com) e Pedro Augusto (okaitt@gmail.com).

Introdução ao Experimento de Hoje

  • Este experimento tem como objetivo estudar como se processa a conversão de um sinal analógico para um sinal digital no microcontrolador MCF52221. Para tanto, utiliza-se um sensor de temperatura - o LM61, que deve ser colocado na placa auxiliar - onde a variação desta resulta na variação de tensão em seus terminais, os quais estão conectados ao microcontrolador onde será feita a leitura e conversão do dado.

Roteiro de Estudos

  • 1. O que é uma conversão A/D? Cite um exemplo.
  • 2. Quais são os três modos de leitura? Especifique-os.
  • 3. Qual a fórmula que relaciona o resultado digital com a entrada analógica no modo Single-Ended?
  • 4. Qual a função do registrador CTRL1?
  • 5. Qual a função do registrador CTRL2? Como esse varia de um modo de leitura sequencial para o modo de leitura paralelo?
  • 6. Qual a função dos registradores ADLST1 e ADLST2?
  • 7. Cite e explique os diferentes modos de leitura no registrador POWER.

Roteiro da Aula

O programa abaixo, programa exemplo do conversor AD, deve ser executado no CodeWarrior. Observe que o conversar Analógico/Digital possui registradores tanto de 8 bits como de 16 bits. Devemos usar o comando move.b e move.w, respectivamente conforme o tamanho da porta de E/S.

- Programa AD/main.c

#include "support_common.h" /* include peripheral declarations and more */
#include "stdio.h"          

/* OBS.: Para configuração dos registradores deste roteiro veja: Cap 25 - /6/ */

#define DDRAN  	0x40100022      /* registrador que determina se o pino trabalha como */
                                /* entrada ou saida de dados */
#define PANPAR 	0x4010006A	/* reg. que conf. o pino como funcao primaria ou GPIO */
#define CTRL1  	0x40190000	/* registrador do controle de leitura do pino.  */
#define CTRL2  	0x40190002	/* registrador de controle leitura do pino.  */
#define ADSDIS 	0x4019000A	/* registrador para setar os samples.  */
#define ADLST1 	0x40190006	/* registrador selecionar os canais nos samples. */
#define ADSTAT  0x4019000C      /* registrador de status, para testar fim de conversão */
#define ADRSLT0	0x40190012	/* registrador 0 que armazena medicao de sinal */ 
#define CAL     0x40190054      /* registrador de controle de tensões de referência */
#define POWER   0x40190052      /* regist. de cont. de modo de utilizacao da tensao. */

int main(void){
asm
{
    move.b	#0xFF, D0   	  //Configura AN3 para ADC
    move.b	D0,PANPAR
	
    move.w	#0x4002, D0	  //Desativa qualquer medida e comeca a configurar
    move.w	D0, CTRL1	  //Modo Loop sequencial - faz a medida de cada*/ 
                                  /*canal sequencialmente */
    move.w	#0x000F, D0	  //Divisao do clock
    move.w	D0, CTRL2	  

    move.w 	#0x00FE, D0	  //Seleciona apenas um registrador de amostra SAMPLE0
    move.w	D0, ADSDIS
		
    move.w 	#0x0003, D0	  //Conecta o canal AN3 (onde o sensor esta ligado) com o SAMPLE0
    move.w	D0, ADLST1

    move.w 	#0x0000, D0	  //VRH e VRL como referências (3V e 0V)
    move.w	D0, CAL
 	
    move.b 	#0x0000, D0	  //Desabilita o modo standby
    move.b	D0, POWER

PEGA_VALOR:
    move.w	#0x2000, D0	  //Solicita a leitura do ADC (START)
    move.w	D0, CTRL1	  

WAIT:
    move.w      ADSTAT, D0
    andi        #0x0001, D0             //Testa se a conversão foi feita
    beq         WAIT                    //Se não estiver pronta, espera

    move.w	ADRSLT0, D0             //Pega o valor
    bra         PEGA_VALOR
}
  • Crie um novo projeto no CodeWarrior e utilize a codificação do programa acima como código principal (main).
  • Execute-o com o LM61 inserido na placa. CARO ALUNO, POR FAVOR, PEÇO SUA ATENÇÃO: caso seja voce quem vai inserir o componente LM61 na placa: CUIDADO, OBDEÇA A MARCA QUE SINALIZA A INSERÇÃO CORRETA. EVITE DANOS À PLACA E AO COMPONENTE.
  • Procure entender exatamente o que o código faz.
  • É possível observar que o valor obtido de ADRLT0 é apenas o valor digital dado pelo conversor A/D.

Para confecção da experiência do relatório será necessário o uso do código de configuração do transmissor serial, assim como o código de envio, ambos visto no roteiro anterior. Basta incluir os DEFINES, o código de configuração e envio, do roteiro anterior.

Relatório

(Veja na página da disciplina, na opção calendário a data referente à entrega de cada relatório).

  • 1. Altere o programa exemplo de modo que:
    • Recebido o valor digital do sensor de temperatura LM61, esse seja impresso e atualizado no hyperterminal em graus Celsius.
    • Para isto, é necessário que seu valor seja primeiro convertido em milivolts.
    • A partir do valor em milivolts, transforme-o para graus Celsius.
    • O valor da temperatura deverá ser convertido para ASCII (o valor de temperatura nunca excederá dois digitos).
      • DICA: Separe os digitos da temperatura, de modo que seja possível o envio de cada digito por vez.
      • DICA: Em ASCII os números são representados por eles mais 30 (hexa). Exemplo: 8 => 0x38.
    • Utilizando a transmissão serial envie para o hyperterminal o valor da temperatura.
    • Atualize esse valor a cada ciclo.
      • DICA: Opcionalmente, é possível fazer um retorno do cursor usando o comando ASCII CR (Carriage Return) 0x0D para que os próximos caracteres a serem enviados sejam escritos por cima dos anteriores. Outra opção é imprimir cada valor em uma linha, usando o comando ASCII LF (Line Feed) 0x0A
  • 2. Aqueça o sensor de temperatura e observe sua variação através do monitor no HT.
  • 3. Faça um fluxograma do programa alterado, paralelamente, explique em detalhes cada bloco.

As fórmulas de conversão estão no material de consulta rapida criado na FEEC. Podem ser encontradas também nos datasheets tanto do LM61 (media:LM61.pdf, quanto do microcontrolador /3/, capítulo 25.5.2.1.

Referências

Ferramentas pessoais