Práctica 1 con Miuva. Parpadeo de LED-RGB con PIC C

[fusion_builder_container hundred_percent=”no” equal_height_columns=”no” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” background_color=”” background_image=”” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” parallax_speed=”0.3″ video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” overlay_color=”” overlay_opacity=”0.5″ video_preview_image=”” border_size=”” border_color=”” border_style=”solid” padding_top=”” padding_bottom=”” padding_left=”” padding_right=””][fusion_builder_row][fusion_builder_column type=”1_1″ layout=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” border_position=”all” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” center_content=”no” last=”no” min_height=”” hover_type=”none” link=””][fusion_text]

El objetivo de esta práctica es familiarizarse con Miuva y los recursos que tiene, entender el funcionamiento del led RGB y como encenderlo o apagarlo utilizando PIC C.

Procedimiento

Un led RGB está compuesto básicamente por tres leds diferentes, uno rojo (Red), uno verde (Green) y uno azúl (Blue). De forma (como posteriormente veremos) que con estos tres colores y sus variaciones en intensidad podamos obtener una gama mayor de colores.

Imagen1. Led RGB de Miuva

Dentro de Miuva el led RGB está conectado de la siguiente forma (Imagen 2).

Imagen2. Esquema de conexiones de led RGB en Miuva

Por la forma en la que está conectado el led RGB en Miuva es necesario que enviemos un “0” lógico para encenderlo. El valor de salida de los puertos puede controlarse tanto para todo el puerto como para algún pin específico del mismo.

Modificar el valor de un solo pin:

output_low(PIN_E0);     //Manda una señal en bajo al pin E0
output_high(PIN_E0);    //Manda una señal en alto al pin E0
output_toggle(PIN_E0);  //Invierte la señal actual del pin E0

Modificar el valor de todo el puerto:

output_e(0b00000111)    //Manda una señal en alto a los bits 0, 1 y 2 del puerto E

En los PICs existe un registro llamado TRISx el cual está asociado a definir si un puerto será usado como entrada o salida, en este registro asignamos un “1” lógico a los pines del puerto que serán entradas y un “0” a los que serán salidas. Por ejemplo: Para definir los pines del puerto E como salidas (por que ahí están conectados los leds) el registro TRISE tiene que tener el valor 0x00. Esto lo hacemos con la siguiente línea de código:

set_tris_e(0x00);

Como el valor por default del puerto E es 0x00 (0 en Hexadecimal) los tres colores del led estarán encendidos por lo tanto es necesario que los apaguemos al principio de nuestro código, poniéndoles en un uno lógico. Esto puede realizarse con cualquiera de las siguientes líneas:

output_e(0b00000111);  //Binario
output_e(0x07);        //Hexadecimal
output_e(7);           //Decimal

Con estas funciones ya podemos encender o apagar el led RBG de Miuva, ahora solo queda definir un intervalo de tiempo en el que va a parpadear el led, por ejemplo 200 milisegundos, para esto existe una función con la cual podemos dejar al PIC en “pausa”:

delay_ms(200);   //Retardo de 200 milisegundos

Ahora solo queda definir un “ciclo infinito” para que Miuva se encargue de repetir el proceso de:

Encender led -> Esperar 200ms -> Apagar led -> Esperar 200ms

Esto lo podemos hacer de diferentes formas, con un ciclo while o for; por ejemplo:

while(true){
     //Todo lo que esté aquí dentro se repetirá infinitamente
}

Con esto podemos armar el siguiente código con el cual el led RGB de Miuva se encenderá y apagará cada 200 milisegundos.

Código en PIC C:

#include <18f4550.h>          // la librería del PIC
#Fuses   HSPLL, NOWDT, NOPROTECT, NOLVP, NODEBUG, USBDIV, PLL2, CPUDIV1, VREGEN
#use     delay (clock=48M)        //Seleccionamos la frecuencia de reloj de 48MHz   
#use     standard_io(e)       //Preconfiguración del puerto E
void main(){                  //Función principal
   set_tris_e(0x00);          //Configuramos el puerto E como salida
   output_e(0x07);            //Apagamos el led RGB
   while(true){               //Inicia el Ciclo infinito
      output_toggle(PIN_E1);  //Invertimos el valor actual del Pin 1 del puerto E
      delay_ms(200);          //Esperamos 200 milisegundos
   }                          //Acaba el ciclo infinito
}                             //Acaba la función principal

Observa el video demostrativo

Descarga el proyecto en PIC C o Mikro C

Menú