Página 1 de 1

Contador acionado pelo um switch

MensagemEnviado: 14 Set 2007 07:28
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?

MensagemEnviado: 14 Set 2007 09:25
por Iran
mafego,

Seja Bem Vindo. Geralmente isso ocorre devido ao rebote do push button que vc está usando, quando vc pressiona ele apenas uma vez são geradas várias transições que disparam vária interrupções e a contagem é inrementada várias vezes. Existem muitas soluções pra isso, por software o que faço gerammente é na rotina de atendimento da interrupção gerar um atraso pra o sinal se estabilizar e resetatar o flag de interrupção pendente ao final da rotina.

Só uma orientação, esse post deveria ser colocado no tópico PSOC e não aqui em HDL, VHDL.

Zé Iran.

MensagemEnviado: 14 Set 2007 13:38
por mafego
Iran escreveu:mafego,

Seja Bem Vindo. Geralmente isso ocorre devido ao rebote do push button que vc está usando, quando vc pressiona ele apenas uma vez são geradas várias transições que disparam vária interrupções e a contagem é inrementada várias vezes. Existem muitas soluções pra isso, por software o que faço gerammente é na rotina de atendimento da interrupção gerar um atraso pra o sinal se estabilizar e resetatar o flag de interrupção pendente ao final da rotina.

Só uma orientação, esse post deveria ser colocado no tópico PSOC e não aqui em HDL, VHDL.

Zé Iran.


Iran.

Realmente vc está certo foi um equivoco, não deveria está postado aqui. Mas como faço para resolver o meu problema de interrupção sucessivas via software?
Já postei minha dúvida corretamente no tópico PSOC. Escreve um exemplo de código.

Obrigado!

MensagemEnviado: 17 Nov 2007 02:05
por racerxdl
Não sei se te ajuda, mas da uma olhada aqui, tem um exemplo de como corrigir isso (só q em VHDL)

http://www.fpga4fun.com/Debouncer2.html