No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Programación de Microcontroladores PIC: Control de LED Básico

8/13
Recursos

¿Cómo comenzar a escribir tu primer código?

Iniciar tu viaje en la programación puede parecer desalentador, pero no hay nada más gratificante que ver funcionar ese primer código que has creado. Vamos a adentrarnos en cómo estructurar un archivo principal de tu proyecto y entender su funcionalidad.

¿Qué es un archivo "Main"?

El archivo "Main", generalmente llamado main.c, es el corazón de tu proyecto en C. Es el punto de entrada de tu aplicación donde el microcontrolador comienza a ejecutar las instrucciones.

  1. Crear el archivo:

    • Abre el editor de texto y crea un nuevo archivo llamado "main.c".
    • Este archivo solo puede existir una vez en todo tu proyecto.
  2. Agregar metadatos:

    • Incluye información sobre el autor y un breve comentario sobre la función del código para futuras referencias.

¿Cómo organizar las librerías necesarias?

Usar librerías es esencial para no reinventar la rueda y aprovechar código ya escrito y optimizado. Debes incluir las librerías que vayas a utilizar mediante el siguiente proceso:

¿Cómo incluir librerías?

Para utilizar una librería, se usa #include. Por ejemplo, puedes incluir una librería de configuración con el comando:

#include "configuraciones.h"
#include "18F45K50.h"

El código anterior asume que tienes un archivo de configuración y estás utilizando un microcontrolador específico.

¿Cómo definir la frecuencia del cristal?

Definir la frecuencia del cristal es crucial para asegurar que tu microcontrolador funcione correctamente:

#define _XTAL_FREQ 8000000

Esta línea indica que la frecuencia es de 8 MHz, esencial para las operaciones de tiempo.

¿Cómo iniciciar un ciclo básico para controlar un LED?

Una parte emocionante de programar un microcontrolador es poder manipular hardware directamente, como un LED. Vamos a ver cómo se configura un simple parpadeo de luz.

¿Cómo definir los pines de entrada y salida?

  1. Instrucción TRIS:
    • Usa TRISB0 = 0; para definir el pin RB0 como salida.
    • Un 0 representa una salida (output), mientras que un 1 sería una entrada (input), usado típicamente para botones o sensores.

¿Cómo crear un bucle infinito?

Para que el LED parpadee continuamente, utilizamos un bucle while que se ejecuta para siempre. Un ejemplo básico sería:

while(1) {
    RB0 = 1;         // Encender LED
    __delay_ms(1000); // Esperar 1 segundo
    RB0 = 0;         // Apagar LED
    __delay_ms(1000); // Esperar 1 segundo
}

¿Qué hacer si aparece un error?

La depuración es parte de la programación. Si el compilador indica un fallo, generalmente detalla el error en el output de la terminal. Por ejemplo:

  • El error expected ; sugiere que falta un punto y coma.
  • Revisa los mensajes de advertencia y error; proporcionan pistas valiosas sobre lo que podría estar mal.

Con el código escrito y sin errores de compilación, el siguiente paso es descargar el programa en el microcontrolador y observar cómo tu LED cobra vida. ¡Es fascinante ver el resultado tangible de tu código funcionando! Sigue fortaleciendo tus bases y explorando más el mundo de los microcontroladores.

Aportes 6

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

#define _XTAL_FREQ 8000000
void main (void){
    TRISBbits.RB0 = 0; 
    while (1){
        LATDbits.LATD0 = ~LATDbits.LATD0;
        __delay_ms(1000);
    }
    return;
}

Los microcontroladores disponen de muchos registros de control de sus periféricos, dentro de los cuales se encuentran los registros para configurar los puertos de I/O, puertos ADC, PWM, UART, SPI, USB, Interupciones.

#define _XTAL_FREQ 8000000 

#include <xc.h>
#include "config.h"

void main(void) {
    TRISB0 = 0;//puerto RB0 como salida, El purto B tiene 8 pines I/O, se direccionan desde el 0 hasta el 7
    while(1){
        //RB0 = 1;//pone un valor alto en el pin PORTB-0
        LATB = 1;//pone un valor alto en el pin PORTB-0, los otros puertos de PORTB son cero.
        __delay_ms(1000);//El microcontrolador se mantiene en ésta posición por 1.000 mili-segundos.
        RB0 = 0;//pone un valor bajo en el pin PORTB-0
        __delay_ms(1000);
    }
    return;
}

amigo por que usas delays. Brooo brooo espero que sea solo par el ejemplo del led. aun asi es buenas practicas no usar delays por que dejan colgado tu programa. se recomienda el uso del sysTick

Este procedimiento SOLAMENTE VA A FUNCIONAR si lo hacen con el PIC 18F4550, si requieren utilizar otro aunque sea la mismo Familia y gama (por ejemplo: PIC 18F4523).

No va a funcionar debido a que los header (xc.h) son muy diferentes. Así como también la manera de definir nombres y el status de los puertos.
Les dejo un ejemplo para el 18F4523:

#include <xc.h>
#include "18F4523-config.h"
#define _XTAL_FREQ 8000000
//#include "flex_lcd.h"
#include<string.h>
#include<stdio.h>

//#include "i2c/i2c.h"

//#define SW1 PORTCbits.RC3
//#define SW2 PORTCbits.RC2
//#define SW3 PORTCbits.RC1
#define LED_1 PORTCbits.RC2
//#define LED_2 PORTDbits.RD2
//#define LED_3 PORTDbits.RD3

Excelente clase