COUNTER ACIONADO PELO SWITCH

Software e Hardware para uC PSoC

Moderadores: andre_luis, 51

COUNTER ACIONADO PELO SWITCH

Mensagempor mafego » 14 Set 2007 12:39

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?
mafego
Bit
 
Mensagens: 6
Registrado em: 04 Set 2007 20:47

Re: COUNTER ACIONADO PELO SWITCH

Mensagempor Rodrigo_P_A » 14 Set 2007 13:06

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
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: COUNTER ACIONADO PELO SWITCH

Mensagempor mafego » 14 Set 2007 13:28

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!
mafego
Bit
 
Mensagens: 6
Registrado em: 04 Set 2007 20:47

Re: COUNTER ACIONADO PELO SWITCH

Mensagempor andre_luis » 14 Set 2007 16:12

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...

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: COUNTER ACIONADO PELO SWITCH

Mensagempor mafego » 14 Set 2007 16:59

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...
mafego
Bit
 
Mensagens: 6
Registrado em: 04 Set 2007 20:47

Mensagempor Maurício » 14 Set 2007 21:31

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
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor mafego » 15 Set 2007 07:05

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
mafego
Bit
 
Mensagens: 6
Registrado em: 04 Set 2007 20:47

Mensagempor Maurício » 15 Set 2007 14:19

É 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
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor Ricardo_Franco » 18 Fev 2008 19:52

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
Ricardo Franco
____________________________________________________________________________________________
web: www.engricardofranco.kit.net
Skype: engricardofranco
Fone Skype: (19) 3119-8162
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP


Voltar para Cypress

Quem está online

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

x