Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

21/08/2012 #1


interrupcion RB0 por flanco descendente con 18f4520
No consigo que me funcione una simple interrupción RB0 con flanco descendente utilizando proton IDE en un 18f4520.
Se trata de un contador de vueltas de rueda que debe incrementar su valor cada vez de la puerta RB0 se cambia de 1 a 0 mediante un sensor inductivo.
el código (solo parte de interrupción) es el siguiente:

Código:
Device = 18F4520
XTAL = 20
Cls
REMINDERS = 1
ALL_DIGITAL=true
Symbol INTF   = INTCON.1         ' RB0 External Interrupt Flag
Symbol INTE   = INTCON.4         ' RB0 External Interrupt Enable
Symbol GIE    = INTCON.7         ' Global Interrupt Enable
Symbol INTEDG = INTCON2.4        ' Flag = 0 int. por flanco bajada. Flag = 1 int. por flanco subida.
GIE    = 1                       ' Activa interrupciones generales.
INTE   = 1                       ' Activa la interrupción externa RB0/INT.
INTEDG = 0                      ' Hace que inicialmente la interrupción se habilite por flanco de bajada
...

On_INTERRUPT GoTo Interrupcion 'IR A INTERRUPCION 
....
 inicio:
.....
goto inicio
.....
Interrupcion:                 '-------- Decodificador de Encoder --------------
Context SAVE              
          vueltas = vueltas+1
          vueltas2 = vueltas2 + 1 
INTF = 0                 .
Context Restore

El caso es que por cada paso del sensor me debería computar una sola vuelta. Sin embargo computa dos 2 vueltas ignorando la instrucción de flanco de bajada.


Me podría alguien orientar sobre cual puede ser el problema?
Muchas gracias de antemano.
21/08/2012 #2
Moderador

Avatar de D@rkbytes

juaki09 dijo: Ver Mensaje
No consigo que me funcione una simple interrupción RB0 con flanco descendente utilizando proton IDE en un 18f4520.

Me podría alguien orientar sobre cual puede ser el problema?
Muchas gracias de antemano.
Saludos juaki09
Adjunto un programa de ejemplo con interrupción en RB0 por flanco descendente a alta prioridad.

En la subrutina de interrupción podrás colocar tu programa.

Espero te sea de ayuda.

Suerte.
21/08/2012 #3


En la pregunta anterior olvidé decir que el diseño funciona perfectamente cuando hago la simulación en proteus. ¿Podrá tratarse de un problema en la configuración del winpic800 que utilizo para grabar el pic..? En este caso, ¿que puedo estar haciendo mal?

Gracias de nuevo.

---------- Actualizado después de 5 minutos ----------

Muchas gracias D@rkbytes. Voy a probar con los fuses de tu programa de ejemplo.
Ya te diré como me fué. Saludos.
21/08/2012 #4
Moderador

Avatar de D@rkbytes

juaki09 dijo: Ver Mensaje
En la pregunta anterior olvidé decir que el diseño funciona perfectamente cuando hago la simulación en proteus. ¿Podrá tratarse de un problema en la configuración del winpic800 que utilizo para grabar el pic..? En este caso, ¿que puedo estar haciendo mal?

Gracias de nuevo.

---------- Actualizado después de 5 minutos ----------

Muchas gracias D@rkbytes. Voy a probar con los fuses de tu programa de ejemplo.
Ya te diré como me fué. Saludos.
Exactamente. Prueba con los fuses que programe y nos cuentas.
21/08/2012 #5


Ya probé con los nuevos fuses y todo sigue igual. ¿Que mas puedo hacer?
Gracias.
21/08/2012 #6
Moderador

Avatar de D@rkbytes

juaki09 dijo: Ver Mensaje
Ya probé con los nuevos fuses y todo sigue igual. ¿Que mas puedo hacer?
Gracias.
Sube un esquema de como tienes realmente conectado el PIC
Posiblemente algo este mal en el hardware.
21/08/2012 #7


Este es el esquemita.
EN proteus la interrupción por RB0 la hago con un simple pulsador y funciona correctamente en flanco de bajada. En la placa, sin embargo, en lugar del interruptor dispongo de un sensor inductivo tal como lo he dibujado en rojo.

Este tipo de sensor, conectado de esta forma, los he venido utilizando con PIC 16f84a y 16F677 y me han funcionado correctamente.

