MM – Microprocessadores e Microcontroladores – Roteiro da Experiência 14 EXPERIÊNCIA 14 – USO DO CONVERSOR ANALÓGICO-DIGITAL Parte I – Fundamentos Teóricos Freqüentemente, um microcontrolador é utilizado para tratar sinais não digitais, isto é, que não necessariamente se mantêm em apenas 2 níveis de tensão, mas que podem apresentar qualquer valor de tensão, dentro de uma faixa pré-estabelecida. Esses sinais, analógicos, precisam ser convertidos em sinais digitais para que possam ser manipulados internamente pelo microcomputador. A conversão de um sinal analógico em um sinal digital é feita pelo dispositivo denominado conversor analógico-digital. Alguns microcontroladores da família do 8051 já possuem um conversor interno; não é o caso, porém, do microcontrolador 80C31 utilizado no kit SDM9431. No entanto, o kit possui um conversor analógico-digital externo ao microcontrolador: o componente ADC0808. Esse conversor possui 8 canais analógicos de entrada, o que significa que ele é capaz de converter até 8 sinais analógicos, cada um deles entre 0V e 5V. O tempo em que a conversão é efetuada é de 100s, o que exige uma certa estabilidade do sinal sendo convertido (sinais com variações de tensão muito rápidas podem não ser convertidos com precisão). Para cada canal de entrada do conversor AD, existe um endereço para acesso, como se fosse de uma posição de memória externa, de acordo com a Tabela 1. A escrita de um valor qualquer nesse endereço dispara a conversão. A leitura desse endereço fornece o valor digital obtido pela conversão. canal de entrada do endereço de acesso ao canal de entrada do endereço de acesso ao conversor AD canal do conversor AD conversor AD canal do conversor AD 1 E000h 5 E004h 2 E001h 6 E005h 3 E002h 7 E006h 4 E003h 8 E007h Tabela 1 – Endereços de acesso aos canais do conversor AD A conclusão da conversão é indicada por um sinal digital gerado pelo converso (sinal EOC – “end of conversion”), que deve ser lido no endereço E400h. A entrada dos sinais analógicos, no kit, é feita através do conector disposto horizontalmente, no alto da placa. O canal 1 corresponde à entrada EA1; o canal 2 à entrada EA2, e assim por diante. Analogamente ao display e ao teclado, o programa monitor do kit oferece uma sub-rotina para a conversão analógico-digital, apresentada a seguir. CONV_AD endereço parâmetro(s) DPTR 145Fh (endereço do canal de entrada do conversor AD) valor(es) de retorno registrador(es) alterado(s) ACC ACC (valor obtido pela conversão) funcionamento: Dispara a conversão analógico-digital do sinal analógico existente no canal de entrada endereçado pelo registrador DPTR, e, ao final da conversão, retorna o valor digital resultante no acumulador. Parte II – Roteiro Experimental Antes de ligar o kit, conecte a saída P4 à entrada EA1, ambos do conector horizontal superior (utilize uma chave de fenda para essa operação). A saída P4 é um sinal entre 0V e 5V, gerado pelo resistor variável (“trimpot”) P4, localizado à direita desse conector. Já a entrada EA1 dá acesso ao canal 1 do conversor AD. Carregue, então, na memória RAM externa, o programa da Tabela 2. Você tanto pode digitar o seu código de máquina, com o kit no modo teclado, ou editar o código-fonte no computador, fazer sua montagem, e transmitir o código de máquina obtido, serialmente. Note que as diretivas de montagem (“pseudo-instruções”), como explicado anteriormente, não geram código de máquina. pass o endereç o código de máquina rótulo $INCLUDE CLR_DSP AC_DSP DSP_COM CONV_AD EA1 1 2 3 4 5 6 7 8 9 10 5000 5003 5006 5008 500B 500D 5010 5013 5016 5019 75 12 74 12 74 12 90 12 12 02 81 10 0C 10 02 10 E0 14 10 50 mnemônico e operandos comentários registradores do 8051 (REG51.INT) endereço da sub-rotina CLR_DSP EQU 10AAh endereço da sub-rotina AC_DSP EQU 10E7h endereço da sub-rotina DSP_COM EQU 109Ah endereço da sub-rotina CONV_AD EQU 145Fh endereço do acesso ao canal 1 do conversor AD EQU 0E000h indica segmento de código CSEG endereço inicial do código ORG 5000h 2F MOV SP, #2Fh SP 2Fh AA LCALL CLR_DSP limpa o display MOV A, #0Ch desativa o cursor 9A LCALL DSP_COM REPETE: MOV A, #02h ??? 9A LCALL DSP_COM 00 MOV DPTR, #EA1 DPTR aponta canal 1 do conversor AD 5F LCALL CONV_AD faz a conversão AD E7 LCALL AC_DSP apresenta o resultado da conversão AD 0B LJMP REPETE volta para fazer nova conversão END fim do programa Tabela 2 – Programa que utiliza o conversor analógico-digital MM – Microprocessadores e Microcontroladores – Roteiro da Experiência 14 Execute o programa, a partir do endereço 5000h. Com uma pequena chave de fenda, altere a posição do “trimpot” P4, até que a tensão por ele gerada seja de 0V (verifique isso com um multímetro). Nessas condições, o valor fornecido pelo display é de ______. Qual seria o valor esperado? ______. Repita o procedimento anterior, agora para obter 5V na saída do “trimpot” P4, situação em que o display indica o valor ______, enquanto o valor esperado seria ______. Como o conversor AD é de 8 bits, ele pode gerar valores entre 0 e ______. Isso significa que, para mudar 1 bit no valor digital gerado pelo conversor AD, é preciso haver, no sinal analógico, um incremento de: 5V 255 que resulta em ______V. Portanto, calcule: a) o valor que deve ser apresentado no display, quando a tensão for de 2,5V: ______ b) o valor que deve ter a tensão, quando o display apresenta o valor 50: ______ Verifique se seus cálculos estão corretos, alterando a posição do “trimpot” P4. É possível que o conversor esteja descalibrado; se julgar que é o caso do seu kit, observe o procedimento de calibração apresentado na página 2-6 do Manual de Manutenção do kit SDM9431. EXPERIÊNCIA 14 – QUESTÕES ADICIONAIS 1) Para que servem os passos 5 e 6 do programa? O que aconteceria se esses passos fossem excluídos do programa? 2) O que precisaria ser alterado no programa, se o sinal P4 fosse conectado à entrada EA4, em vez de à entrada EA1? 3) No passo 1, o “stack pointer” (ponteiro da pilha) é iniciado com o valor 2Fh. Altere o mnemônico dessa instrução, sem causar alteração no código de máquina, utilizando um “símbolo” que substitua o valor 2Fh. Indique, também, a “pseudo-instrução” que precisa ser acrescida neste caso, no início do programa. Responda, também: qual a vantagem do uso do símbolo? 4) Suponha um sinal analógico que varie entre 0V e 5V. Escreva e teste no kit um programa que verifica se esse sinal está na faixa entre 2V e 4V. Se estiver abaixo de 2V, devem ser acesos apenas os leds de 0 a 3. Se estiver acima de 4V, devem ser acesos apenas os leds de 4 a 7. Se o sinal estiver na faixa prevista, todos os leds devem ser apagados.