Autor Tema: sensor de toque con la entrada de RA4  (Leído 6063 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado 2hansen2

  • PIC10
  • *
  • Mensajes: 9
    • www.enriqueav.es
Re: sensor de toque con la entrada de RA4
« Respuesta #15 en: 20 de Mayo de 2006, 16:08:42 »
Si, estoy familizarizado con el manejo y programacion de pics, pero la verdad es que la entrada ra4 como contador de pulsos nunca la habia utilizado, he desarrollado el siguiente codigo:

//Programa pra gaitaalternativo de toque

/*
a ver, secuencialemte:
1) tu envias un bit por el puerto B.
2) lees el puerto A.
3) Lo comparas con la lectura anterior del puerto A
4) si es el negado, es que ha llegado bien, si no lo es, es que ha pulsado

en cuanto detecta que una lectura del puerto A no es la negada de la anterior lectura....es que ha pulsado
*/

#include <16F877.h>
#device ADC=8

#use delay(clock=16000000)
#use rs232(baud=31250, xmit=PIN_C6, rcv=PIN_C7)
#fuses HS, NOLVP, NOWDT //, NOWDTE//, NOBODEN

#byte porta =0x05
#byte portb = 0x06
#byte portc = 0x07


int i;
int pulsos_tx=30;
int pulsos_rx;

void mira();
void envia_pulsos(int num);

void main(){
   set_tris_b(0x00);             /*PtoB salida*/
   set_tris_a(0b111011);          /*PtoA entrada  --> menos el a2*/
   setup_counters (RTCC_EXT_L_TO_H, RTCC_DIV_1);

while(1){

      enable_interrupts(INT_RTCC);
      enable_interrupts(GLOBAL);
      envia_pulsos(pulsos_tx);   
      pulsos_rx=get_timer0();

      if(pulsos_rx==pulsos_tx){
         output_bit(PIN_A2, 1);
         delay_ms(50);
         output_bit(PIN_A2, 0);
         delay_ms(50);
         output_bit(PIN_A2, 1);
      }   

   }//cierre del while
} // cierre del main

 void envia_pulsos(int num){
   int i=0;
   while(i<num){
      portb=0b10000000;
      delay_us(2);
      portb=0b00000000;
      delay_us(2);
      i+=1;
   }
}

Pero algo debe estar mal en las interrupciones porque da igual que le llegen los pulsos o no.

Desconectado MSK

  • PIC12
  • **
  • Mensajes: 53
Re: sensor de toque con la entrada de RA4
« Respuesta #16 en: 20 de Mayo de 2006, 18:40:53 »
Creo que tendrias que implementarlo en asembler, por ejemplo si en el ultimo bsf portb,x (el 256) se activa el tmr0if del intcon  la señal llego intacta

Desconectado 2hansen2

  • PIC10
  • *
  • Mensajes: 9
    • www.enriqueav.es
Re: sensor de toque con la entrada de RA4
« Respuesta #17 en: 20 de Mayo de 2006, 20:37:33 »
Solucionado , pongo el codigo:

//Programa pra gaitaalternativo de toque

/*
a ver, secuencialemte:
1) tu envias un bit por el puerto B.
2) lees el puerto A.
3) Lo comparas con la lectura anterior del puerto A
4) si es el negado, es que ha llegado bien, si no lo es, es que ha pulsado

en cuanto detecta que una lectura del puerto A no es la negada de la anterior lectura....es que ha pulsado
*/

#include <16F877.h>
#device ADC=8

#use delay(clock=16000000)
#use rs232(baud=31250, xmit=PIN_C6, rcv=PIN_C7)
#fuses HS, NOLVP, NOWDT //, NOWDTE//, NOBODEN

#byte porta =0x05
#byte portb = 0x06
#byte portc = 0x07


int i;
int pulsos_tx=100;
int pulsos_rx;
int count;
int margen=20;

void mira();
void envia_pulsos(int num);

#INT_Timer0
void DesbordeTimer0()
{

   //desborda cuando llegas todos los flancos
   Output_bit(PIN_B0,1);
}

void main(){
   set_tris_b(0x00);             /*PtoB salida*/
   set_tris_a(0b111011);          /*PtoA entrada  --> menos el a2*/
   setup_counters (RTCC_EXT_L_TO_H, RTCC_DIV_1);
   setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);

while(1){
      
      enable_interrupts(INT_RTCC);
      enable_interrupts(GLOBAL);
      set_RTCC(0);
      envia_pulsos(pulsos_tx);   
      pulsos_rx=get_RTCC();
      

      if(pulsos_rx<pulsos_tx-margen){      // HE PULSADO SE PIERDEN LOS PULSOS
         output_bit(PIN_A2, 1);
         delay_ms(50);
      }   
      output_bit(PIN_A2, 0);

   }//cierre del while
} // cierre del main

 void envia_pulsos(int num){
   int i=0;
   while(i<num){
      portb=0b10000000;
      delay_us(20);
      portb=0b00000000;
      delay_us(20);
      i+=1;
   }
}


 

anything