TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: willie_rosario_salsa en 21 de Mayo de 2010, 01:09:45
-
Hola expertos,
Gracias a todos por la ayuda brindada en estos días, ya he resuelto la mayoria de los problemas presentados pero una vez más acudo a ustedes para consultar e identificar el error que se me presenta:
Una de las interrupciones seriales que uso funciona perfecto pero cuando la modifico a 2400 bps (no la debo cambiar) me deja de funcionar y el ISIS me bota los errores de la imagen
(http://C:\Documents and Settings\Julio\Escritorio\]uL!o\Proyecto de Graduación\error_2400bps.JPG)
La sección de código que tengo es la siguiente:
#int_EXT
void ext_isr()
{
char dato_in[15]; //buffer temporal
fgets(dato_in,com_soft); //guarda en dato_in
fprintf(com_soft, "%s%s\n\r" ,"Dato recibido: ", dato_in); //imprime dato recibido
delay_ms(500); //delay wathever
}
La única variante que realizo es poner baud=2400 en el transmisor y en el receptor, pero no encuentro por qué razón no captura los datos con este baudaje :? :? :?...
Agradeceré su valiosa ayuda
-
Entiendo que esperas 15 bytes
Pero para que el retardo de 500ms???
1/2400=0.4166ms x 10(1 startb+8b+1stopb)=4.166msX 15 bytes= 62.5ms en recibir 15 bytes seguidos
Si los bytes los recibes seguidos , creo que sobreescribe algun registro relacionado a los 500ms.
---
Si no es asi , podría ser un capricho del proteus
Es lo que se me ocurre por el momento.
Saludos!
---------------------------
Re-analizando la imagen
El warning te lo marca cada 4.1151ms~4.16ms lo que es cada byte recibido,da menor al calculo por el startbit ^^
mmmm
Parece error de proteus.
QUe tipo de reloj usas y a que velocidad????
Pero el proteus te marca error????
O sigue el programa solo enviandote avisos de ese tipo?????????????
No veo que diga ERROR
Se para la simulación???
No estoy muy familiarizado con el fgets
pero no veo a que registro pasas los datos
value = fgets (string, stream)
-
Pero para que el retardo de 500ms???En realidad después probé quitando este delay, puse un break de proteus justo despues de fgets para saber que datos se recibieron, pero sigue igual.
QUe tipo de reloj usas y a que velocidad????Estoy utilizando en ambos micros Fuse HS - 20 MHz y no se si este de pronto sea el motivo.
Pero el proteus te marca error????No marca error, pero el log de eventos llega a casi 8000 y se detiene, además al marcar estos warnings el pic se cuelga.
pero no veo a que registro pasas los datosCon fgets(dato_in,com_soft) lo que hago es tomar por el puerto com_soft (que es el virtual) y guardarlo en la variable local llamada "dato_in".
-
Para quitar los warnings
Vas a Debug--Configure Diagnostic-Seleccionas el pic, en la parte de warning deshabilitas.
Debe fluir mucho mejor con eso.
-
¿La velocidad serial que usabas antes era mayor de 2400 baudios? Quizás esa velocidad es demasiado lenta y la interrupción te vuelve a saltar antes de que termine el trabajo.
-
Para quitar los warnings
Vas a Debug--Configure Diagnostic-Seleccionas el pic, en la parte de warning deshabilitas.
Debe fluir mucho mejor con eso.
Na nai, es verdad que los puedo obviar, pero el problema está en que el sistema no funciona.
Quizás esa velocidad es demasiado lenta y la interrupción te vuelve a saltar antes de que termine el trabajo.La verdad creo que el tema va por ahí con el oscilador y la velocidad..
Quisiera poner otro cristal para saber qué pasa, puede ser el SPBRG a lo mejor :?
-
Esta raro , porque es una velocidad lenta no debe haber problema con esos 20MHz.
Pero eso no es lo que te indica la advertencia,solo dice que se sobrescribe un registro , hay que checar bien la direccion y a que variable pertenece.
Probaste con el Virtual terminal para revisar el flujo de datos??
-
Claro, esa es la herramienta que uso para ver el trafico de datos.
La pregunta es por qué funciona con 9600 perfecto y con 2400 no..
-
Hola.
Has probado asignar un Flag de aviso dentro de la interrupción y usar la función fprintf() en el main?
Saludos
-
Al parecer era el oscilador de 20 MHz que no podía generar tramas a 2400 sin errores y esto me causaba problemas.
Tuve que cambiarlo a 4 MHz y funciona bien, voy a ir intentar subirlo a 8 MHz para ver si no causa conflictos, pero hasta ahora todo funciona bien :-/ :-/ :-/
Gracias