Autor Tema: error extraño con interrupciones  (Leído 2104 veces)

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

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
error extraño con interrupciones
« en: 15 de Febrero de 2005, 16:55:00 »
No se explicar exactamente que sucede, a ver si podeis medio saber el pq..

Un sensor me está tomando unas medidas, para hacer la conversión hasta obtener el resultado a mostrar no se hace uso de ninguna interrupción, no usa ningun port q tenga q ver con el problema, el caso esq el error se hace presente en el valor a mostrar de este sensor.

Tengo una interrupción INT_EXT, y esta llama a una función que hace uso del I2C para obtener unos valores (hora y fecha).

Si compilo el programa llamando a la funcion del I2C desde dentro del código de interrupcion, el sensor muestra un valor incorrecto, la primera medida es buena, las demas son todas erroneas...
Sin embargo si compilo el programa sin hacer la llamada a la función del I2C (dentro del código de la interrupción, si la coloco fuera no hay problema) entonces el sensor muestra los datos como debería, ya os digo que no hay ninguna relación ni directa ni indirecta entre el sensor y el I2C, usan puertos distintos, funciones y variables distintas, el caso esq por alguna razón el resultado es erroneo.

Además, en el momento del fallo tampoco estoy haciendo uso del código de la interrupción, es decir, aún no ha habido cambio en el PB0, pero el error está presente, como digo, siempre y cuando llame a esa función desde dentro del codigo de la interrupcion....

Es algun error del compilador? pq es otro fallo sin sentido :S .....

he repasado el código y está bien, una vez dentro d la interrupción no se vuelve a llamar a otra, estan todas las demas deshabilitadas, en fin, que no se me ocurre como solucionar este problema :S

Gracias y perdonad pero esq no se explicarlo mejor!! es muy raro....

Salu2!

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: error extraño con interrupciones
« Respuesta #1 en: 16 de Febrero de 2005, 15:08:00 »
Bufff es un tema complicado, se necesitaría tiempo para revisar el código... no sé... si has usado el código que te pasé del reloj (es el ds1307 no?) acuerdate de que antes de escribir via i2c, en el driver, estan las sentencias para deshabilitar las interrupciones, quizás se te haya olvidado quitar esas lineas y venga por ahí el problema.

De todos modos te recomendaría (si fuese posible) que sacaras los comandos de escritura/lectura del bus i2c de la interrupción, lo que te interesa de las interrupciones es ejecutarlas lo más rápido posible y volver al programa principal rapidamente, imaginate si te paras a inicializar el bus, escribir direccion, escribir comando, esperar respuesta, etc, etc.... te queda una interrupción pesada y lentisima...

Siento no poder ayudar mas....Un saludo y suerte.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: error extraño con interrupciones
« Respuesta #2 en: 16 de Febrero de 2005, 18:51:00 »
hola oshow, gracias por la respuesta Giño

Si las interrupciones estaban deshabilitadas, el problema esq una de las causas que provocan la interrupcion requerian a posteriori el uso del i2c por eso debia estar dentro, aunq bueno lo pude solucionar eliminando precisamente el uso de este, ya que al llamar a la interrupcion lo q se pretende es modificar la fecha y la hora, necesitaba leer las actuales, para modificarlas a partir de ellas, como tampoco era crítico el tiempo, es decir, no necesito ajustar los segundos, y si pillo al reloj en el momento del ajuste cambiando los minutos, pues bueno... seria el unico problema, q realmente no es tal, es algo mas bien purista jejejeje.

Pero si, tu por un lado y yo por otro hemos coincidido.

Gracias por la ayuda! Giño


pd: entonces intentando deducir el problema... q es el uso de un protocolo dentro de una interrupcion?? no debe/puede hacerse nunca?, o por el contrario es fallo del compilador? pq supongo q se podría dar el caso en q fuera necesario utilizarlo...
Lo unico q aun no tengo claro es el pq se modifican esos valores si en ese momento no estoy dentro d la interrupcion, ni la variable tiene nada q ver con el otro proceso, en fin, cosas raras....... :P

Salu2!

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: error extraño con interrupciones
« Respuesta #3 en: 17 de Febrero de 2005, 15:13:00 »
CCS + I2C + interrupciones =NocheNoche
es cierto, existen fallos cuando se usa el I2C hardware y una interrupcion de otro tipo... si pones un led parpadeando cada 100 ms con una int y en el main lees una eeprom (bastantes bytes para notarlo) la cadencia del parpadeo disminuye..
una solucion para solucionarlo seria manejar directamente el puerto I2C sin usar las funciones que trae CCS..

saludos

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: error extraño con interrupciones
« Respuesta #4 en: 17 de Febrero de 2005, 17:24:00 »
jejeje me lo imaginaba.... para mis adentros pienso... menos mal q no estoy pagando por el software jajajaj :p

Muchas Gracias por la respuesta Sonrisa

Salu2!