Está en la página 1de 17

INSTITUTO TECNOLÓGICO

DE LÁZARO CÁRDENAS

PRÁCTICA 1.2.

ALUMNOS: JAIME HUMBERTO GARCÍA VALLE 20560102

ARTURO JOREL AYALA CRUZ 20560024

CARRERA: INGENIERÍA ELECTRÓNICA

PROFESOR: M.C. JULIO CÉSAR GALLO SÁNCHEZ

MATERIA: APLICACIONES DE MICROCONTROLADORES

UNIDAD 1: MICROCONTROLADORES

CD Y PTO. LÁZARO CÁRDENAS MICHOACÁN JUEVES, 14 DE SEPTIEMBRE DE 2023


71S Aplicaciones de Microcontroladores Ingeniería Electrónica

ÍNDICE

Introducción....................................................................................................................................... 1
Material .............................................................................................................................................. 3
Equipo ................................................................................................................................................ 3
Desarrollo ......................................................................................... ¡Error! Marcador no definido.
Funcionamiento del código ............................................................................................................. 4
Prueba del programa ....................................................................................................................... 8
Código del programa ...................................................................................................................... 12
Conclusión........................................................................................................................................ 14
Bibliografía ...................................................................................................................................... 15

i
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Introducción

En esta práctica se desarrollará un programa que pueda encender con 5 diferentes secuencias
8 LEDs conectados al puerto B del microcontrolador. También habrá 2 botones pulsadores
conectados a los pines C0 y A4 respectivamente, estos botones serán etiquetados como UP y
DOWN respectivamente. Con el botón UP será posible incrementar la velocidad con la que
la secuencia se ejecuta, con el botón DOWN se podrá decrementar esta velocidad y al
presionar ambos botones a la vez se cambiará a la secuencia siguiente.

La lógica con la que funcionará el programa es muy sencilla, ya que es posible utilizar el
método de detección de pulsos utilizado en la Práctica 1, esto con la finalidad de evitar los
posibles errores por el funcionamiento físico de los botones pulsadores. De igual forma se
planea que los botones UP y DOWN solo puedan iterar entre un rango limitado de
velocidades para evitar cualquier problema con el tamaño de las variables declaradas.
Además, cuando se llegue a la última secuencia después de haber pasado por las otras 4 y se
vuelva a presionar ambos botones a la vez, se reseteará a la primera secuencia de todas para
volver a comenzar. El diagrama eléctrico propuesto para la práctica se muestra en la Figura
1.

1
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

5V
470Ω

RESET 39kΩ 470Ω

470Ω
MCLR/Vpp/RE3 1 40 RB7
RA0 2 39 RB6 470Ω
RA1 3 38 RB5
470Ω
RA2 4 37 RB4
DOWN
RA3 5 36 RB3

PIC18F45K50
470Ω
RA4 6 35 RB2
RA5 7 34 RB1
5V 470Ω
RE0 8 33 RB0
4.7kΩ
RE1 9 32 VDD 5V
470Ω
RE2 10 31 VSS
VDD 11 30 RD7
VSS 12 29 RD6
5V
RA7 13 28 RD5
UP
RA6 14 27 RD4
RC0 15 26 RC7
RC1 16 25 RC6
5V
RC2 17 24 D+
4.7kΩ
VUSB3V3 18 23 D-
RD0 19 22 RD3
RD1 20 21 RD2

Figura 1.- Diagrama eléctrico propuesto para la práctica.

2
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Material

1. Tarjeta de evaluación µvva (Miuva) con PIC18F45K50.


2. Cable Dupont.
3. Cable Micro USB.
4. Módulo de 8 LEDs cátodo común.
5. Botón pulsador.
6. Resistor de 4.7 kΩ.
7. Protoboard

Equipo

1. Computadora con los softwares MPLAB IDE, CCS y PICkit 2 instalados.

3
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Desarrollo

Funcionamiento del código

Los archivos de cabecera siguientes sirven para importar al programa la librería del
Microcontrolador PIC18F45K50, desactivar el WatchDog y establecer una frecuencia de
trabajo de 48 MHz.

#include "18F45k50.h"
#fuses NOWDT
#use delay(internal=48MHz)

El pin PC0 se define como UP, en este puerto ya se encuentra disponible un botón pulsador
en la tarjeta Miuva. PA4 se declara como DOWN al cual se le conectará un botón con una
resistencia de pull-down.

#define UP PIN_C0
#define DOWN PIN_A4

Se declaran constantes tipo char para guardar los valores correspondientes a las secuencias
que se mostrarán por los LEDs, estos valores fueron dados pensando en que cada LED se
encenderá al sacar un 1 por el pin correspondiente.

