Escolar Documentos
Profissional Documentos
Cultura Documentos
Neste artigo nós vamos aprender a medir e controlar tempo usando o BASIC Step M8.
Você deve ter compreendido o material das partes 1 e 2, se ainda não leu, faça isto antes de
prosseguir.
Controle de Temporização
O primeiro comando que iremos usar neste programa é o PAUSE. Este comando permite
parar a execução do programa por um tempo determinado. Para especificar o tempo,
coloque o tempo desejado, em milisegundos, após a palavra PAUSE. Por exemplo se
quisermos fazer o LED piscar uma vez por segundo, ele deverá estar ½ segundo ligado e ½
segundo desligado. Para fazer isto basta ligá-lo ou desligá-lo e então parar o programa por
500 milisegundos. Isto é feito com o comando:
PAUSE 500
O comando PAUSE permite uma grande variação de tempo. Você pode especificar um
tempo tão pequeno quanto 10 microsegundos (PAUSE 0.01) e tão grande quanto 8
segundos (PAUSE 8000)
Um outro comando muito útil é o TOGGLE. Este comando simplesmente muda o estado de
um único pino de saída.
Então aqui está o programa para piscar um LED colocado na porta B,4 uma vez por
segundo.
MAKEOUT B,4
DO
TOGGLE B,4
PAUSE 500
LOOP
Você pode digitar, compilar e testar este programa. Depois mude-o para fazer alguma coisa
diferente.
Medição de Tempo
Em nosso próximo programa iremos medir o período da freqüência entrando pelo pino D,0.
Para fazer isto nós iremos esperar até que o sinal vá para nível alto. Assim que detectarmos
esta mudança, iremos ler o valor do contador, retorná-lo a zero e esperar pela próxima
mudança no pino de entrada.
Vamos assumir que desejamos medir uma freqüência a partir de 40 Hz. O contador pode
ser incrementado a freqüência de operação do processador dividida por 1, 8, 64, 256 ou
1024.
O TIMER0 é um contador de 8 bits, então ele conta de 0 a 255. Então a freqüência que ele
chega ao seu limite é 256 vezes menor que o seu clock. Vamos calcular a freqüência de
estouro para cada valor de divisão.
Como nós queremos medir uma freqüência a partir de 40 Hz, precisamos usar um valor de
divisor que não de estouro para esta freqüência, então vamos usar um divisor de 1024.
Apenas pro diversão, após medir a freqüência nós vamos escrever o número (o período do
sinal) na porta B para poder ser visualizado nos LEDs. Você pode ligar um gerador de
sinais na entrada e ver que quando a freqüência muda, os LEDs também mudam.
DIRPORT D,IN
DIRPORT B,OUT
INBIT last,D,0
periodo = &HFF
DO
OUTPORT B,periodo
INBIT temp,D,0
IF last = 0 THEN
IF temp | 0 THEN
‘… aqui é onde lemos o valor do contador
TIMER0 READ periodo
‘… e aqui o zeramos para a próxima leitura
TIMER0 ON 1024
END IF
END IF
last = temp
LOOP
Periodo = &HFF
Ok, nós medimos o período de uma entrada mas como poderíamos medir mais de uma
entrada ao mesmo tempo? Existe uma maneira e é apenas um pouco mais complicada que o
exemplo anterior.
O que nós vamos fazer é deixar o contador incrementar livremente. A cada vez que
detectarmos a mudança desejada no sinal de entrada nós simplesmente lemos o valor to
contador. O período do sinal é a diferença entre a leitura atual e a anterior. Este tipo de
operação matemática precisa de uma explicação.
03 – 254 = 5
Esta equação é verdadeira para a aritmética com bytes pois haverá um estouro de
capacidade e um bit de carry será setado, mas o resultado será 5. Vendo em representação
binária teremos
00000011
- 11111110
00000101
Então vemos que subtraindo leituras sucessivas sempre teremos uma resposta correta, desde
que o período de entrada seja menor que o período de estouro do contador.
Vamos assumir novamente que os nossos sinais de entrada não serão menores que 40 Hz.
Nós configuraremos o contador para incrementar livremente e apenas iremos esperar que os
sinais de entrada mudem e estado. Ë o que faremos no programa a seguir. Os valores dos
períodos dos dois sinais serão armazenados em per0 e per1 mas não serão mostrados nas
portas.
DIRPORT D,IN
TIMER0 ON 1024
per0 = &HFF ‘…contador do período para D,0
per1 = &HFF ‘…contador do período para D,1
DO
‘…faz a medição em D,0
INBIT tempd0,D,0
IF last0 = 0 THEN
IF tempd0 | 0 THEN
TIMER0 READ temp
per0 = temp – temp0
temp0 = temp
END IF
END IF
last0 = tempd0
Você deve copiar este programa, compilar e testar. Não há como testar do modo que ele
está pois não indica os períodos. Tente modificar para indicar o período na porta B. Quando
estiver funcionando, tente alterar para mostrar per0 ou per1 dependendo do estado de um
botão em D,2. Outra idéia é comparar per0 com per1 e ligar ou desligar um LED
dependendo de quem for maior.
No próximo artigo continuaremos a aprender sobre o BASIC Step M8. Nós iremos usar o
conversor A/D e a UART.