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:
Postar um comentário