Página 1 de 1
COUNTER ACIONADO PELO SWITCH

Enviado:
14 Set 2007 12:39
por mafego
Tenho uma placa PSCOEVAL1. Tenho feito meus treinamentos sobre este maravilhoso chip. Atualmente estou estudanto os contadores e tenho o seguinte programa:
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include "stdlib.h"
char buff[10];
void main()
{
M8C_EnableGInt;
Counter8_1_Start();
LCD_1_Start();
LCD_1_Init();
M8C_EnableIntMask(INT_MSK0, INT_MSK0_GPIO);
LCD_1_PrCString("QuadPhase Test");
while(1)
{
BYTE valor;
valor=Counter8_1_bReadCounter();
itoa(buff,valor,10); // convert int to strig
LCD_1_Position(1,0);
LCD_1_PrString(buff);
}
}
Para decrementar o counter e aparecer o resultado no LCD eu pressiono um switch, mas está muito sensível. Ao ativá-lo ele decrementa várias unidades de uma vez só. Como faço para resolver o problema para decrementar apenas uma unidade de cada vez que for pressionado, alguém tem um exemplo?
Re: COUNTER ACIONADO PELO SWITCH

Enviado:
14 Set 2007 13:06
por Rodrigo_P_A
colocar um filtro na chave, capacitor + resistor.
mas para contar pulsos de chave eu não usaria HW , eu faria por soft mesmo e faria debouncing
Re: COUNTER ACIONADO PELO SWITCH

Enviado:
14 Set 2007 13:28
por mafego
Rodrigo_P_A escreveu:colocar um filtro na chave, capacitor + resistor.
mas para contar pulsos de chave eu não usaria HW , eu faria por soft mesmo e faria debouncing
Grande Rodrigo.
Alguém já havia falado em um filtro no programa em "C", pois seria mais usual. Gostaria de um código de exemplo. Mas aproveitando sua idagação sobre o uso do capacitore + resistor, como seria esse seu filtro para diminuir a sensibilidade da chave? Qual os valores dos componentes e o esquema de ligação deles?
Valeu!
Re: COUNTER ACIONADO PELO SWITCH

Enviado:
14 Set 2007 16:12
por andre_luis
mafego,
O ideal seria voce usar um timer de HW para controlar o tempo de debounce, mas creio que para voce - que está iniciando agora no PsOC - isso ficaria um pouco complicado. Por ora, implementa um delay em loop-fechado, que resolve; depois faz como sugeri acima.
Me parece que a rotina de interrupção do contador está faltando...
+++
Re: COUNTER ACIONADO PELO SWITCH

Enviado:
14 Set 2007 16:59
por mafego
andre_teprom escreveu:mafego,
O ideal seria voce usar um timer de HW para controlar o tempo de debounce, mas creio que para voce - que está iniciando agora no PsOC - isso ficaria um pouco complicado. Por ora, implementa um delay em loop-fechado, que resolve; depois faz como sugeri acima.
Me parece que a rotina de interrupção do contador está faltando...
+++
O contador é do tipo 8 bits e a porta ENABLE (contador) está em high e o CLOCK está ligado ao pin 1.0 que por sua vez está ligado a um SW. Quando pressiono a tecla ele decrementa a contagem que é atribuída a variavel VALOR que é mostrada no LCD. Inicialmente é mostrado o valor 255 e ao apertar o SW ele segue diminuindo em passos inconstantes...funciona mesmo, mas gostaria que o decremento fosse unitário para cada vez q acionasse a tecla...

Enviado:
14 Set 2007 21:31
por Maurício
Vc pode fazer como na dica do André.
Faça um timer gerar uma interrupção a cada 100ms, por exemplo.
Nessa interrupção, sinalize um flag e no main, se este flag estiver acionado, então vc verifica se alguma tecla foi pressionada e processa a tecla.
Se for rápido ou longo demais, vc aumenta ou diminui o tempo.
Não esquece de apagar o flag depois de tratar a tecla, ehehehehehehe
[]'s

Enviado:
15 Set 2007 07:05
por mafego
Maurício escreveu:Vc pode fazer como na dica do André.
Faça um timer gerar uma interrupção a cada 100ms, por exemplo.
Nessa interrupção, sinalize um flag e no main, se este flag estiver acionado, então vc verifica se alguma tecla foi pressionada e processa a tecla.
Se for rápido ou longo demais, vc aumenta ou diminui o tempo.
Não esquece de apagar o flag depois de tratar a tecla, ehehehehehehe
[]'s
Maurício, escreve o código de exemplo para mim. Ficaria mais fácil.
Agradeço sua presteza.
Mafego

Enviado:
15 Set 2007 14:19
por Maurício
É mais ou menos isso, porque eu não conheço o Psoc:
- Código: Selecionar todos
#include <maquina.h>
bit ler_teclado = 0;
// Interrupções a cada 10ms
void TIMER_X ( void ) interrupt
{
static char contador = 0;
if ( ++contador == 10 ) // 10x10ms=100ms
{
contador = 0;
ler_teclado = 1;
}
}
void varrer_teclado ( void )
{
if ( TECLA_MAIS ) processar_tecla_mais ( ); else
if ( TECLA_MENOS ) processar_tecla_menos ( );
}
void main ( void )
{
while ( 1 )
{
if ( ler_teclado )
{
varrer_teclado ( );
ler_teclado = 0;
}
}
}
[]'s

Enviado:
18 Fev 2008 19:52
por Ricardo_Franco
Ola Senhores
Caro Mafego, Conseguiu resolver seu problema? vejo que tem uma parte do código faltando, pois você deve estar usando a interrupção de pino certo?
Está função não está disponivel em seu enunciado, se ainda tiver alguma dúvida entre em contato.
Ricardo Franco