TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: 2hansen2 en 18 de Mayo de 2006, 15:39:28

Título: sensor de toque con la entrada de RA4
Publicado por: 2hansen2 en 18 de Mayo de 2006, 15:39:28
Hola mi porblema es el siguiente, tengo un paper que dice lo siguiente:

El procedimiento electrónicoo de decodi cacion de la nota que sonara con una postura
o digitacion determinada, se basa en hacer
pasar una se~nal de frecuencia desde cada una de
las ocho lneas de un puerto de salida del microcontrolador
(Fig. 5, RB0 a RB7) a una lnea de
entrada que dispone de un disparador \Schmidt"
(Fig. 5, RA4). Este paso se realiza a traves de
una resistencia y un diodo que permite compartir
el puerto de entrada a los ocho de salida. Si
se coloca un dedo sobre uno de los ocho sensores
la se~nal emitida se desviara a masa con lo que
el disparador \Schmidt" no recibira dicha se~nal
y se podra determinar que el sensor esta accionado.
En caso contrario, al llegar la se~nal a disparador
se determina que aquel contacto no esta
accionado. Estos muestreos se hacen secuenciados
para cada uno de los sensores, de modo que
al terminar la serie tendremos informacion exacta
de como estan cada uno de los ocho dedos sobre
sus sensores respectivos.

La cuestión es no se como poder configurar el schmidt trigger, y que tipo de señal madar por el pin para poder captar si toco o no.

Título: Re: sensor de toque con la entrada de RA4
Publicado por: Chaly29 en 18 de Mayo de 2006, 16:10:27
Hola 2hansen2, el schmidt trigger no se configura, es un tipo de entrada que al seleccionar un PIN del PIC como entrada solo queda (si ese pin es schmidt trigger) seteado de esa manera, RA4 seteado como entrada es del tipo schmidt trigger.

Para poder date un consejo de como revisar los pulsadores deberias postear el esquema de como estan conectados.

Un saludo.

Atte. CARLOS.

Título: Re: sensor de toque con la entrada de RA4
Publicado por: 2hansen2 en 18 de Mayo de 2006, 17:06:10
Gracias!, aqui mando los esquemas:

El circuito electronico basico utiliza un microcontrolador
(Fig. 5) que enva secuencialmente a
traves de cada uno de los sensores tactiles (Fig. 6)
un tren de pulsos hacia un puerto de entrada ( RA4/RTCC), el cual recibe o no este tren dependiendo
de si un dedo esta o no sobre el sensor
respectivo

La cuestión es como seria el software? habria que mirar si llega la secuencia o no al pin de ra4? y porque ultiza el Ra4 por ser schmidt trigger?
Título: Re: sensor de toque con la entrada de RA4
Publicado por: Chaly29 en 18 de Mayo de 2006, 17:35:57
Hola 2hansen2, si los sensores tactiles son sencillos pulsadores lo que debes hacer es colocar todas las salidas del puerto B a cero, y solo de a una por ves colocarle un 1 si el pulsador esta oprimido ese 1 estara tambien en RA4, luego pasas al segundo pulsador, y de esta manera todos los pulsadores, entonces sabras que pulsador esta presionado o no.

Lo anterior solo funciona con pulsadores normales, pero tu circuito tiene pinta de que no usa pulsadores normales, por lo complicado que lo an hecho, si tu quieres usal solo pulsadores normales te puedo pasar un circuito que es mucho más simple.

Un saludo.

Atte. CARLOS.

 
Título: Re: sensor de toque con la entrada de RA4
Publicado por: 2hansen2 en 18 de Mayo de 2006, 19:23:24
No, creo que no me he explicado bien, aqui son sensores de toque, es decir que simplemente al rozar con el dedo la pletina de metal que trae en la imagen como sensor debe detectarse el que se haya tocado, la cuestión es que parece ser que derivas a masa la señal y por tanto eso se puede medir,
pero lo que me intriga es que señal debo mandar para que se vea bien? ahi dice un tren de pulsos, porque un tren de pulsos? como seria un esquema del software a usar?

el que he implementado yo que no funciona se basa en lo siguiente<:

1) mando un 1 por uno de los bit del puerto B

2) leo en RA4

3) mando un cero por el mismo bit

4) leo en ra4

5) comparo los valores leidos y si son iguales es que he tocadoç


Pero no funciona , yo no se si es porque considera simpre que no se modifica nada o no se, alguien me puede guiar porfavor?
Título: Re: sensor de toque con la entrada de RA4
Publicado por: MSK en 18 de Mayo de 2006, 21:16:02
Hola mira mi opinion seria la de usar el tmr0 para contar la frecuencia mandada por cada pin del portb, si la frecuencia medida en el contador no es la correcta es que tocaste el sensor produciendo ruido
Título: Re: sensor de toque con la entrada de RA4
Publicado por: Chaly29 en 18 de Mayo de 2006, 22:05:31
Hola 2hansen2, unas de las opciones de funcionamiento es la recomendada por el colega MSK, otra es la de estando todas las salidas de PORTB en bajo, se coloca una de ellas (la que se desea saber si el pulsador esta tocado) y se revisa la patilla RA4.

