Arne
Basic 2k - Experiência 4.1 - Usando teclas com o Arne Basic 2k
A
proposta Nesta experiência vou demonstrar como utilizar teclas com o microcontrolador Embedded Arne Basic 2k. Nesta experiência vou explorar uma função bastante interessante do BASCOM, a função DEBOUNCE. Esta função analisa se um pino assume o estado esperado (0 ou 1 lógico), aguarda o tempo configurado para debounce e analisa o estado do pino novamente. Se o pino ainda estiver no mesmo estado aguarda o retorno ao estado inicial para evitar o repique da tecla. Após voltar ao estado inicial desvia para um label com o comando GOTO. Se o parâmetro SUB for inserido o desvio será feito com o comando GOSUB, e neste caso será necessário a inclusão do comando RETURN no final do label. O equivalente da função debounce seria:
if pinX.n = 0 then
Na figura abaixo você pode
ver o circuito
desta experiência. Basicamente utilizei para a mesma duas teclas, três
resistores e um LED. Ao se pressionar a tecla S1 o LED acende, e ao se
pressionar a tecla S2 o LED apaga.
Você pode ver o código fonte logo abaixo. Este programa é mais um excelente exemplo da estrutura da Linguagem de Programação BASIC utilizada pelo compilador BASCOM-AVR. Eu sei que esta ainda não é uma experiência "complexa", mas.... como diria o sr. Miagui - "Daniel San!!! Acabar pintar cerca lado de dentro e lado de fora!?! bom né... agora hora de lixar assoalho... Depois começar aprender karatê né!!!" ehehehehe Código fonte:_'******************************************************************************* '* Programa TESTE_TECLAS_ARNEBASIC2K.BAS '* Desenvolvido por Márcio José Soares '* para do Arne Basic 2k '* '* Obs.: Este programa foi desenvolvido para testar o uso de chaves '* com o Arne Basic 2k. Veja o circuito em www.arnerobotics.com.br '* '* A função debounce analisa se um pino assume o estado esperado, aguarda o tempo '* configurado para debounce e se o pino ainda está no mesmo estado aguarda retorno '* ao estado inicial evitando o repique da tecla. Após liberar desvia para um label '* com o comando goto. Se o parâmetro SUB for inserido o desvio será feito com o '* comando gosub, e neste caso é necessário a inclusão do comando RETURN no final do label. '* '* O equivalente da função debounce seria: '* if pinX.n = 0 then '* Waitms tempo de debounce '* while pinX.0 = 0 '* $asm '* nop; '* $end asm '* wend '* gosub label '* end if '* '* Você neste caso poderia usar um goto label sem nenhum problema ;-) '* '* Obs.: Lembre-se apenas de colocar um resistor de pull-up no pino que você '* ligar a chave para evitar danificar o pino de I/O do Arne Basic 2k!!!! '******************************************************************************* '******************************************************************************* 'Configs necessários ao microcontrolador $crystal = 10000000 $regfile = "attiny2313.dat" Config Portb = &B11101101 'todo portB é saída, exceto PB1 e PB4 Config Portd = &B11111110 'todo portD é saída, exceto PD0 Config Debounce = 30 'tempo para debounce das chaves = 30 ms '******************************************************************************* 'Liga pinos de I/O's a "nomes" mais fáceis ao entendimento humano ;-) Led Alias Portb.0 'pino de saída para led S1 Alias Pinb.1 'pino de entrada para chave 1 S2 Alias Pinb.4 'pino de entrada para chave 2 '******************************************************************************* 'Declaração das subrotinas Declare Sub Check_tec() '******************************************************************************* 'Início do programa Waitms 500 'aguarda 0,5 segundo '******************************************************************************* 'Laço principal... faz eternamente Do Call Check_tec() 'chama rotina para ver se tem tecla Loop '******************************************************************************* 'Subrotina para verificar se alguma tecla foi pressionada 'S1 acende LED 'S2 apaga LED Sub Check_tec() Debounce S1 , 0 , Sled , Sub 'desvia para SLED se zero Debounce S2 , 0 , Rled , Sub 'desvia para RLED se zero Goto Fim 'desvia para fim da subrotina 'Label para acender led Sled: Reset Led 'liga led - modo dreno!!! Return 'retorna para uma linha após função debounce 'Label para apagar led Rled: Set Led ' desliga led - modo dreno!!! Return 'retorna para uma linha após função debounce 'Label para sair da função Fim: End Sub End 'fim do program |
Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor. |