Resolvido...Tempo ideal para botão pressionado

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Resolvido...Tempo ideal para botão pressionado

Mensagempor Francys Reymer » 13 Out 2010 23:43

Olá pessoal, estou fazendo um projeto com o pic16f877a, e estou com uma dúvida tipo:

eu chamo uma rotina que testa se um botão está pressionado e é só isso!
e to utilizando um cristal de 8 Mhz e com assembly puro.

aqui está a rotina:

Código: Selecionar todos
LOOP3_READ_MEMORY;
   BTFSC   BUTTON2;
   GOTO   TEST_BUTTON3;
   GOTO   READ_MEMORY_LEFT;
TEST_BUTTON3;
   BTFSC   BUTTON3;
   GOTO   LOOP2_READ_MEMORY;
   GOTO   READ_MEMORY_RIGHT;


as rotinas READ_MEMORY_LEFT; e READ_MEMORY_RIGHT; são rotinas para ler dados numa memória SRAM e mostrar em um display 128x64 ks108 e é ai q surge minha dúvida, tenho q fazer um timer para dar um atraso prq senão eu seguro o botão e a rotina será tão rápida q seria como se eu ainda tivesse com o dedo no botão (fazendo com q escape da minha rotina), q tempo devo utilizar, em ms ou em segundos? alguém tem alguma idéia d qual seria o tempo ideal e se é só com timer mesmo?
Editado pela última vez por Francys Reymer em 14 Out 2010 14:28, em um total de 1 vez.
Avatar do usuário
Francys Reymer
Byte
 
Mensagens: 102
Registrado em: 10 Dez 2009 15:21

Mensagempor _blackmore_ » 14 Out 2010 00:32

bom .. pelo q entendo, em qualquer leitura de chaves é necessário fazer um filtro digital (debounce) que nada mais é que ler o estado de um pino e aguardar alguns milisegundos e depois ler novamente o mesmo pino, caso o estado ainda seja o mesmo executa uma rotina determinada, caso o estado do pino não se confirme nada acontece.
Esse tempo pode variar, mas eu tenho utilizado valores de 50 a 100ms e nunca tive problemas.
Ouça mais classic rock
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor Francys Reymer » 14 Out 2010 00:37

_blackmore_ escreveu:bom .. pelo q entendo, em qualquer leitura de chaves é necessário fazer um filtro digital (debounce) que nada mais é que ler o estado de um pino e aguardar alguns milisegundos e depois ler novamente o mesmo pino, caso o estado ainda seja o mesmo executa uma rotina determinada, caso o estado do pino não se confirme nada acontece.
Esse tempo pode variar, mas eu tenho utilizado valores de 50 a 100ms e nunca tive problemas.


no meu caso estou utilizando uma chave tactil. Segundo o meu professor o pic já trata a trepidação da chave (debounce), mas não é essa minha duvida não. Após pressionar um botão quanto tempo deve esperar pra q de tempo de eu soltar o botão?
Avatar do usuário
Francys Reymer
Byte
 
Mensagens: 102
Registrado em: 10 Dez 2009 15:21

Mensagempor _blackmore_ » 14 Out 2010 00:48

justamente ... veja que o debounce nada mais é do que o tempo que uma chave tem q ficar pressionada para que o microcontrolador identifique seu estado sem que ocorram falhas ...
Agora isso que seu professor disse, não faz sentido para mim ... se não vc não precisaria além do debounce ainda esperar mais um tempo ... até pq o microcontrolador seja ele qual for, não "sabe" o que é uma chave, ou um sinal vindo de transistor (sinal alto e sinal baixo) em porta digital ...
Ouça mais classic rock
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor Djalma Toledo Rodrigues » 14 Out 2010 09:44

Faça como no PC

As Teclas tem Códigos diferentes para pressionada e solta.
(É issso que permite a repetição)

Então em seu caso fica assim :

Deteta Botão pressionado

mas, só atua ao solta-lo

Abraço e bom Botão rs

DJ
Editado pela última vez por Djalma Toledo Rodrigues em 14 Out 2010 19:16, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Francys Reymer » 14 Out 2010 14:27

sim pessoal entendi, vou utilizar um esquema como máquina de estado para resolver isso, vlw ae
Avatar do usuário
Francys Reymer
Byte
 
Mensagens: 102
Registrado em: 10 Dez 2009 15:21

Mensagempor Guri » 15 Out 2010 19:41

Se ajudar aquí vai uma sugestão:

Nesse tipo de leitura de tecla à mesma só é liberada para nova leitura após você soltar a tecla e pressionar novamente (como o dijalma sugeriu).

Ler_botao_esquerdo:

Btfsc tact_esquerdo
goto Skip_esquerdo
Btfsc Flag_tact_esquerdo
Return
Bsf Flag_tact_esquerdo
; insirir aquí sua rotina sob essa tecla
Return

Skip_esquerdo:
Bcf Flag_tact_esquerdo
Return

Aquí vai uma sugestão para colocar um DELAY caso seja necessário:

Delay_tecla:
decfsz T_delay1, f
Return
decfsz T_delay2, f
Return
Movlw .xxx ; coloque o valor adquado ao clock do MCU
movwf T_delay1
return

Não se esqueça de carregar esses valores de DELAY na inicialização do MCU.
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x