¿Por qué no puedo configurar IO digital de PIC16F628

1

Quiero agradecerte por leer esta pregunta, ten en cuenta que puede parecer una tontería, pero me ha preocupado por un par de horas.

Estoy usando un PIC16F628. Todo lo que estoy tratando de hacer por ahora es encender un simple LED. 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.

An subió el código al PIC y lo superó usando PICkit2 (software y programador).

He leído que el pin de Programación (RB4 / PGM) se debe establecer en bajo, lo que 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 aproximadamente 0.3V).

1) Estoy suministrando 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 correctamente (incluso intentaron rotarlos en caso de que me haya 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?

    
pregunta morty1993

4 respuestas

3

Es difícil saber qué está pasando sin mostrarnos tu código completo y un esquema de tu implementación física.

Sin embargo, esto es lo que puedes ver:

  1. Debes agregar un ciclo para siempre al final de tu código. Es posible que su microcontrolador se apague después de una ejecución. Agregue al final un while(1) o for(;;)

  2. Intente agregar el siguiente código a su inicialización (o el formato del encabezado de su microcontrolador define estos registros)

ANSEL = 0; /* Configure analog pins as digital*/

CMCON = 7; /* Disable comparators*/

  1. No he usado los controladores de microchip en MikroC, pero ¿estás seguro de que son TRISA y PORTA en lugar de TRISO y GPIO ?

  2. Asegúrese de haber configurado correctamente el oscilador interno (INTOSC). Puede configurarlo configurando los bits 0-2 (FOSC2: FOSC0) del registro CONFIG a 101 o 100 para INTOSC

respondido por el Iancovici
2

Además de lo que dijo lancovici:

  • ¿Sus LED tienen resistencias en serie?
  • ¿Cuál es el valor de la palabra de configuración que utiliza?

Un primer paso podría ser que compruebes la configuración de tu hardware con un archivo .hex que funcione bien. Hay algunos (incluyendo dos (con y sin cristal) para el 628) en mi antigua página de parpadeo: enlace

    
respondido por el Wouter van Ooijen
1

Su esquema muestra ahora el 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 en otra respuesta, usted dice que tiene los bits de configuración establecidos para usar el modo HS . HS es sinónimo de oscilador / resonador de cristal de alta velocidad. Para que este modo funcione, necesita un cristal o resonador de 8MHz a 20MHz 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 se ejecute su PIC, y como tal parecerá que no hace nada en absoluto.

Para el oscilador interno de 4MHz, la opción correcta es INTRC según la página 95 del hoja de datos .

Intente cambiar la configuración a esto y ver si comienza a funcionar como se esperaba.

    
respondido por el Tom Carpenter
0

TRISA y PORTA están en diferentes bancos, de acuerdo con la hoja de datos , por lo que debe configurar el registro STATUS correctamente antes de cada acceso.

De la "FIGURA 3-2: MAPA DE MEMORIA DE DATOS DE PIC16F627 Y PIC16F628", PORTA está en bank 0 , mientras que TRISA está en bank 1 .

    
respondido por el apalopohapa

Lea otras preguntas en las etiquetas