sexta-feira, abril 29, 2011

Pequenos Imãs e Micro Controladores - Parte 10

Chegamos finalmente ao final da série de posts, vendo agora como adaptar o meu conta-giros para usar um sensor de efeito Hall com saída analógica. Como já vimos, este sensor apresenta na saída uma tensão proporcional à intensidade do campo magnético.

No lado do hardware, um pequeno contratempo: o pino que eu estava usando para conectar os sensores não suporta entrada analógica. O jeito foi conectar o sensor em um dos pinos onde eu normalmente conecto o programador, tomando o cuidado de não ligar os dois simultaneamente.


No lado do código, é preciso iniciar o conversor analógico digital:

  1. setup_adc_ports(sAN0);  
  2. setup_adc(ADC_CLOCK_INTERNAL);  
  3. set_adc_channel (0);  
  4. read_adc (ADC_START_ONLY);  

A conversão demora um certo tempo para ser feita. Por este motivo, na interrupção do timer eu leio o resultado da conversão anterior e disparo a próxima; a conversão é feita entre uma interrupção e outra. A lógica de tratamento do valor lido simula o que é feito internamente ao sensor de efeito Hall com saída digital: só consideramos uma detecção quando detectamos um polo diferente do anterior. No caso um polo corresponde a leituras baixo de 64 e o outro a leituras acima de 192:

  1. // Tratamento do sensor  
  2. lido = read_adc(ADC_READ_ONLY );  
  3. read_adc (ADC_START_ONLY);  
  4. if (lido < 64)  
  5.    lido = 1;  
  6. else if (lido > 192)  
  7.    lido = 2;  
  8. else  
  9.    lido = 0;  
  10. if ((lido != 0) && (lido != anterior))  
  11. {  
  12.    anterior = lido;  
  13.    output_high (LED);  
  14.    cntLed = TEMPO_LED;  
  15.    if (passo == 0)  
  16.    {  
  17.       cntb = cnta;  
  18.       cnta = 0;  
  19.       passo = 1;  
  20.    }  
  21.    else if (passo == 3)  
  22.    {  
  23.       cnta = 0;  
  24.       passo = 0;  
  25.    }  
  26. }  

Com isto chegamos ao fim (por enquanto) das nossas brincadeiras com imãs, sensores e microcontroladores.

Nenhum comentário: