TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jask2007 en 02 de Abril de 2010, 14:10:11

Título: Problema al leer pulsos con PIC
Publicado por: jask2007 en 02 de Abril de 2010, 14:10:11
Que tal, estoy iniciando en el mundo de la programacion de micros (18F452 de microchip), programo en C. Pero he tenido problemas al hacer un programa que lea un "pulso" y aumente un contador. El pblema está en que si esta el uno sigue contando y solo deberia incrementar una sola ves hasta que vuelva a cambiar de estado. Espero que alguien me pueda ayudar.
Título: Re: Problema al leer pulsos con PIC
Publicado por: jhozate en 02 de Abril de 2010, 14:11:09
q compilador? postea el programa, asi es mas facil ver el fallo
Título: Re: Problema al leer pulsos con PIC
Publicado por: jask2007 en 02 de Abril de 2010, 14:21:20
El compilador es el CCS. Otra cosa los pulsos lo leo por un pin del micro (ejemplo A4 o B3), esto es que no sea por las interrupciones. Aqui el codigo:

while(true) {
            if(input(PIN_B4)) {// PIN_B4
               delay_us(1000);
               if(input(PIN_B4)) {// PIN_B4
                  output_C(k);;
                  while(input(PIN_B4));//PIN_B4
               }else{
                  output_C(k);;
               }
               cont++;
Título: Re: Problema al leer pulsos con PIC
Publicado por: AngelGris en 02 de Abril de 2010, 17:30:42
Tal vez hacer algo así.... no lo probé y hace rato que no uso CCS, pero la idea creo que se entiende

Código: C
  1. while (1)
  2. {
  3.     if (input(PIN_XX)) // el pin que quieras usar
  4.     {
  5.          delay_ms(10); // delay antirebote
  6.          if (input(PIN_XX)) // si aún sigue en 1, no fue un rebote.
  7.         {
  8.            cont++;
  9.            while (input(PIN_XX)); // ciclo cerrado hasta que se suelte el pulsador
  10.          }
  11.     }
  12. }
Título: Re: Problema al leer pulsos con PIC
Publicado por: jask2007 en 06 de Abril de 2010, 19:56:24
Gracias a los que se tomaron la molestia de leer y responder. Ya logré el objetivo.
Título: Re: Problema al leer pulsos con PIC
Publicado por: jask2007 en 19 de Abril de 2010, 01:45:29
Aqui otra ves molestando a los usuarios. HAber quien me puede ayudar a pasar este programa a mikro C, ya lo intenté y no salió. Esto es solo para aprender mikro C ya que habia utilizado solamente el pic c. Pero ahora tambien kisiera aprender en mikro C. Espero nuevamente sus respuestas
Título: Re: Problema al leer pulsos con PIC
Publicado por: celades en 14 de Septiembre de 2010, 12:50:38
HOLA.
acabo de inscribirme en los foros y ps si no es demasiado tarde kisiera darte una manito con tu migracion de codigo, la verdad es casi igual, varia muy poco el set de instrucciones. este es el programa:

unsigned k=0; //declaracion de k
trisb=0x10; //pin4 de portb como entrada
trisc=0x00; //todo el portc como salida
void main() {
while (1){
 if (portb.F4==1) // ejemplo: if (portb.F4==1) si pin 4 de portb es igual a 1...
                         // la letra F siempre va en mayusculas
  {
   delay_ms(10);     //esto es
   if (portx.Fx==1)  //antirrebote
   {
    portc=k;         //k es enviado por el puerto c
    k++;             //y aumenta para un proximo pulso
    delay_ms(200);   // delay opcional por si dejas presionado el pulsador, que se pueda ver el valor
   }
  }
 }
}
espero te haya sido claro, de ayuda y que no haya sido demasiado tarde jeje.
saludos
Título: Re: Problema al leer pulsos con PIC
Publicado por: korpaztk en 16 de Septiembre de 2010, 00:37:12
miraa yo hice un contador nose si es como vos lo estas haciendo pero adjunto uno.
yo en vez del if utilizaria el while con una bandera (flag), mira el ejemplo q hice yo en proteus y mplab,
espero poderte ayudar con mi idea

Título: Re: Problema al leer pulsos con PIC
Publicado por: flyingjoint en 20 de Septiembre de 2010, 16:34:00
Buen dia, soy bastante nuevo en la programacion de los pic's en C. Solo tengo una pregunta bastante básica pero me causa conflicto... A que se refiere cuando pones el while (1)?? es decir, es una expreción lógica pero que entrada me da este 1 o 0, de donde proviene que me dice si entra o no al while? Gracias.
Título: Re: Problema al leer pulsos con PIC
Publicado por: bmb en 20 de Septiembre de 2010, 17:29:51
Hola flyingjoint bienvenido al foro.  En el bucle: while(expresion) mientras que expresion sea verdadero, se repetirá la instrucción o bloque de código correspondiente.  Como ya sabes, una expresión verdadera se expresa como: TRUE ó 1 y una falsa como: FALSE ó 0.  Visto de esta manera, el bucle: while(1) se repetirá siempre ya que el 1 representa verdadero.

Saludos!