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