Autor Tema: interrupciones RB0 paranormales  (Leído 4384 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rafaromevi

  • PIC10
  • *
  • Mensajes: 8
interrupciones RB0 paranormales
« en: 01 de Febrero de 2006, 05:40:00 »
Intento leer interrupciones por RB0, usando este código sencillo:

#int_EXT
EXT_isr()
{
   printf("Nueva interrupcion"Giño;
   clear_interrupt(int_ext);
   delay_ms(1000);
}

En cuanto a Hardware, uso el PIC 16F877.

Aun con el pin RB0 al aire (sin conectar a nada) compruebo que simplemente acercando la mano al micro me saltan las interrupciones, es decir, parece como si detectara variaciones de intensidad (¿o son variaciones de tension lo que provoca el salto de la interrupcion?) muy muy pequeños. ¿Puede configurarse esta sensibilidad para que no salte con tanta facilidad? Me interesaría que saltara solo cuando se detectara en RB0 una tensión superior a 3.5 V. Además me interesaría que solo se activase la interrupcion en el flanco de subida.

Solo intento que funcione una prueba muy sencilla, conectando directamente los pines RD2 y RB0 de forma que al poner a nivel alto RD2 se activara una interrupción
pero no lo consigo,

¿que hago mal? ¿se me escapa algo?

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: interrupciones RB0 paranormales
« Respuesta #1 en: 01 de Febrero de 2006, 10:40:00 »
Hola rafaromevi, lo que esta censando el pin RB0 para producir la interrupción es electricidad estática, expresado en voltios, y no en amperios, o sea que lo que dispara la interrupción no es una intensidad sino que una tensión y no es pequeña ya que la entrada del RB0 es schmitt trigger, por lo tanto ya tienes la función que tu deseas de que se dispare por ej. con más de 3.5V.

Internamente el puerto B (solo el puerto B) posee unas resistencias de Pull-Up que sirven para conectar todos los pines que estén como entrada, al positivo de la alimentación, esta resistencia es de 10K y hace que si una entrada no esta conectada a una función determinada no genere una interrupción como en tu caso, por lo tanto si configuras la opción de habilitar las Pull-Up tu problema del acercamiento del dedo y el disparo de la interrupción se irá.

El pin RB0 funcionando como interrupción tiene la posibilidad de poder seleccionarse si el disparo es por flanco de subida o de bajada, esto se configura (al igual que las Pull-Up) en el registro OPTION.

Suerte

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado rafaromevi

  • PIC10
  • *
  • Mensajes: 8
RE: interrupciones RB0 paranormales
« Respuesta #2 en: 02 de Febrero de 2006, 01:21:00 »
Muchas gracias Charly99!

Ahora mismo voy a probar a configurar eso de las pullups, aunque aun tengo que investigar como se hace eso con CCS C.

En cuanto a la activación por flancos, en el caso de la interrupcion RB0 al parecer se configura con la instruccion:

ext_int_edge(0,L_TO_H);

o

ext_int_edge(0,H_TO_L);


Si alguien conoce la porción de código que hace el trabajo que estoy buscando (activar las pullups y las interrupciones por flanco de subida) agradecería que me lo hiciera saber.

Saludos!

Desconectado rafaromevi

  • PIC10
  • *
  • Mensajes: 8
RE: interrupciones RB0 paranormales
« Respuesta #3 en: 02 de Febrero de 2006, 01:53:00 »
Tengo otras dudas acerca de las interrupciones RB0.

1)¿Cual es el pin de referencia que utiliza el PIC para "medir" la tensión que hace saltar la interrupcion?

2)¿Como es posible que el simple acercamiento del dedo provoque esa tensión tan alta como la que dices que es necesaria para provocar la interrupción?

3) Si activo las pullups (ya he leido en el manual que se puede hacer con la instruccion port_b_pullups(TRUE); ) resulta que ahora para activar la interrupción tendría que poner a tierra el pin RB0, ¿no es así? ¿no podría provocar la activación de interrupción al cerrar un interruptor que vaya a 5 V en vez de a tierra? Esto es lo que estaba intentando en un principio con las pullups desactivadas, pero me daba el problema de las interrupciones "aleatorias" cuando el circuito se abría.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: interrupciones RB0 paranormales
« Respuesta #4 en: 02 de Febrero de 2006, 05:29:00 »
Hola rafaromevi, te iré respondiendo por partes:

1) El PIC no tiene un pin de referencia para comparar la tensión de interrupción con esta, como ya te e dicho anteriormente, la entrada de interrupción por RB0 es del tipo schmitt trigger, esto quiere decir que mientras la tensión sube si esta no supera por ejemplo los 3.5 V no lo toma como alto, una ves en alto si empieza a bajar sino baja de 0,8 V no lo toma como bajo, OK

2) Si tenemos en cuenta que el cuerpo humano, en un día seco, puede llagar a poseer una tensión de estática de asta 30000 V en sú cuerpo, no veo lo difícil de llegar a los 5V que son los necesarios para el disparo de una interrupción. Gracias a las protecciones que tienen en las entradas de los IC es que no los quemamos, pero antiguamente la familia de los CMOS era muy fácil quemarlos con solo tocarlos.

3)Como tu ya dices si activamos las Pull-Up deberemos enviar un bajo para disparar la interrupción, si esta se dispara por el flanco de bajada o de subida ira de acuerdo con el que hayamos seteado nosotros. Si activas las Pull-Up y le conectas un pulsador a +5V no conseguirás que se dispare ya que tu le envías 5V y el PIN ya los tiene. Para hacer eso tendrás que desactivar las Pull-Up, conectar una resistencia desde el pin RB0 a masa y hay si que con el pulsador activaremos la interrupción (pero esto no es recomendable, por el tema de interferencias).

