Autor Tema: Problemas con las interrupciones  (Leído 4269 veces)

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

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
Problemas con las interrupciones
« en: 30 de Enero de 2004, 03:20:00 »
Tengo un problema que me trae loco y es el siguiente:

si uso conjuntamente las inerrupciones rda, timer0, timer1, cambio en rb0 y cambio en rb4-rb7 el caso es que si se activa alguna de las dos ultimas parece que la de la usart se queda tiesa y ya no vuelve a responder.
incluso si intento usar getc() en el programa principal no recibo nada aunque este mandando datos.

esto me ocurre con el 877 y con el 18f452 (incluso usado la posibilidad de multilevel y dejando la int_rda como fast).
ocurrio a alguien lo mismo?? podría ser un bug del compilador ccs??

voy a migrar mi programa al hi-tide para probar.

me tiene tela de cabreao el tema

saludos

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Problemas con las interrupciones
« Respuesta #1 en: 30 de Enero de 2004, 19:53:00 »
Hola, FELIX, mira yo he usado tmr1,tmr0, rda y rb0 sin problemas compilando con la version 3.168, la verdad es extraño......

saudos

Ariel
saludos
PikMan

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Problemas con las interrupciones
« Respuesta #2 en: 01 de Febrero de 2004, 06:13:00 »
pues macho ya estoy loco....

con esta configuracion:

enable_interrupts(global);
enable_interrupts(int_timer1);//interrupcion del timer1
enable_interrupts(int_timer3);//interrupcion del timer3
enable_interrupts(INT_RB);// interrupcion por cambio en puerto B
enable_interrupts(INT_EXT);// interrupcion de RB0

tambien se me habilita la inerrupcion RDA y una vez que recibo un caracter se me deshabilitan todas las demas y solo funciona la RDA.

probe quitar el bootloader por si hubiera alguna incompatibilidad pero nada de nada...

voy a hacer un programilla sencillo de pruebas a ver si el tema esta realmente en el compilador porque he leido que hay algun problema con las interrupciones en CCS.

ya os contare

Desconectado cHiPmAn

  • PIC16
  • ***
  • Mensajes: 110
RE: Problemas con las interrupciones
« Respuesta #3 en: 02 de Febrero de 2004, 13:42:00 »
Buenas,

Alguna vez me ha pasado algo similar. Mis recomendaciones:

- Las rutinas de servició a la interrupción tienen q ser lo mas cortas (rapidas) posibles.
- Cuidado con las interrupciones externas, hay pulsadores q crean rebotes y por tanto generan multiples interrupciones si así se configura el pin.
- Creo que se produce despordamientos de pila cuando sin haber acabado de atender la interrupción se generan nuevas interrupcions de igual o mayor proiridad --> Creo que el micro se cuelga o hace el tonto.

Es un tema interesante el q te sucede. A ver si encuentras la solución y lo publicas.

Un saludo!

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Problemas con las interrupciones
« Respuesta #4 en: 03 de Febrero de 2004, 01:57:00 »
La verdad el que con ccs ya me di por vencido. las interrupciones son simplemente para activar un flag y desactivarlas para atenderlas en la rutina principal y una ver atendidas las vuelvo a activar pero ya te digo que usando las ext y la rb se me frie la rda y no conozco la solucion. cuando llegue a alguna conclusion os la hago saber y si alguien me da una pista pues mejor.

voy a intentarlo con el picc18 a ver si este se frie menos.
ya lei comportamientos erraticos con el ccs al usar interrupciones y puesto al tema una preguntita ¿a alguien le funciona la opcion de forzar hardware en #usei2c...... con ccs? a mi me deja el micro helado

saludos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Problemas con las interrupciones
« Respuesta #5 en: 03 de Febrero de 2004, 05:38:00 »
No conozco como lo hace el CCS, pero tanto en assembler como en Basic si utilizas la Usart con interrupciones y ademas utilizas la int del timer o externas, se pone loca la Usart, en realidad debe perder algun bit de un caracter y ya queda loca con el conteo.
Lo que hago es resetear el bit de error de la Usart una vez transcurre determinado tiempo desde que queda en espera de recepcion.
Pruebalo y me dices...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Problemas con las interrupciones
« Respuesta #6 en: 03 de Febrero de 2004, 06:38:00 »
Pués sí que funcionaba:

#use I2C(MASTER,SDA=PIN_C4,SCL=PIN_C3,SLOW,FORCE_HW) //I2C POR HARD

Respecto a la utilización de múltiples interrupciones con comunicaciones, no lo he probado.

