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:

 setup_adc_ports(sAN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel (0);
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:

 // Tratamento do sensor
lido = read_adc(ADC_READ_ONLY );
read_adc (ADC_START_ONLY);
if (lido < 64)
lido = 1;
else if (lido > 192)
lido = 2;
else
lido = 0;
if ((lido != 0) && (lido != anterior))
{
anterior = lido;
output_high (LED);
cntLed = TEMPO_LED;
if (passo == 0)
{
cntb = cnta;
cnta = 0;
passo = 1;
}
else if (passo == 3)
{
cnta = 0;
passo = 0;
}
}

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

Nenhum comentário: