TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: JonGoten en 19 de Diciembre de 2004, 20:07:00
-
Buenas, soy nuevo en este foro. Lo he estado ojeando varios dias y parece excelente...
Bien, a lo que voy. Llevo varios años programando PIC 16F84, tanto en ASM como en CCS y bueno, acabo de dar el salto al PIC 16F88. El caso es que aunque se que es compatible con el 84, un simple programa no me anda. No sé si es porque programo mal el 88 o porque al programa le falta o le sobra algo.
Como hardware, tengo conectado al pin 7 (RB1) un pulsador y al 17 (RA0) un led. Utilizo un cristal de cuarzo de 4Mhz. (El hardware está bien porque en el 84 me funciona correctamente)
A ver si alguien me echa una mano.
#include <16f88.h>
#BYTE PA = 0x05
#BYTE PB = 0x06
#BIT luz0 = PA.0
#BIT pulsador1 = PB.1
void main (void);
void inicializar (void);
void main (void)
{
inicializar();
While (1)
{
if (pulsador1)
{
luz0=1;
}
else
{
luz0=0;
}
}
}
void inicializar (void)
{
set_tris_a(0x00); // Salidas
set_tris_b(0xff); // Entradas
setup_counters(RTCC_INTERNAL,RTCC_DIV_4);
set_rtcc(-25);
luz0=0;
}
-
El programa funciona bien, debe ser alguna conexion.
En el set_rtcc ¿porque pones un numero negativo?
Si no vas a usar temporizaciones quita el setup_counters y el set_rtcc, no sirven para nada.
¿No estaras conectando la entrada al PORTB0 en lugar de al PORTB1?
-
La entrada la estoy conectando al RB1, eso seguro.
Pongo número negativo porque es lo mismo poner set_rtcc(-25) que set_rtcc(255-25) y para mi es más visual (y lo de poner los temporizadores... bueno, más bien se me ha olvidado quitarlos
)
Supongo que será el grabador que utilizo (software). Para los 16f84 utilizaba el ICPROG, pero resulta que no es compatible con el 16f88. Seguiré haciendo pruebas a ver. Utilizaré el WinPic800.
También puede ser la configuración del 16f88, que tiene bastantes cosas mas que el 84.
Gracias, por asegurarme que el código está bien (cómo lo has hecho? simplemente repasando o lo has probado fisicamente?). Miraré qué otras cosas pueden ser.
EDIT: Por cierto, por qué pin sale el PWM en el 16f88? (veo que hay 2 pines con el mismo nombre)
-
Lo he simulado y funciona bien.
El 16F84 no tiene módulos de PWM (Módulos de Captura/Comparación/PWM) ¿A qué te refieres? Seguramente será el 88
El F88 no lo he usado según veo tiene 1 módulo de C/C/PWM con lo cual puedes generar una salida de PWM por uno de los pines B0,B2,B3 (según información CCS).
Un saludo
-
Ups, me he colado en lo del pwm, queria decir el 16f88. Ya lo he cambiado.
Gracias pocher, por cierto, con qué programa has simulado el código?
-
Supongo que Pocher habrá usado el Proteus, encontrarás más información en el hilo de simuladores del foro.
Como tienes puestos los fuses??, quizas venga por ahi el problema...en el programa que has puesto no los tienes o se te ha olvidado ponerlos.
Un saludo.
-
Sí lo comprobé con PROTEUS.
Oshow tiene razón ¿qué configuración de fuses has puesto en el programa grabador? Es mejor incluir en el programa la directiva #fuses ... y de un programa a otro lo único que tendrás que hacer es copiar y pegar esta línea añadiendo o quitando "fuses".
-
Vaya, con PROTEUS se puede simular el *.hex? Yo sólo he visto la opción de hacerlo con *.asm...
EDIT: Reviso los fuses y os comento. Gracias.
-
Claro que simula el HEX. De hecho, sólo simula el HEX.
Tanto es así, que cuando le pones un ASM le tienes que indicar la ruta del compilador para que él pueda convertirlo a HEX y así poder simularlo.
-
Bueno, ya he arreglado el asunto. Eran los fuses.
También he conseguido hacer funcionar el PWM.
Gracias a todos.