Un saludo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Problemas con las interrupciones
« Respuesta #7 en: 03 de Febrero de 2004, 06:44:00 »

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Problemas con las interrupciones
« Respuesta #8 en: 03 de Febrero de 2004, 08:21:00 »
bueno, en las versiones nuevas cambiaron a force_hw..
de cualquier forma parece seguro que sin la opcion slow no funciona el modo hardware en ccs (lo comentan en el foro del fabricante...) y a mi tampoco me va en el 18f452 ni con la opcion slow... se me resetea el micro cada 350 ms mas o menos.
creo que me paso al picc a ver si soluciono mis peleas con CCS...con lo contento que estaba con mi modbus rulando y mi receptor que va guay del paraguay...
saludos

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Problemas con las interrupciones
« Respuesta #9 en: 03 de Febrero de 2004, 11:14:00 »
Hola Felix, pues para confirmar que si funciona la opcion force_hw de la version 3.182, inclusive he probado una aplicacion que usa un ds1307 + interrupcion externa y la de RDA, puede que el problema sea el que explica Marcos, de cualquier manera estas pruebas las acabo de hacer con el 16F877, yo uso muchisimo esta opcion pues el DS1307 esta casi siempre en mis equipos, y bueno no funciona en modo fast directamente, lo otro que se me ocurre es que uses rutinas de asm para el manejo de I2C por harware,yo las tengo hechas solo que habira que converitirlas al asm del C y hacerlas funciones si las quieres te las subo, funcionan para el 877,  lo que no se es porque comentan que no anda el modo slow debe haber sido en alguna version interina, tampoco vi en la pagina de CCS que hayan reportado un bug sobre I2C.

Bueno me parece interesantisimo el tema del MODBUS, pues no consigo informacion al respecto y veo que estas comunicando en ese protocolo, lo busco con la intencion de ver la posibilidad de utilizar un display LCD para mostrar variables en un S7200 CPU214, bueno eso es lo que puedo aportar,
saludos

Ariel



saludos
PikMan

Desconectado viltor

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 56
    • Pagina personal
RE: Problemas con las interrupciones
« Respuesta #10 en: 03 de Febrero de 2004, 13:51:00 »
Hola Felix:

Es muy probable que mientras atiendes otras interrupciones se produzca un desbordamiento en la usart.

Si esto ocurre, el micro activa un falg y hasta que no lo pones a 1 ya no obedece la USART.

Para averiguarlo, lee el flag FERR del registro RCSTA, si está a 1 se ha producido desbordamiento o un error en la USART.
Para continuar recibiendo datos debes poner a 1 el flag CREN del registro RCSTA.

El codigo para un pic 16f876 sería algo así:

#bit OERR = 0x18.1
#bit CREN = 0x18.4
char caracter;
.
.
.
.

#int_RDA
void recibe(){

If (OERR)  CREN=1;

caracter=getc();
.
.
.
.

Saludos
Viltor
http://webs.ono.com/viltor

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Problemas con las interrupciones
« Respuesta #11 en: 03 de Febrero de 2004, 14:23:00 »
xatamente eso quise decir, vos lo explicaste para C....
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Problemas con las interrupciones
« Respuesta #12 en: 03 de Febrero de 2004, 15:40:00 »
gracias marcos y viltor, tardo un segundo en probar. pikman en el for de  la pagina de ccs dicen que las rutinas de i2c hardware no pirulan en modo fast. me daria una gran alegria que en la nueva version fueran bien...
respecto al modbus si tengo tiempo de depurar las rutinas las cuelgo en la web este fin de semana. ya sabeis que soy amigo del open source
por cierto: para tu 200 tengo rutinas de master y slave para modbus. tienes el pack de microwin add-on ??

saludos

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Problemas con las interrupciones
« Respuesta #13 en: 03 de Febrero de 2004, 20:16:00 »
OK gracias Felix , pues te agradeceria mucho si me das una mano con el modbus, no tengo mas que el cable pc-ppi y un s7200 cpu214, el soft que consegui es bajo D.O.S. y sirve para AWL y Ladder, se que el modbus hay que cargarlo en la memoria del PLC antes de bajar el programa.

Con respecto al I2C pues me confundi entendi que no funcionaba en modo slow,  probare esto entonces y bueno disculpas por la confucion.

saludos

Ariel
saludos
PikMan

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Problemas con las interrupciones
« Respuesta #14 en: 04 de Febrero de 2004, 02:31:00 »
Bueno Ariel, solo nos equivocamos los que trabajamos .
luego te cuelgo el codigo para modbus en el 200. si tienes el emule puedes buscar el microwin y si no me lo dices y lo arregamos de otra forma.
aun no probe la posible solucion pero tengo ganas de que llegue la noche para probar

saludos


 

anything