Por otro lado el uso de un interruptor o un pulsador para conseguir la interrupción no es el adecuado, para esto deberías de poner un circuito anti-rebotes ya que los pulsadores por mas que tu veas que lo pulsas solo una ves ellos mandan varias señales y no solo una, por este motivo tendrás varias interrupciones, y de por acá puede llegar tú problema de las interrupciones aleatorias.

Lamentablemente con respecto a los codigos en C yo no te puedo ayudar ya que ese lenguaje no lo manejo, solo uso el .asm.

Espero te haya explicado bien, si no entiendes házmelo saber.

Atte. CARLOS



La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado bottar

  • PIC10
  • *
  • Mensajes: 6
RE: interrupciones RB0 paranormales
« Respuesta #5 en: 02 de Febrero de 2006, 17:49:00 »
Hola, no se si como dice Chaly29 la carga estática influya tanto, yo he usado RB0 pero para que no me diera problemas al producirse la interrupción la deshabilitaba, realizaba el servicio de la interrupción y luego la volvia ha habilitar sin ningun problema.

Aqui te pongo un ejemplo:
#int_EXT
EXT_isr(){


   disable_interrupts(int_EXT); //deshabilidatos la interrupcion
   //   Programa de servicio de interrupcion
   //      
   enable_interrupts(int_EXT); //habilidatos la interrupcion
}


void main( void )
{

   enable_interrupts(global);
   ext_int_edge (L_TO_H); //interrupcion externa al pasar de 1 a 0
   enable_interrupts(INT_EXT); //interrupcion externa RB0

   while(TRUE){  
   //aplicacion      
   }
}

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: interrupciones RB0 paranormales
« Respuesta #6 en: 02 de Febrero de 2006, 19:30:00 »
Hola bottar, no conozco a fondo el C, pero en el .asm al producirse la interrupción solas se deshabilitan, luego de cumplida con la rutina de la interrupción con el comando reftie, que es un tipo de return, las vuelves a activar.

Para comprobar la interferencia que genera una persona hazte un censillo circuito que por medio de una entrada analógica de un PIC te indique en unos display la tensión que se encuentra en esa entrada, luego me comentas.

Para sacar las conclusiones de lo anterior ten en cuenta que una entrada analógica posee mucha menor impedancia que una del tipo digital, por lo que a esta le influirá mucho más.

Es importante tener en cuenta las interferencias en el diseño de un circuito, ya que parasen no estar, pero son las principales causantes de fallos de los mismos.

Suerte.

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado bottar

  • PIC10
  • *
  • Mensajes: 6
RE: interrupciones RB0 paranormales
« Respuesta #7 en: 04 de Febrero de 2006, 06:23:00 »
Hola Chaly29, no tengo ni idea de programación en asm de microhip y llevo poco tiempo programando pic, por lo que comentas de que las interrupciones en asm se deshabilitan "solas" me ha extrañado un poco, hace tiempo programe el 6800 de motorola en asm y en este habia que deshabilitar la interrupción ya que si no esta interrumpia al micro constantemente y no lo dejaba ejecutar ni la rutina de interrupción, creia que en los pic sería de la misma manera Muchas risas.

Comentas que una entrada analógica es más sensible a interferencias que una digital, estoy completamente de acuerdo contigo, pero se supone que la entrada de interrupcion RB0 es digital ¿no?

Por eso para que una persona tenga una carga electrostática de manera que sea capaz de interfererir con la interrupción ¿no se estropearía el micro tambien? (estos son muy sensibles a estas cargas).

Perdona que te de "la brasa" con esto pero es un tema interesante para tenerlo en cuenta en diseños de circuitos y me gustaría tenerlo más o menos claro .Giño

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: interrupciones RB0 paranormales
« Respuesta #8 en: 08 de Febrero de 2006, 07:03:00 »
bueno, el procedimiento para activar esas interrupciones es la siguiente:

Codigo:

PIN---
        |
        |O  boton
        |
       0V



nos aseguramos de poner "port_b_pullups(true);" cuando empiece el programa...

... y pondremos ext_int_edge( H_TO_L );  de ese modo, cuando pulsemos el boton, saltará directamente la interrupcion. (siempre que este activada!)

No se si es este el tipo de aplicacion que quieres dar al RB0, pero bueno espero que te sirva de algo.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: interrupciones RB0 paranormales
« Respuesta #9 en: 08 de Febrero de 2006, 11:49:00 »
Hola bottar, as entendido las cosas un poco al revés, la entrada digital es más sensible que la analógica por su alta impedancia, la analógica es de baja impedancia. Y sí la entrada de la interrupción es del tipo digital.

Le electricidad estática no quema el PIC porque este posee protecciones para que no pase eso, pero estas protecciones no sirven para solucionar el problema de la interferencia.

Con respecto al esquema que a colocado el colegamanex_1987 no es muy recomendable ya que solo dispone de un pulsador y como ya comente en post anteriores produce rebotes que el PIC los interpreta como interrupciones, por lo tanto al circuito por el explicado hay que colocarle un anti-rebotes, para que la interrupción no se dispare mas de 1 ves por pulsada.

Con respecto a como se utilizan las interrupciones en el motorola no conozco, pero en los PIC no es necesario deshabilitarlas, aunque muchas veces por seguridad se lo haga.

Suerte

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.