Pero de todas maneras ya te estoy recomendando el uso de algun tipo de pulsador de los que normalmente son usados para este fin, imaguinate que con un pulsador, algo sencillo, no es tan facil de usar por programa, con este invento que tu deseas hacer sera mucho más complicado e inseguro su funcionamiento.

Un saludo.

Atte. CARLOS.

Título: Re: sensor de toque con la entrada de RA4
Publicado por: 2hansen2 en 19 de Mayo de 2006, 06:44:01
Gracias Carlos pero no puedo usar un pulsador normal porque esto es para hacer un controlodaor MIDI como una flauta, entonces no debes tener que pulsar un boton sino cerrar el abujero de la flauta, la flauta en este caso tiene unas pestañitas que son las plaquitas de metal que trae es esquema , al simplemente posar el dedo sobre el abujero siun tener que hacer presión esto debe de detectarse.

La idea de MSK me parece buena, de hecho estube pensando en ella porque en el esquema utiliza el ra4, como se os ocurridria el esquema de software¿¿????

Seria algo asi??

1) Mando señal en frecuencia

2) comparo si llega

3) detecto

Pero como cual es vuestro consejo para mandar la señal de frecuencia? que señal podriais?
Graicas por adelantado
Título: Re: sensor de toque con la entrada de RA4
Publicado por: Chaly29 en 19 de Mayo de 2006, 08:59:27
Hola 2hansen2, deberias enviar una cantidad determinada y que conoscas de pulsos, en RA4 usas el contador, si la cantidad de pulsos que leyo el contador es la misma que enviaste entonces el pulsador no fue tocado.

Un saludo.

Atte. CARLOS.

Título: Re: sensor de toque con la entrada de RA4
Publicado por: jfh900 en 19 de Mayo de 2006, 09:05:09
Los pulsadores que utilizas son capacitivos, por lo que debes de enviar un tren de pulsos, por cada uno de los pulsadores, puedes probar a enviar 20 o 30 pulsos y mientras los estas enviando ver si hay señal en RA4, si no hay nivel alto, probar el siguiente pulsador y asi sucesivamente.

Un saludo.
Título: Re: sensor de toque con la entrada de RA4
Publicado por: Chaly29 en 19 de Mayo de 2006, 10:24:49
Hola jfh900, los pulsadores que esta queriendo usar el colega no son capacitivos, son por acción de la corriente estática, en realidad son solo una chapita con un cable, ni se lo puede llamar pulsadores.

Un saludo.

Atte. CARLOS.

Título: Re: sensor de toque con la entrada de RA4
Publicado por: MSK en 19 de Mayo de 2006, 12:29:41
Hola Carlos yo soy de Mar del plata Argentina un saludo, el sistema de toque que se muestra se podria implementar enviando 256 pulsos a 10khz o mas y si se genera la int de tmr0 en ese ultimo pulso no se toco, bueno es algo para probar no
Título: Re: sensor de toque con la entrada de RA4
Publicado por: 2hansen2 en 19 de Mayo de 2006, 15:28:55
Muchas gracias a todos, voy a probar a ver si funciona, cuando tenga resultados los pondré. A ver que pasa, graicas otra vez.
Título: Re: sensor de toque con la entrada de RA4
Publicado por: 2hansen2 en 20 de Mayo de 2006, 09:24:05
hOLA DE NUEVO, TENGO VARIAS INTRIGAS, jeje
 ave rsi podeis orientarme porfavor. Como se generan los pulsos a una frecuencai detemrinada???
por ejemplo --> 256 pulsos a 10khz o mas , ooo 30 40 pulsos
como puedo contar los pulsos que llegen a RA4?
Título: Re: sensor de toque con la entrada de RA4
Publicado por: Chaly29 en 20 de Mayo de 2006, 11:21:31
Hola 2hansen2, ¿tienes alguna experiencia en programacion de PIC?, si miras en el datasheet del PIC que bayas a usar veras que el pin RA4 esta conectado a un contador o timer que es un encargado de contar pulsos, para generar una frecuencia determinada lo primero que deves saber es el periodo de dicha señal 10KHz = 100 us, con los 100 us lo que debes conseguir es que esten en la mitas de ese tiempo en 1 y el resto en cero.

Un saludo

Atte. CARLOS.

 
Título: Re: sensor de toque con la entrada de RA4
Publicado por: 2hansen2 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.
Título: Re: sensor de toque con la entrada de RA4
Publicado por: MSK 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
Título: Re: sensor de toque con la entrada de RA4
Publicado por: 2hansen2 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;
   }
}