Const char
Serie1[9]={0X00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF
};
const char Serie2[6]={0x81,0xC3,0xE7,0xFF,0xE7,0xC3};
const char Serie3[2]={0x55,0xAA};
const char
Serie4[14]={0x03,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0xC
0,0x60,0x30,0x18,0x0C,0x06};

4
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

const char
Serie5[16]={0x80,0x40,0x20,0x10,0x80,0x40,0x20,0x10,0x0
1,0x02,0x04,0x08,0x01,0x02,0x04,0x08};

La variable “vel” será utilizada para guardar el valor del retardo que se aplicará a la secuencia
tras presionar alguno de los botones, la variable “ser” guardará la secuencia seleccionada, las
variables “i-n” son variables de apoyo para poder iterar en cada una de las secuencias y por
último las variables “UPA” y “DOWNA” serán utilizadas para guardar los estados de los
botones, necesario para poder detectar el flanco.

long vel=30;
char i=1,ser=0,j=0,k=0,l=0,m=0,n=0;
char UPA=0, DOWNA=0;

Se da inicio a la función principal y se configura el puerto B como salida ya que por aquí se
sacarán los valores de la secuencia para encender los LEDs correspondientes y los puertos C
y A como entrada ya que aquí se encuentran los dos botones.

void main(void)

{
set_tris_b(0);
set_tris_a(1);
set_tris_c(1);

Se inicia el ciclo infinito y se hace un switch-case con “ser” como variable sensible ya que
esta contiene que secuencia se debe ejecutar. En cada caso de “ser” se escribe en el puerto B
el valor de la secuencia correspondiente según el valor de la variable asignada a esta, después
de cada escritura se incrementa dicha variable para así en la siguiente iteración escribir el
valor siguiente de la secuencia.

5
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

for(;;)
{
switch(ser)
{
case 0:output_b(Serie1[j]);j++;if(j>=9)j=0;break;
case 1:output_b(Serie2[k]);k++;if(k>=6)k=0;break;
case 2:output_b(Serie3[l]);l++;if(l>=2)l=0;break;
case 3:output_b(Serie4[m]);m++;if(m>=14)m=0;brea;
case 4:output_b(Serie5[n]);n++;if(n>=16)n=0;brea;
}

El ciclo for de 5 iteraciones servirá para poder testear los valores de los botones 5 veces en
cada paso de la secuencia, de modo de reducir la probabilidad de que el microcontrolador no
detecte algún pulso de botón. Por ello el valor máximo de “vel” es 100, para tener como
retardo máximo medio segundo.

for(i=1;i<=5;i++)
{
delay_ms(vel);

El detector de que los dos botones están siendo presionados consta de un If con dos
condiciones, las cuales son que cada botón esté en estado 1. Cuando se cumpla esta condición
la variable “ser” incrementará para poder hacer el cambio de secuencia del switch-case, si
“ser” es mayor o igual a 5 se establece a 0 para volver a empezar desde la primera secuencia.
Con el while y las mismas condiciones del If esperamos hasta que los botones sean liberados
para realizar el cambio y así evitar algún efecto de rebote o de velocidad.

if(input(DOWN) && input(up))


{
ser++;
if(ser>=5) ser=0;
delay_ms(2);
while(input(DOWN) && input(up));
}

6
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

El siguiente If estará detectando el flanco positivo del botón UP, gracias a la condición de
que el valor actual sea 1 y que el anterior sea 0. Al darse esta condición la variable “ver” será
disminuida en 10 para poder incrementar la velocidad de la secuencia, además se establece
un límite de 10 para esta con If(vel<=10) vel=10; para que el retardo mínimo sea de 50 ms.

if(input(UP) && UPA==0)


{
vel -= 10;
if(vel<=10) vel=10;
delay_ms(2);
}

En el siguiente botón se procede de la misma forma, pero esta vez la variable “vel” se
incrementará en 10 (para disminuir la velocidad de la secuencia) y se le limita a un máximo
de 100 para que el retardo máximo sea de medio segundo.

if(input(DOWN) && DOWNA==0)


{
vel += 10;
if(vel>=100) vel=100;
delay_ms(2);
}

Por último, se guardan los valores de los botones en las variables correspondientes para poder
detectar cualquier flanco positivo próximo.

DOWNA= input(DOWN);
UPA= input(UP);
}
}
}

7
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Prueba del programa

Primeramente se descarga el programa en la tarjeta Miuva, mostrada la Figura 2, y se realizan