Muchas Gracias de nuevo.
Archivos Adjuntos
Tipo de Archivo: pdf esquema.pdf (312,9 KB (Kilobytes), 30 visitas)
21/08/2012 #8
Moderador

Avatar de D@rkbytes

OK.
Veamos ahora. Omite el All_Digital = On
Porque puede que no esté haciendo bien su trabajo en este PIC.
Así que en vez de esta instrucción, utiliza...
ADCON1 = 7
En la configuración de fuses, se inicializo al PIC con los conversores AD en OFF al resetearlo. (PBADEN_OFF)
Pero solo lo hará al momento de inicializar o resetear el PIC.

Prueba ahora haciendo ese cambio.

Suerte.
21/08/2012 #9


Ok. Lo haré como me dices . Y ya mañana te diré como me fue. Gracias.
21/08/2012 #10

Avatar de luisgorris

Hola!
no creo que sea buena idea programar la entrada como analogica ya que tu quieres que sea digital. En basic no lo se, pero en C existe una instruccion para decidir si la interrupcion es en flanco de bajada o subida.

Por otro lado, no entiendo la resistencia de 330ohm a gnd. si tu detector entrega un nivel alto con relacion a gnd al activarse...quita esta resistencia y pon la de 47k a gnd.

suerte!!!!
21/08/2012 #11
Moderador

Avatar de D@rkbytes

luisgorris dijo: Ver Mensaje
Hola!
no creo que sea buena idea programar la entrada como analogica ya que tu quieres que sea digital. En basic no lo se, pero en C existe una instruccion para decidir si la interrupcion es en flanco de bajada o subida.

Por otro lado, no entiendo la resistencia de 330ohm a gnd. si tu detector entrega un nivel alto con relacion a gnd al activarse...quita esta resistencia y pon la de 47k a gnd.

suerte!!!!
De eso se trata precisamente luisgorris. De tener el puerto B como digital.
ADCON1 = 7 hace el puerto B digital I/O
La configuración de interrupción por flanco de bajada se realizo directamente sobre el registro INTCON2
Y lo de la resistencia de 330Ω tampoco me agrado.
22/08/2012 #12


Gracias Luisgorris por tu participacion. El sensor inductivo está ya montado en placa y funciona bien con la resistencia de 330 ohmios. Lo que realmente sobra y no he puesto es el pullup de 4k7. Cuando el sensor se activa la tensión en RB0 pasa de 4,6 V a 0,2V. por lo que pienso que éste (el sensor) no debe ser el problema.

En cuanto a tus indicaciones, D@rkbytes, he hecho los cambios que me dijiste y la interrupcion sigue sin funcionar por flanco de bajada.

Hay algo que quiero apuntar por si pudiese dar luz a la solución del problema: Para que la simulación en proteus funcione bien con el programa ejemplo que me dejaste, he tenido que introducir la instrucción "Context Restore" justo antes de "Resume". Sin ella justo al producirse la interrupción el sistema se cuelga.

Gracias a ambos.
22/08/2012 #13
Moderador

Avatar de D@rkbytes

juaki09 dijo: Ver Mensaje
Hay algo que quiero apuntar por si pudiese dar luz a la solución del problema: Para que la simulación en proteus funcione bien con el programa ejemplo que me dejaste, he tenido que introducir la instrucción "Context Restore" justo antes de "Resume". Sin ella justo al producirse la interrupción el sistema se cuelga.
OK. Veamos ahora.
Adjunto el mismo ejemplo, pero agregando algunas instrucciones más, para el control de la interrupción.
La verdad que ya no se me ocurre que pueda estar pasando.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar Interrupción por RB0(2).rar (26,5 KB (Kilobytes), 70 visitas)
24/08/2012 #14


gracias por tu ayuda. el codigo que me enviaste me d con oa error. debe ser por la version que tengo de proton ide. lo intentare con otro pic.
24/10/2012 #15


Saludos,

Veo que abrieron este tema con respecto a las interrupciones, me gustaría saber si pueden ayudarme con la interrupción por el puerto b (b4-b7) del pic16f877A en basic, hasta ahora no la he podido hacer funcionar y sé que debe ser un detalle menor, me he basado en varios ejemplos pero no lo he logra, estaré muy agradecido si una mano amiga me da un empujón con este problema, utilizo el basic pro y el proton. Gracias a mil!!!
Archivos Adjuntos
Tipo de Archivo: rar INTERRUPCION POR B4-B7.rar (52,9 KB (Kilobytes), 17 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.