TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pacalaconcurso en 30 de Enero de 2004, 03:20:00

Título: Problemas con las interrupciones
Publicado por: pacalaconcurso 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
Título: RE: Problemas con las interrupciones
Publicado por: pikman 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
Título: RE: Problemas con las interrupciones
Publicado por: pacalaconcurso 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
Título: RE: Problemas con las interrupciones
Publicado por: cHiPmAn 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!
Título: RE: Problemas con las interrupciones
Publicado por: pacalaconcurso 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
Título: RE: Problemas con las interrupciones
Publicado por: MGLSOFT 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...
Título: RE: Problemas con las interrupciones
Publicado por: pocher 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
Título: RE: Problemas con las interrupciones
Publicado por: pocher en 03 de Febrero de 2004, 06:44:00
A mí me funcionaba con un 876.

Pero mira lo que he encontrado: http://miarroba.com/foros/ver.php?foroid=46840&temaid=1147421&marcar=force&msgid=8319302#8319302
Título: RE: Problemas con las interrupciones
Publicado por: pacalaconcurso 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
Título: RE: Problemas con las interrupciones
Publicado por: pikman 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



Título: RE: Problemas con las interrupciones
Publicado por: viltor 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
Título: RE: Problemas con las interrupciones
Publicado por: MGLSOFT en 03 de Febrero de 2004, 14:23:00
xatamente eso quise decir, vos lo explicaste para C....
Título: RE: Problemas con las interrupciones
Publicado por: pacalaconcurso 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
Título: RE: Problemas con las interrupciones
Publicado por: pikman 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
Título: RE: Problemas con las interrupciones
Publicado por: pacalaconcurso 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
Título: RE: Problemas con las interrupciones
Publicado por: pacalaconcurso en 04 de Febrero de 2004, 13:31:00
bueno, os debo unas birras.....gracias a vuestros comentarios me di cuenta que tenia la solucion delante de las narices y no la vi. puesto "al loro" de lo que pasa con el overrun del buffer de rx vi que ccs tiene el argumento errors en la directiva #use rs232 para, precisamente, controlar eso
y ya rula tope!!!!!!!!!!!!!!!!!

aqui teneis una version preliminar. creo que esta todo lo necesario...de todas formas ya lo reviso con tiempo y pongo la version definitiva

http://www.pacalaconcurso.com/modbus.c


espero que me ayudeis a mejorar el tema... de momento esta poco refinado pero funciona...ahora quiero comprimir un poco el codigo.

saludos
Título: RE: Problemas con las interrupciones
Publicado por: pikman en 04 de Febrero de 2004, 14:48:00
OK, FELIX!, pero que bueno, felicitaciones, sabes tengo un amigo que se ha paseado por todos los compiladores de C que hay y dice que no hay otro como CCS, y recomienda leer el manual, je , esto lo digo porque un par de veces intente migrar a picc y todo crece al doble ademas hay cosas que parece que las estas haciendo en ASM, bueno quizas sea una cuestion de costumbre.

Bueno con respecto al emule supongo que es algun software para buscar no lo tengo, yo baje todo loq ue habia de en la ftp del automatizacion no recuerdo si ahi esta, de igual modo no se si tienes algun documento para principiantes de modbus te lo agradecere, mi e-mail es lahoras@fullzero.com.ar puedes subirme ahi lo que quieras. de nuevo mis felicitaciones,

ARIEL

Título: RE: Problemas con las interrupciones
Publicado por: pacalaconcurso en 05 de Febrero de 2004, 08:44:00
no es por llevar la contraria pero no me funciona el i2c hardware
Título: RE: Problemas con las interrupciones
Publicado por: pikman en 05 de Febrero de 2004, 08:59:00
Hola, Felix, no te funciona como FORCE_HW en modo slow tampoco, mas tarde voy ha hacer unas pruebas con una 24LC256 que acepta hasta 1 Mhz a ver que pasa.

saludos

Ariel
Título: RE: Problemas con las interrupciones
Publicado por: MGLSOFT en 05 de Febrero de 2004, 17:10:00
Pacala, hay cuatro categorias de foristas, con los dos bits que pueden ser activados...
El de leer es uno y el otro el de hacer.

Afortunadamente sabemos todos que vos tenes los dos bits activos.
En mi caso tengo activo siempre el primero y el otro parpadea, lo que me ayuda a ayudarte a ti y a los otros a resolver cosas que por tu velocidad de procesador se desbordan...

Felicitaciones por el logro !!

Y espero que no haya ninguno con los dos bits apagados en el FORO !!!

Un abrazo.