las conexiones correspondientes para comprobar su funcionamiento empleando un módulo
LED (Figura 3), tal como se muestran en la Figura 4.

Figura 2.- Tarjeta de evaluación µvva (Miuva) con PIC18F45K50.

Figura 3.- Módulo LED de 8 bits.

8
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Figura 3.- Esquema de conexiones para la tarjeta Miuva con módulo LED y botón.

A continuación se muestran cinco capturas representativas del funcionamiento de las


secuencias establecidas, en la Figura 4, 5, 6, 7 y 8respectivamente.

Figura 4.- Secuencia 1.

9
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Figura 5.- Secuencia 2.

Figura 6.- Secuencia 3.

Figura 7.- Secuencia 4.

10
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Figura 8.- Secuencia 5.

11
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Código del programa

#include "18F45k50.h"
#fuses NOWDT
#use delay(internal=48MHz)

#define UP PIN_C0
#define DOWN PIN_A4

const char Serie1[9]={0X00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};


const char Serie2[6]={0x81,0xC3,0xE7,0xFF,0xE7,0xC3};
const char Serie3[2]={0x55,0xAA};
const char
Serie4[14]={0x03,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0xC0,0x60,0x30,0x18,0
x0C,0x06};
const char
Serie5[16]={0x80,0x40,0x20,0x10,0x80,0x40,0x20,0x10,0x01,0x02,0x04,0x08,0
x01,0x02,0x04,0x08};

long vel=30;
char i=1,ser=0,j=0,k=0,l=0,m=0,n=0;
char UPA=0, DOWNA=0;

void main(void)
{
set_tris_b(0);
set_tris_a(1);
set_tris_c(1);
for(;;)
{
switch(ser)
{
case 0: output_b(Serie1[j]);j++;if(j>=9) j=0;break;
case 1: output_b(Serie2[k]);k++;if(k>=6) k=0;break;
case 2: output_b(Serie3[l]);l++;if(l>=2) l=0;break;
case 3: output_b(Serie4[m]);m++;if(m>=14) m=0;break;
case 4: output_b(Serie5[n]);n++;if(n>=16) n=0;break;
}
for(i=1;i<=5;i++)
{
delay_ms(vel);
if(input(DOWN) && input(up))
{
ser++;
if(ser>=5) ser=0;
delay_ms(2);
while(input(DOWN) && input(up));
}

if(input(UP) && UPA==0)


{

12
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

vel -= 10;
if(vel<=10) vel=10;
delay_ms(2);
}
if(input(DOWN) && DOWNA==0)
{
vel += 10;
if(vel>=100) vel=100;
delay_ms(2);
}
DOWNA= input(DOWN);
UPA= input(UP);
}
}
}
for(i=1;i<=5;i++)
{
delay_ms(Table[sel]);
if(input(BOT1) && BOTLA==0)
{
sel++;
if(i>=9) sel=0;
delay_ms(2);
}
BOTLA= input(BOT1);
}
}
}

13
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Conclusión

En esta segunda práctica de la materia se ha podido reforzar aún más los conocimientos sobre
las funciones para trabajar con entradas y salidas digitales y el cómo utilizarlas a la par de
funciones del lenguaje de programación C para lograr diferentes tipos de acciones del
microcontrolador.

Lo más relevante que ha dejado esta práctica es el uso de todo un puerto del microcontrolador
como salida, en contraste con la práctica 1 que solo se utilizaba un pin. El hecho de utilizar
todo el puerto nos permite realizar secuencias más complejas y con una gran cantidad de
combinaciones (por el contrario, al utilizar un pin solo se puede variar la salida en 1 y 0).
También nos permitió el saber tratar dos entradas de datos (de un solo bit) para modificar el
funcionamiento del programa en función de estas. Al igual que en el programa anterior, fue
necesario observar y saber evitar todos los fenómenos físicos y de software que afectaban el
funcionamiento óptimo del programa.

14
Reporte Práctica 1.2
71S Aplicaciones de Microcontroladores Ingeniería Electrónica

Bibliografía

1. Fabricante: Microchip.
Título: PIC18(L)F2X/45K50 Datasheet.
Editorial: Microchip.

2. Autor: Julio Cesar Gallo Sánchez.


Título: Programando el Microcontrolador PIC18F4550 en Leguaje C con el
compilador CCS en MPLAB.
Edición: 1era Edición.

3. Autores: Eduardo García Breijo.


Título: Compilador C CCS y simulador PROTEUS para Microcontroladores PIC.
Edición: Primera Edición.
Editorial: Alfaomega.

15
Reporte Práctica 1.2

También podría gustarte