TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: Doohan en 04 de Mayo de 2011, 07:32:50
-
Hola a todos.
Estoy empezando a programar dsPics e intentándolo simular con la herramienta MPLAB SIM.
Hace tiempo estuve programando PICS en ASM y no tuve ningún problema, pero ahora al hacerlo en C el simulador no me simula los puertos por algo que debo hacer mal.
Para que entendais el problema he hecho un programa muy básico siguiendo este tutorial (http://ww1.microchip.com/downloads/en/DeviceDoc/70094a.pdf) para ver si vosotros apreciais qué hago mal:
Si os fijais el puerto A no cambia cuando le asigno el valor del contador.
A partir del segundo 49 sí que cambia pero es porque le doy a "Run" y lo vuelvo a parar con "Halt", pero no toma el mismo valor que el contador
He probado con el puerto B y tampoco. También he buscado por el foro temas parecidos y no he encontrado nada.
Por si no lo apreciais en el vídeo el programa es el siguiente:
#include "p30f6014.h"
int counter;
int main (void)
{
counter = 1;
TRISA = 0;
PORTA = 0;
while(1) // do forever
{
PORTA = counter;
counter++;
}
return 0;
}
Espero que alguien pueda ayudarme.
Un saludo y gracias de antemano
-
Sigo aquí dándole al tema y he descubierto que ese mismo código usando el puerto F funciona perfectamente, asique deduzco que es cuestión de la configuración de los puertos A y B
#include <p30f6011A.h>
//_CONFIG1( JTAGEN_OFF && GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF &ICS_PGx2
//& FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
//_CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_HS);
#define FCY 10000000UL
int counter = 0;
main(int argc, char * argv[]){
TRISF=0x0000;
PORTF=0;
while(1){
PORTF = counter;
counter++;
}
}
He cambiado el Pic y he usado el dsPIC30F6011 que es el que usaré en la realidad.
Ahora me surge una duda: ¿que pic sería el eqivalente a este en la serie 33F? Lo pregunto para poder simularlo en proteus
Un saludo!
-
No tengo a mano, el data sheet del pic con que trabajás.
Para no perder tiempo, te respondo mientras lo descargo.
¿Te aseguraste que en el puerto A no hay entradas analógicas? Si tiene, tienes que configurar los pines como digitales.
-
No tengo a mano, el data sheet del pic con que trabajás.
Para no perder tiempo, te respondo mientras lo descargo.
¿Te aseguraste que en el puerto A no hay entradas analógicas? Si tiene, tienes que configurar los pines como digitales.
Gracias por la respuesta León Pic. Creo que por ahí van los tiros porque justamente son unos pines los que no cambian su valor
En cuanto encuentre la solución lo pondré por aquí junto con el código. Seguro que a más de uno le sirve.
Un saludo
-
Efectivamente el problema venía por la configuración de los pins. Bueno más bien el problema era que YO diese por supuesto que la configuración por defecto era en modo digital
Por si alguien le sirve aquí dejo el código:
#include <p30f6011A.h>
int counter = 0;
int main(){
ADPCFG = 0xFFFF; //Configura los pines analogicos como digitales
TRISB = 0x0000;
PORTB = 0;
while(1)
{
PORTB = counter;
counter++;
}
return 0;
}
-
Excelente :-/ :-/
-
Gracias por el post, y por completar el hilo de tus investigaciones cuando has dado con la solución. Justamente probé en el simulador el mismo código y noté que no se cargaba bien el valor del contador al puerto. No le di importancia pero agradezco saber porqué pasaba.
Un saludo