Autor Tema: #int_ext funciona al revés..  (Leído 5278 veces)

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

Desconectado iNoXSteeL

  • PIC12
  • **
  • Mensajes: 75
    • La web de InoX
#int_ext funciona al revés..
« en: 03 de Enero de 2010, 12:08:12 »
Hola a todos,

resulta que probando en la protoboard, el pin b0 con un pulsador a Vcc y la correspondiente resistencia pull-down, según proteus funciona bien, y según como está configurado pues debería de funcionar así, recibiendo un pulso de Vcc entraría la interrupción... pero no, el pulsador hay que conectarlo a GND para que se produzca la interrupción, como es posible ??

Un saludo.

Código: C
  1. #include <16f876.h>
  2. #use delay(clock=4M)
  3. #use fast_io(b)
  4.  
  5. #fuses XT,NOPUT,NOPROTECT,NOWDT,NOLVP
  6.  
  7. #int_ext
  8. void intext()
  9.    {
  10.    a ++;
  11.    if (a==3) a=0;
  12.    }
  13.  
  14. void main()
  15.    {
  16.    set_tris_b(0b00000001);
  17.    output_b(0x00);
  18.    
  19.     enable_interrupts(INT_EXT);
  20.     ext_int_edge(L_TO_H);
  21.     enable_interrupts(GLOBAL);
  22.  ......
  23.  ......
  24.  
  25. }

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: #int_ext funciona al revés..
« Respuesta #1 en: 03 de Enero de 2010, 12:10:46 »
Podría haber algo raro en el diagrama, por favor ponlo para que lo veamos.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: #int_ext funciona al revés..
« Respuesta #2 en: 03 de Enero de 2010, 13:32:23 »
Si el pulsador lo estas conectando a Vcc ... pues debe pasar el estado a GND para luego volver a Vcc y ahi entra a la interrupcion ....   :?, con el esquema quedariamos mas claros

Saludos
El papel lo aguanta todo

Desconectado iNoXSteeL

  • PIC12
  • **
  • Mensajes: 75
    • La web de InoX
Re: #int_ext funciona al revés..
« Respuesta #3 en: 03 de Enero de 2010, 13:33:49 »
Pues es sencillo, ya que es para probar unos códigos antes de montar

Probé añadiendo port_b_pullups(FALSE); , pero igual.. en cambio en proteus así no va.


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: #int_ext funciona al revés..
« Respuesta #4 en: 03 de Enero de 2010, 13:50:06 »
Seguro que estás lanzando la interrupción en el flanco correcto, o sea, el ascendente. Lo que pasa es que los pulsadores tienen rebotes, y antes de establecer un 0 o un 1 estable pasan por un montón de ellos alternativos. Por eso, aunque creas que al pulsarlo estás provocando un flanco, en realidad hay varios de ellos.
Dices que en proteus no va, ¿pero no va tampoco al soltar el pulsador?

Desconectado iNoXSteeL

  • PIC12
  • **
  • Mensajes: 75
    • La web de InoX
Re: #int_ext funciona al revés..
« Respuesta #5 en: 03 de Enero de 2010, 13:58:35 »
Pues he puesto un delay de 60 ms antirrebotes en la interrupción, pero ni con esas, tengo que conectar Vcc a gnd y quitar la resistencia pulldown para que funcione.

En proteus funciona sin port_b_pullups(FALSE);, veo como incremento la variable al pulsar, pero al revés no. sin embargo físicamente no funciona de ninguna de las dos maneras.

así es como funciona físicamente...


Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: #int_ext funciona al revés..
« Respuesta #6 en: 03 de Enero de 2010, 14:18:23 »
La interrupción del puerto B0 se activa al ponerla a nivel bajo. Tienes que activar las resistencias internas o poner una resistencia externa de 10K y el pulsador conectarle a masa.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: #int_ext funciona al revés..
« Respuesta #7 en: 03 de Enero de 2010, 14:23:26 »
En proteus funciona sin port_b_pullups(FALSE);, veo como incremento la variable al pulsar, pero al revés no. sin embargo físicamente no funciona de ninguna de las dos maneras.

No tendria nada que ver las pull ups del puerto B en este modelo de PIC, porque sólo afectan a los pines [RB4-RB7]. RB0 no tiene pull up interna configurable.

así es como funciona físicamente...



Pues te falta una resistencia de pull up paralela a RB0 para que ese circuito sea correcto. Puede que funcione así pero lo seguro es que lo hagas como te digo.

La interrupción del puerto B0 se activa al ponerla a nivel bajo. Tienes que activar las resistencias internas o poner una resistencia externa de 10K y el pulsador conectarle a masa.

Un saludo

No necesariamente. La interrupción por cambio de flanco en RB0 es CONFIGURABLE. Puede configurarse para que ocurra tanto en un cambio de flanco ascendente o bien descendente.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: #int_ext funciona al revés..
« Respuesta #8 en: 03 de Enero de 2010, 14:31:48 »
iNoXSteeL deberías ponerle un retardo al pulsador del proteus y observar el estado de la bandera de interrupción en ese lapso.

También sirve sustituir el pulsador por un switche.


por cierto, ¿no hay que limpiar la bandera?

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: #int_ext funciona al revés..
« Respuesta #9 en: 03 de Enero de 2010, 14:54:35 »
Para este micro por lo menos, si tiene pull-up y creo, lo estoy diciendo de memoria, que el flanco es solamente configurable para los pines 4-7.



Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado iNoXSteeL

  • PIC12
  • **
  • Mensajes: 75
    • La web de InoX
Re: #int_ext funciona al revés..
« Respuesta #10 en: 03 de Enero de 2010, 15:07:36 »
Gracias a todos por vuestas aclaraciones, al final así es como funciona

jfh900 creo que tiene razón, ya que da igual como ponga ext_int_edge(L_TO_H) o ext_int_edge(H_TO_L) ya que funciona en el momento de apretar el pulsador, que es cuando pasa a nivel bajo.

Código: C
  1. #int_ext
  2. void intext()
  3.    {
  4.    delay_ms(60);
  5.    a ++;
  6.    if (a==3) a=0;
  7.    clear_interrupt(INT_EXT);
  8.    }

físicamente y en proteus así



gracias nuevamente, Salud!

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: #int_ext funciona al revés..
« Respuesta #11 en: 03 de Enero de 2010, 15:58:32 »
Para este micro por lo menos, si tiene pull-up y creo, lo estoy diciendo de memoria, que el flanco es solamente configurable para los pines 4-7.



Un saludo.

Ja ja!

No...todo al reves estas diciendo según "mi memoria". RB0 tiene flanco configurable. RB4-RB7 no tiene flanco configurable. Ya que he trabajado infinidad de veces con este uC, especialmente, y creo que se el datasheet de memoria. Como no quiero hablar de palabra, en 5 minutos miro el datasheet y te expongo si estoy en lo correcto o equivocado.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: #int_ext funciona al revés..
« Respuesta #12 en: 03 de Enero de 2010, 16:02:49 »
Ok. Confirmado. Todos los pines del PORTB tienen pull up interna. Mi error.


Veo lo otro...
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: #int_ext funciona al revés..
« Respuesta #13 en: 03 de Enero de 2010, 16:08:52 »
El pin RB0 posee flanco configurable:


mientras que los pines [RB4-RB7] no:

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: #int_ext funciona al revés..
« Respuesta #14 en: 05 de Enero de 2010, 13:15:51 »
Es mejor que configures cuando debe de ocurrir la interrupcion y evita poner delays en estas.

Salu2.