Relatório 7

Autor: Yuri Hayashi Isayama
Data: 28/06/2010

Aulas 13 e 14: Finalização da Interface Serial e Montagem do Amplificador para Microfone/Estudo do Conversor Analógico/Digital

Interface serial

Primeiramente, pode-se ver o esquemático corrigido correspondente à interface serial RS-232 abaixo.

/media/Attachments/courseEA079_1S2010/Eyur_7/esquematico.jpg

Figura 1: Esquemático da Interface Serial

Todos os capacitores presentes no esquemático apresentam capacitância de 1uF. Para testar o funcionamento da interface serial, foi escrito um programa que recebe um caractere oriundo do hyperterminal, através do conector DB9, e reenvia este dado de volta para o hyperterminal cinco vezes. O código implementado encontra-se abaixo.:

Void main (void){
Byte dado,erro;
For(;;){
Erro = 0;
    While (!erro){
    Erro = AS1_GetCharsInRxBuf;
    }
    Erro = AS1_RecvChar(&dado);
    Erro = AS1_SendChar(dado);
    Erro = AS1_SendChar(dado);
    Erro = AS1_SendChar(dado);
    Erro = AS1_SendChar(dado);
    Erro = AS1_SendChar(dado);
    }
}

O programa basicamente testa o bit RDRF do registrador de estado SCIS1 para verificar algum caractere foi recebido no buffer de Rx. Quando o registrador de dados do receptor encontra-se cheio, a flag RDRF é setada e o microcontrolador já pode acessar este registrador para tratar o dado recebido. Em seguida, a função RecvChar envia para uma variável escolhida pelo usuário o dado recebido. Neste programa, o dado não recebe nenhum tipo de tratamento e é reenviado para o hyperterminal através da função SendChar cinco vezes (por isso a repetição desta função 5 vezes). O funcionamento detalhado destas funções encontra-se no relatório do outro integrante da dupla (Giuliano Morelli).

Montagem do Amplificador para Microfone

Uma vez terminada a interface serial, foi realizada a montagem referente ao amplificador para microfone. O circuito implementado na montagem encontra-se abaixo.

/media/Attachments/courseEA079_1S2010/Eyur_7/amplificador.jpg

Figura 2: Circuito Referente ao Amplificador para Microfone

Conversor A/D

O conversor A/D foi inicializado a partir do Processor Expert. Além da inicialização, o Processor Expert pode gerar várias rotinas pré-definidas, dentre as quais duas são interessantes para a aplicação da digitalização de voz: AD1_Measure e AD1_GetValue16. Aqui será visto o funcionamento da função AD1_Measure (a outra função está detalhada no relatório do outro integrante da dupla).:

Byte AD1_Measure (bool WaitForResult){
    If(ModeFlg != STOP){
        Return ERR_BUSY;}
    ModeFlg = MEASURE;
    AD1_HWEnDi();
    If(WaitForResult){
        While(ModeFlg == MEASURE){}
    }
Return ERR_OK;
}

Dentro desta função ainda existe uma outra chamada AD1_HWEnDi, cujo código encontra-se abaixo.:

Void AD1_HWEnDi (void){
    If(ModeFlg){
        OutFlg = FALSE;
        ADSC1 = Channels; /*Channels corresponde ao valor 0x4B*/
    }
}

A função Measure apresenta um parâmetro do tipo booleano que indica se a rotina deve esperar até o final da medição ou não para retornar. A função pode retornar dois valores: erro ok – não ocorreu erro; erro busy – o dispositivo encontra-se em outro estado que não ‘stop’. O primeiro passo é testar a variável ModeFlg, declarada pelo próprio Processor Expert. Esta variável indica o estado do conversor, que pode ser um dos quatro a seguir:

  • 0 = STOP;
  • 1 = MEASURE (realizando medição);
  • 2 = CONTINOUS (modo contínuo);
  • 3 = SINGLE (estado simples);

Caso o conversor não esteja no estado STOP, a função AD1_Measure irá retornar um erro, indicando que não foi possível realizar a medição, uma vez que o conversor está ocupado com outra tarefa. Caso o estado seja STOP, a execução segue em frente. O modo do conversor é, então, alterado para MEASURE, visto que uma medição será realizada daqui em diante. É chamada a função AD1_HWEnDi. Esta função realiza: OutFlg recebe valor FALSE (não há valor de saída ainda) e o registrador de estado e controle 1 – ADCSC1—recebe o valor 0x4B, que corresponde a habilitar interrupção após o término da conversão A/D e estabelecer a recepção do sinal no canal AD11. Em seguida, a função verifica se ela deve esperar até a conversão ser finalizada. Em caso afirmativo, no momento em que a conversão termina, ocorre uma interrupção que faz ModeFlg = STOP e a execução sai do loop while(ModeFlg == MEASURE) e retorna o valor ERR_OK, indicando que a entrada analógica foi recebida. Caso não seja necessária a espera até o final da conversão, é retornado o valor ERR_OK, indicando que a entrada analógica foi recebida com sucesso.