El circuito PIC básico no funciona

1

Acabo de empezar en el mundo de los microcontroladores, y el primer microcontrolador. Elegí trabajar con el PIC de Microchip. El PIC que estoy usando es el PIC16F877A. Estoy usando MPLAB IDE y HI-TECH C. Estoy tratando de hacer un programa extremadamente simple que encienda un LED. Este es el código que estoy usando:

#include<htc.h>
#define _XTAL_FREQ 8000000
__CONFIG(UNPROTECT & PWRTDIS & WDTDIS & HS & LVPDIS); 

int main()
{
    TRISB0 = 0;
    RB0 = 1;
    while(1);
}

Cuando conecto el PIC a mi circuito, el LED no se enciende. Aquí está mi diagrama de circuito y una imagen de mi circuito:

Algunas otras notas sobre mi circuito:

  • Estoy usando una batería de 9 voltios conectada a un regulador 7805 para la fuente de alimentación.
  • He medido el voltaje proveniente del pin RB0 con un multímetro y mide 0.0 V.
  • Si no hay ningún problema con mi circuito, podría haber programado mal el chip.
  • Mis condensadores conectados con mi cristal tienen 22 pf, no 22 µf como en el esquema.
  • He colocado condensadores de 100 µf entre los pines 11 y 12 y entre 31 y 32.
pregunta popgalop

3 respuestas

1

Como es imposible poner código en los comentarios, pondré mi sugerencia para el código que establece los bits de configuración correctamente aquí. El problema es que no tengo este compilador, así que no puedo estar seguro de los nombres (LVPDIS en lugar de, digamos, LVP_OFF en ensamblador) pero si estoy equivocado, alguien podría comentar (?)

#include <htc.h>

#define _XTAL_FREQ 8000000

__CONFIG(UNPROTECT & PWRTDIS & WDTDIS & HS & LVPDIS);

int main()
{
    TRISB0 = 0;
    RB0 = 1;
    while(1);
}
    
respondido por el carveone
1

¿Ha intentado comprobar el pin clko para ver si está recibiendo una señal de reloj? Conéctalo y asegúrate de que el chip esté funcionando. Si no tiene un analizador de alcance o de usb logic, podría poder ver un LED brillar ligeramente desde ese pin.

¿Ha medido el Vdd para asegurarse de que está suministrando el nivel de potencia correcto (entre 4.0 y 5.5)?

Como RB0 también es un pin de interrupción externo, intente mover el LED a pin34 y cambiar su código para usar RB1 en su lugar:

TRISB1 = 0;
RB1 = 1;
    
respondido por el NateFisher
1
  1. No hay una tapa de desvío a la vista. Coloque 100 nF a 1 µF de cerámica directamente entre cada pin de potencia y tierra.
  2. Mostrar solo los números de pin no nos muestra la función de pin. Es imposible ver qué se conectó a qué pin sin buscar el pinout en la hoja de datos. Esta información debe estar en su esquema.
  3. 22 µF es aproximadamente 6 órdenes de magnitud, demasiada capacitancia para el cristal y su circuito de control. Esto definitivamente evitará que el oscilador se ejecute, y por lo tanto el PIC se ejecute.
  4. No hay resistencia en serie con el LED, por lo que consumirá demasiada corriente. Eso puede cargar el suministro, dañar el LED y / o dañar el controlador de salida de pin PIC.
  5. Tenga en cuenta que cualquier pin que pueda ser una entrada analógica se despierta de esa manera por defecto. No recuerdo la parte superior de mi cabeza si el pin que está tratando de usar es uno de ellos, pero es una buena idea ir a los módulos A / D y / o comparadores y asegurarse de que todos los pins estén configurados como digitales .
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas