Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   PROGRAMACIÓN Microcontroladores: PICs , AVRs. (http://foros.zackyfiles.com/forumdisplay.php?f=437)
-   -   se me cuelga el pic 16f877 (http://foros.zackyfiles.com/showthread.php?t=605372)

kudox_dany 20/06/2009 21:29

se me cuelga el pic 16f877
 
hola a todos: (todo esta simulado con proteus.)

estoy con un proyecto fin de carrera y tengo un pequeño problema. intento enviar datos a un gsm y a la vez se estan leyendo valores de varios acelerometros ( en total 8).
no puedo utilizar la entrada a/d porque en los acelerometros se produce un pico de tension ddurante un periodo muy corto por lo que puede que al ir ejecutandose el programa no podamos leer el valor. La solucion que encontre es utilizar la subrutinas del puerto rb0 y rb (4:7). utilizo esto por que los 8 acelerometros estan agrupados en dos grupos. tan solo quiero saber cuando se activan. por l oque en un grupo van todos unidosa la paga rb0 mediante un diodo cada uno y el otro grupo a una patilla del rb(4:7). todo perfecto. la subrutina rb0 cuando hay un pico de tension entra en la subrutina y a 1 la variable que sea.
#INT_EXT
ext_isr()
{ movimiento=1;
}


el problema es que quiero hacer lo mismo con el otro grupo de acelerometros pero utilizadno la interrupcion de cambio de estado del puerto b
#INT_RB
linterrupcion()
{ aviso=1;
}
pero siemrpe que activamos un acelerometro se cuelga denro de la subrutina. he puesto en la subrutina un led a parpadear y cuando entra se enciende el led y se queda encendido no se apaga

#INT_RB
lunarota()
{ output_high(PIN_E0);
delay_ms(500);
output_low(PIN_E0);
aviso=1;
}

¿que puede pasar?

por cierto. si pongo esto :
#INT_RB
linterrupcion()
{ disable_interrupts(int_rb);
aviso=1;
}

entra en la subrutina hace lo que tiene que hacer y sale, pero al volver a activar la subrutina entra en ella continuamente sin que nadie le avise.
(tengo enviando datos en el programa principal por uart por software pero no creo que sea por eso. cuando entra en la subrutina esto deja de enviar porque se colgo el pic entero.)

1jabato1 20/06/2009 23:07

Hola

Yo soy un principiante en esto de los pic,pero creo que no es habitual poner delays ni funciones complejas dentro de las interrupciones.No se cada cuanto tiempo se producen las interupciones de los acelerometros pero es posible que se vuelva a producir una interrupcion dentro de la misma y por eso se cuelga el pic.Con el debugger del proteus puedes seguir paso a paso el codigo en c y buscar la anomalia

Como te he dicho mis conocimientos son muy limitados,a ver si alguien nos responde y aprendemos todos.

Un saludo

kudox_dany 21/06/2009 02:15

muchas gracias por responder.


Si te fijas, no utilizo nada muy complejo en la interrupcion, tan solo estoy poniendo una variable a 1. Voy a ver si intento cargar el Codigo C en proteus y ver lo que falla (yo siempre cargo el hex y le doy a run nunca probe el debug)

1jabato1 21/06/2009 22:17

hola

Imagino que usas CCS para programar,te dejo el enlace de un libro de CCS y Proteus,aunque a lo mejor ya lo tienes.
http://www.taringa.net/posts/taringa...C-y-Basic.html


Un saludo


La franja horaria es GMT +2. Ahora son las 23:41.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate