¡Aprende Fácil! Cómo Declarar y Usar un Botón en PIC con Lenguaje C Paso a Pasopost-template-default single single-post postid-46 single-format-standard et_pb_button_helper_class et_fixed_nav et_show_nav et_secondary_nav_enabled et_primary_nav_dropdown_animation_fade et_secondary_nav_dropdown_animation_fade et_header_style_left et_pb_footer_columns4 et_cover_background et_pb_gutter et_pb_gutters3 et_right_sidebar et_divi_theme et-db
771 715 4434

Los microcontroladores PIC son circuitos integrados fabricados de Silicio que pueden programarse para ejecutar una secuencia de instrucciones automáticamente al conectarlos a una fuente de energía. El programa se escribe en un computador en un ambiente de programación adecuado, por ejemplo en lenguaje C, y luego se transfiere como código binario a la memoria de programa del microcontrolador para su ejecución.

En este tutorial, exploraremos conceptos básicos acerca de la arquitectura y programación de los microcontroladores PIC, centrándonos en cómo declarar y usar un botón. Esta información está dirigida a todas las personas que se han preguntado alguna vez qué es un PIC, para qué sirve y cómo puede ser utilizado en la vida real.

El lenguaje C es universalmente conocido debido a su gran versatilidad para el desarrollo de aplicaciones y se lo enseña como lenguaje básico de programación en muchas universidades e institutos educativos. Es un lenguaje de alto nivel, lo que lo hace sumamente potente con respecto al popular lenguaje ensamblador.

Conceptos Fundamentales de Microcontroladores

Para entender la programación de PIC, es útil conocer algunos términos clave:

  • Microcontrolador (μC, UC o MCU): Es un circuito integrado que puede programarse para realizar tareas de forma automática. Las instrucciones se almacenan en un espacio de memoria específicamente destinada a ese propósito.
  • Periféricos de entrada/salida (E/S): Permiten la comunicación del microcontrolador con su entorno físico recibiendo y entregando datos en forma de señales eléctricas. Un botón es un ejemplo de un periférico de entrada.
  • Programa: Una secuencia de instrucciones, escritas en un determinado lenguaje de programación para realizar una tarea específica en un microcontrolador.
  • Pin: Cada una de las patillas o alfileres del microcontrolador, que se utilizan para conectar componentes externos como botones o LEDs.

Entornos de Desarrollo y Compiladores

Para programar PIC, se utiliza un software de computador conocido como IDE (Ambiente de Desarrollo Integrado) que incluye un compilador. El compilador es el software que se encarga de convertir el código escrito en lenguaje C (lenguaje humano) a código de máquina (lenguaje de máquina), también conocido como código ejecutable o .hex.

Lea también: IVA 21% Excel

Algunos de los entornos populares para la programación de PIC en C son MikroC y CCS:

  • MikroC PRO para PIC: Es un compilador con todas las funciones ANSI C para dispositivos PIC de Microchip®. Ofrece un IDE intuitivo, un compilador potente con optimizaciones avanzadas, y muchas bibliotecas de hardware y software, además de herramientas adicionales. Es una solución popular para iniciarse en el mundo de los microcontroladores debido a su facilidad de uso y un amplio sistema de ayuda.
  • CCS C Compiler (PCW): Es otro compilador ampliamente utilizado para aprender a programar en lenguaje C con PIC.

Aunque las librerías preestablecidas de MikroC para LCD, Teclado, Botones, ADC, etc., son sumamente fáciles de usar, ocupan demasiado espacio en memoria si se comparan con códigos generados con CCS, lo que puede afectar la eficiencia del programa. Además, las funciones propias de MikroC pueden ser muy cerradas, limitando, por ejemplo, los modos de adquisición de datos.

Configuración del Proyecto en MikroC

Al iniciar un nuevo proyecto en MikroC PRO for PIC, es esencial configurar ciertos parámetros:

  1. Abrir el programa y crear un nuevo proyecto (Project > New Project).
  2. Establecer la frecuencia de trabajo del microcontrolador en Device Clock (por ejemplo, 4MHz, lo que resulta en una base de tiempo de 1us por ciclo de instrucción).
  3. Crear una carpeta para el nuevo proyecto y el archivo de proyecto (.mcppi).
  4. Establecer los bits de configuración del microcontrolador PIC. Esto es un paso absolutamente necesario e imprescindible. Un ejemplo de configuración sería:
    • Oscillator: INTOSC: I/O on RA6/OSC2, I/O on RA7/OSC1
    • Watchdog Timer: Off
    • Power Up Timer: Enabled
    • Master Clear Enable: Disabled
    • Brown Out Detect: Enabled
    • Low Voltage Program: Disabled
    • Data EE Read Protect: Disabled
    • Code Protect: Off
    La configuración del oscilador es uno de los puntos más importantes, ya que genera la base de tiempo para la ejecución de las instrucciones.
  5. El microcontrolador PIC ejecuta las instrucciones que se encuentran dentro de la función principal void main(){//Instrucciones...}. Las partes restantes sirven como código complementario para la ejecución correcta de dichas instrucciones.

Las definiciones de puertos como PORTB y PORTC, que simplifican la escritura, se sustraen de librerías propias del PIC que el compilador carga automáticamente al especificar el modelo de microcontrolador en la configuración del proyecto.

Declaración y Lectura de Botones

La pulsación de un botón es una de las entradas más comunes en proyectos con microcontroladores. A continuación, se explora cómo manejarla con diferentes enfoques.

Lea también: Guía IVA reducido

Uso de la Función Button() en MikroC

En MikroC, se puede utilizar la función Button() para detectar la pulsación de un botón. El siguiente código muestra un ejemplo de su uso para invertir el estado de PORTC al detectar una transición:

do { if (Button(&PORTB, 0, 1, 1)) { // Detecta un uno lógico oldstate = 1; // Actualiza bandera } if (oldstate && Button(&PORTB, 0, 1, 0)) { // Detecta transición de uno a cero PORTC = ~PORTC; // Invierte PORTC oldstate = 0; // Actualiza bandera }} while(1);

En el ejemplo Button(&PORTB, 0, 1, 1), se asume que uno de los números (por ejemplo, el segundo `0`) significa el número de bit del Puerto B. El tercer número (`1`) se interpreta como un tiempo de retardo para el antirrebote, y el cuarto número (`1` o `0`) indica el voltaje TTL que debe tener el pin para entrar al bucle o el tipo de transición lógica a detectar.

Lectura Básica de Entradas en C (CCS Compiler)

Para programas más sencillos, o cuando se desea una mayor eficiencia o control, se pueden usar instrucciones básicas para leer un pin y actuar en consecuencia. Por ejemplo, en CCS C Compiler, la función input() se utiliza para leer el estado de un pin:

while(true){ if(input(pin_A1)==0) // Si el botón en pin_A1 es presionado (asumiendo pull-up) output_low(LED); if(input(pin_A1)==1) // Si el botón en pin_A1 es liberado output_high(LED);}

Este código, como se menciona en el material, presenta un problema: al presionar el botón el LED enciende, pero al soltarlo se apaga. Esto ocurre porque el programa simplemente refleja el estado instantáneo del botón, sin "recordar" un estado previo o cambiarlo de forma permanente con una única pulsación.

Consideraciones sobre el Antirrebote (Debouncing)

Un problema común al usar botones físicos es el "rebote". Cuando un botón se presiona o se suelta, el contacto eléctrico no es perfecto y puede generar múltiples señales eléctricas rápidas antes de estabilizarse. Esto puede llevar a que el microcontrolador interprete una sola pulsación como varias, causando un comportamiento errático.

Lea también: ¿Cómo localizar tus XML del SAT?

Existen varias técnicas para evitar los rebotes (debouncing):

  • Retardo de software: Consiste en, después de detectar una pulsación inicial, esperar un pequeño tiempo (unos milisegundos) antes de volver a leer el pin para confirmar su estado. Esto se puede lograr con funciones como delay_ms(tiempo_en_milisegundos). Es fundamental realizar una segunda lectura después del retardo para asegurar que el voltaje deseado se mantiene y no fue un rebote transitorio.
  • Antirrebote por hardware: Utilizar componentes electrónicos como condensadores y resistencias para filtrar las señales del botón antes de que lleguen al microcontrolador.

Control de Salidas con Botones: Interruptor Digital

Para lograr que un botón funcione como un interruptor digital (encender un LED con una pulsación y apagarlo con la siguiente), es necesario implementar una lógica que cambie el estado de la salida en cada pulsación, en lugar de simplemente reflejar el estado del botón. La instrucción output_toggle(pin_x), donde 'x' se reemplaza por el pin que queremos cambiar de nivel, es una herramienta útil para esto, ya que invierte el estado lógico de una salida (si está en 1, cambia a 0 y viceversa).

Por ejemplo, si el objetivo es un LED on/off al presionar y soltar un botón conectado al pin_A1 y el LED está en el pin_b0, se requerirá una lógica que detecte el flanco de la pulsación (cuando se presiona o suelta) y cambie el estado del LED utilizando output_toggle(), posiblemente combinado con un sistema de antirrebote y una variable de estado para recordar si el LED está encendido o apagado.

Variables y Tipos de Datos en C

Las variables son fundamentales en la programación para almacenar datos. En C, para utilizar una variable, primero hay que declararla siguiendo la sintaxis: tipo nombre_variable [=valor];. Lo que va entre corchetes es opcional, ya que las variables pueden inicializarse o no al declararlas. Una misma línea puede declarar varias variables: tipo nombre_variable1,nombre_variable2,....;, terminando siempre con punto y coma.

Tipos de Datos Básicos para Compiladores PIC

El tipo de datos es obligatorio y le indica al compilador cuántas celdillas de memoria debe reservar para almacenar el valor de la variable. Los tipos de datos pueden variar ligeramente entre compiladores. A continuación, se presenta una tabla con tipos comunes:

Tipo (CCS/General C) Tamaño (bits) Rango de Valores (signed) Rango de Valores (unsigned)
bit 1 N/A 0 a 1
char 8 -128 a +127 0 a 255
short 8 N/A 0 a 255
int 16 -32768 a +32767 0 a 65535
long 32 -2.147.483.648 a +2.147.483.647 0 a 4.294.967.295
float 32 +/- 1.1754944E-38 a +/- 3.4028235E+38 N/A

Todos los tipos, excepto float, son por defecto sin signo, aunque pueden llevar el especificador unsigned o signed, y su rango de valores se ajustará accordingly.

El nombre de la variable no puede ser una palabra clave reservada del compilador. Puede contener letras (a-z, A-Z), números (0-9) y el símbolo de subrayado (_), pero el primer carácter no puede ser un número.

Ámbito de las Variables

Las variables pueden ser de dos tipos según dónde se declaren:

  • Globales: Se declaran fuera de las funciones y pueden ser utilizadas en cualquier parte del programa. Se destruyen al finalizar la ejecución del programa.
  • Locales: Se declaran dentro de la función en la que van a ser utilizadas. Solo existen dentro de esa función.

Simulación con Proteus

El simulador Proteus es una herramienta muy útil para probar y depurar programas para PIC antes de implementarlos en hardware real. Permite simular el circuito paso a paso y observar su comportamiento.

Para simular un programa en Proteus:

  1. Arrancar el simulador Proteus y colocar los dispositivos necesarios en el área de trabajo, como el PIC y un Terminal Virtual si se usa comunicación serial.
  2. Conectar los pines del PIC con los dispositivos correspondientes. Por ejemplo, el pin de transmisión de datos (TXD) del PIC se conecta al pin de recepción de datos (RXD) del Terminal Virtual.
  3. Cargar el programa en el PIC virtual haciendo doble clic sobre el componente del PIC y seleccionando el archivo con extensión .cof (para simulación paso a paso y depuración) o .hex (para simulación normal).
  4. Asegurarse de que la frecuencia del reloj del PIC en Proteus coincida con el valor establecido en el programa (por ejemplo, 4 MHz).
  5. Iniciar la simulación. Se podrá observar la ejecución del programa línea por línea o establecer puntos de interrupción para depurar el código.

tags: #como #declarar #un #boton #pic #c