Quiero agradecerle por leer esta pregunta, tenga en cuenta que puede parecer una tontería, pero me ha estado preocupando durante un par de horas.
Estoy usando un PIC16F628. Todo lo que estoy tratando de hacer por ahora es encender un LED simple. He creado el siguiente código usando MikroC:
void main()
{
TRISA=0x00;
PORTA=0xFF;
}
Han simulado el siguiente circuito con Proteus:
Soy consciente de que solo se encenderían 4 leds.
Cargué el código en el PIC y lo verifiqué usando PICkit2 (Software y programador).
He leído que el pin de programación (RB4/PGM) debe configurarse en bajo, lo cual he hecho.
El PIC está cableado en la placa de prueba y no enciende ningún LED. Ninguno de los pines (RA0,RA1,RA2,RA3) dan suficiente voltaje (dan alrededor de 0.3V).
1) Estoy alimentando el circuito con 5V.
2) Estoy usando los pines correctos.
3) Lo he reprogramado un par de veces, sin éxito.
4)MCLR está conectado a través de una resistencia a Vdd.
5) El pin PGM está conectado a GND (Vss)
6) Los LED están conectados de la manera correcta (incluso traté de girarlos en caso de que me hubiera equivocado).
7)He probado el cableado, no está interrumpido.
No funciona, y no sé qué hacer. ¿Podría alguien, por favor, explicar lo que he hecho mal?
Es difícil saber qué está pasando sin mostrarnos su código completo y un esquema de su implementación física.
Sin embargo, esto es lo que puedes investigar:
Debe agregar un bucle para siempre al final de su código. Es posible que su microcontrolador se apague después de una ejecución. Añadir al final a while(1)
ofor(;;)
Intente agregar el siguiente código a su inicialización (o cualquier formato que el encabezado de su microcontrolador defina estos registros)
ANSEL = 0; /* Configure analog pins as digital*/
CMCON = 7; /* Disable comparators*/
No he usado controladores de microchip en MikroC, pero ¿estás seguro de que es TRISA
y PORTA
en lugar de TRISO
y GPIO
?
Asegúrese de haber configurado correctamente el oscilador interno (INTOSC). Puede configurarlo configurando los bits 0-2 (FOSC2:FOSC0) del CONFIG
registro en 101
o 100
para INTOSC
Además de lo que dijo lancovici:
Un primer paso podría ser que verifique la configuración de su hardware con un archivo .hex que sepa que funciona. Hay algunos (incluidos dos (con y sin cristal) para el 628) en mi antigua página de parpadeo: http://www.voti.nl/blink
Su esquema muestra ahora cristal u otra fuente de reloj. Esto me lleva a suponer que tiene la intención de utilizar el oscilador interno.
Sin embargo , según su comentario sobre otra respuesta, dice que tiene los bits de configuración configurados para usar HS
el modo. HS significa Oscilador/Resonador de Cristal de Alta Velocidad. Para que este modo funcione, necesita un cristal o resonador de 8 MHz a 20 MHz conectado a los pines OSCIN/OSCOUT. Como no tiene esto en su esquema (y supongo que no tiene esta configuración), entonces no tendrá una fuente de reloj para que su PIC se ejecute, y como tal, parecerá que no hace nada en absoluto.
Para el oscilador interno de 4 MHz, la opción correcta es INTRC
según la página 95 de la hoja de datos .
Intente cambiar la configuración a esto y vea si comienza a funcionar como se esperaba.
TRISA
y PORTA
están en diferentes bancos, según la hoja de datos , por lo que es necesario configurar el STATUS
registro correctamente antes de cada acceso.
De la "FIGURA 3-2: MAPA DE MEMORIA DE DATOS DEL PIC16F627 Y PIC16F628", PORTA
está en el banco 0 , mientras que TRISA
está en el banco 1 .
bitsmack
zakkos