Saludos!! Hace un par de días vi a una persona que recién comenzaba con XC8 e intentaba hacer un efecto similar al del auto fantástico, le di una checada a su código y vi que ya tenia demasiadas lineas (condicionales, casos, etc.), así que le propuse que pensara en una solución mas corta, al final le termine mostrando un ejemplo con operadores de desplazamiento, así que les comparto el pequeño ejemplo. Probablemente existan otras formas, incluso recuerdo que ya había compartido otro ejemplo con arrays, pero bueno esa es otra historia.
Circuito:
El circuito es muy básico, consta de 8 LEDs conectados el puerto B del microcontrolador, que por cierto en este caso es el PIC18F4620, usando el oscilador interno a 125KHz (le he prestado mi PIC-TRAINERv1 para que practique sus primeros programas).
Código:
Para realizar el código hemos usado principalmente los registros de desplazamiento, tanto a la izquierda, como a la derecha, con esto logramos hacer que el LED recorra de lado a lado.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************************************* | |
* | |
* Corrimiento de LEDs usando operador de desplazamiento | |
* | |
******************************************************************************* | |
* FileName: main.c | |
* Processor: PIC18F25K22 | |
* Complier: XC8 v1.42 & MPLAB X IDE v5.00 | |
* Author: Pedro Sánchez (MrChunckuee) | |
* Blog: http://mrchunckuee.blogspot.com/ | |
* Email: mrchunckuee.psr@gmail.com | |
* Description: Realizar un corriemiento en el puerto B, usando operador de | |
* dezplazamiento, el efecto resultante en los LEDs es el del | |
* auto fantastico | |
******************************************************************************* | |
* Rev. Date Comment | |
* v0.0.0 02/11/2018 - Creación del ejemplo | |
******************************************************************************/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <p18f4620.h> | |
#include "FUSES_Config.h" | |
//Declaramos variables y funciones globales | |
unsigned char count, i; | |
void Delay (int); | |
void main(void){ | |
OSCCONbits.IRCF=0b001; //Frecuencia 125KHz (ver datasheet) | |
ADCON1=0x0F; //Hacer digitales las salidas analógicas | |
TRISB=0x00; //RB como salida | |
LATB=0x00; //Salidas iniciales | |
while(1){ | |
count=1; | |
for(i=0;i<=8;i++){ | |
LATB=count; | |
count=count<<1; | |
Delay(2); | |
} | |
count=128; | |
for(i=0;i<=8;i++){ | |
LATB=count; | |
count=count>>1; | |
Delay(2); | |
} | |
} | |
} | |
//Función Delay m=2ms | |
void Delay(int m){ | |
volatile int k, j; | |
for(j=0; j<m; j++){ | |
for(k=0; k<63; k++) | |
Nop(); //Nop=1 ciclo de reloj | |
} | |
} |
Aquí un pequeño vídeo del circuito en funcionamiento (lamento que saliera de lado, fue la toma del celular):
Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.
Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.
Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.
0 Comentarios