TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: Deimos en 11 de Febrero de 2007, 19:52:08
-
Hola forer@s!!!!
Tengo un problemilla con un dsPIC30F6010A. Resulta que se me salta a veces instrucciones. Tengo varios leds colgando de un puerto digital del dsPIC. Le meto un programa secuencial que lo unico que hace es encender y apagar dichos leds, y he verificado que ha veces se me salta una o dos instrucciones de manera aleatoria. Este programa fué para probar que las sospechas eran ciertas, y que el micro a veces se salta trozos de programa. No es por WDT, ni timers, ni nada que me digais, pues está todo capado.
Mirando el datasheet del dsPIC me dí cuenta que en el capítulo de puertos I/O hacen mención a la colocación de una instrucción Nop despues de atacar el puerto. Es como si hiciesen tiempos de espera o algo por el estilo, delays o no se. La cuestión es que con los Nop funciona, y sin ellos hay instrucciones que se salta.
Alguien sabe algo de esto? A alguien más le ha pasado? Nunca había tenido que recurrir a poner Nop cuando programaba dsPIC, ahora estoy en una aplicación muy grande con un programa muy cargado de I/O y de cómputo, y es posible que a tanta velocidad y con tanto trabajo que tiene que hacer el dsPIC ahora me haga falta ponerle los Nop, cosa que me extraña.
Bueno ya direis si a algun@ le pasa igual
Salu2!!!!!!!!!!
-
Sí, alguna vez también me ha pasado a mí, sin que pueda decirte tampoco la causa concreta del fallo.
No obstante, durante un tiempo tuve un fallo aleatorio que ocurría cuando utilizaba PORTx como salidas, y que desapareció utilizando LATx como salidas. ¿Utilizas el primero o el segundo?
-
Buenas,
Y habeis tenido algun tipo de problema cuando intentais establecer un valor al puerto antes de cambiar el valor del tris? Quiero poner un pin como salida, pero antes de cambiar el sentido del pin quiero forzarle un valor. Escribo sobre el puerto (o sobre el latch) y el registro LAT se pone bien, pero luego cambio el valor y lo pongo como salida y el valor de LAT no pasa a PORT :(
Todo esto es en el simulador (MPLAB SIM) por tanto no se si es problema del simulador o realmente pasa.
PIC24FJ128GA010 (por si ayuda)
Si lo hago a la inversa (tris y luego lat/port) todo funciona bien...
Un saludo,
-
Hola manolo y gracias por la respuesta. La solución fué utilizar el LATx como bien has dicho. Es lo mismo que aconseja microchip. Ya lo tenia probado y solucionado, la cuestión era saber si era problema mio o a alguien más le habia pasado.
No me acaba de cuadrar lo del LATx, ya que parece que escriba por un lado y lea por otro. En fin no se. Si descubro algo ya te lo diré.
Gracias xuloooooo!!!!!!!!1
-
A mi también me pasaba con el puerto B, con el 30f6014 no ocurría pero si con el 30f6014a
-
Es lo mismo que en los 18F, les dejo un par de links donde ocurrió la misma duda en los 18F, de porqué usar los LATx para las salidas.
Aquí les dejo links a posts donde se trató el tema
http://www.todopic.com.ar/foros/index.php?topic=11553.0
http://www.todopic.com.ar/foros/index.php?topic=12181.0
http://www.todopic.com.ar/foros/index.php?topic=2255.0
http://www.todopic.com.ar/foros/index.php?topic=1632.0
Cualquier duda, no tienen más que volver a preguntar ;)
Saludos
-
Gracias Mauricio por los enlaces, me van a venir de perlas.
Mirando un poco en el datasheet el esquema del puerto del dsPIC30F6010A me doy cuenta que utilizan el LAT y el PORT para operaciones diferentes. En el datasheet además queda bien claro que se necesita un Nop entre un comando de escritura y uno de lectura.
8.2.1 I/O PORT WRITE/READ TIMING
One instruction cycle is required between direction change or port write operation and operation of the same port. Typically this instruction would be a NOP.
EXAMPLE 8-1: PORT WRITE/READ
MOV 0xFF00, W0 ; Configure PORTB<15:8> as inputs
MOV W0, TRISBB ; and PORTB<7:0> as outputs
NOP ; Delay 1 cycle
BTSS PORTB, #13 ; Next Instruction
Por cierto, lo que dice zer0 es lo mismo que me está pasando a mi. Antes estaba con un dsPIC30F6010, ahora estoy con el dsPIC30F6010A, y todo se me ha ido al traste. La versión A trabaja con PLL en HS y en FRC, mientras que la version sin nada trabaja en FRC solamente.
Aquí os pongo la comparativa que microchip tiene en la web con respecto a estas dos máquinas.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2533&product2=dsPIC30F6010A&product1=dsPIC30F6010
En fin, que a la hora de migrar me ha empezado a dar problemas de velocidades y de saltos aleatorios en las instrucciones. Me alegro de no ser el único al que le pasa todo lo malo jejejejeje :lol:
Ala guap@s!!!!!!!
Agur!!!!!