INSTITUTO POLITECNICO NACIONAL
“UNIDAD PROFECIONAL INTERDICIPLINARIA EN
INGENIERIA Y TECNOLOGIAS AVANZADAS”
Profesor: Báez Joaquín
Grupo: 2MM10
Fecha: 14/12/23 INTEGRANTES:
Garcia Olivares Carlos Eduardo
Arzate Alvarez Daniel
Valderrama Barbosa Andres
MICROPROCESADORES, MICROCONTROLADORES E INTERFAZ |Entrega:14 /12/23
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
• OBJETIVO de la practica:
Elaborar el circuito y código de un contador ascendente de dos dígitos empleando en el
PIC18f4550.
Elaborar el circuito y código de la suma de 2 matrices 3x3 mostrando el resultado en una
LCD, empleando en el PIC18f4550.
• Marco Teórico:
Display 7 seg:
Un display de 7 segmentos ánodo común es un tipo de pantalla numérica que se utiliza
comúnmente para mostrar dígitos decimales del 0 al 9. Este tipo de display consta de siete
segmentos individuales dispuestos de manera que forman un "8" cuando están encendidos, lo que
permite representar cualquier dígito decimal.
LCD:
Una LCD 16x2 es un tipo de pantalla de cristal líquido (LCD, por sus siglas en inglés) que tiene
una capacidad de mostrar 16 caracteres en cada una de sus 2 líneas. Este tipo de pantalla es
comúnmente utilizada en proyectos electrónicos y dispositivos como pantallas de visualización en
microcontroladores, arduino y otros circuitos integrados. La especificación "16x2" se refiere a la
disposición de 16 caracteres a lo largo de 2 líneas, lo que significa que hay 16 caracteres en cada
línea y dos líneas de visualización en total. Estas pantallas son ampliamente utilizadas en la
construcción de prototipos y proyectos DIY debido a su facilidad de uso y versatilidad.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
MOC3021:
El MOC3021 es un dispositivo semiconductor que pertenece a la categoría de optoacopladores, también
conocidos como optoaisladores u octoacopladores. Estos componentes están diseñados para proporcionar
aislamiento eléctrico entre dos partes de un circuito, típicamente una sección de entrada (entrada de
control) y una sección de salida (carga). El término "octoacoplador" se utiliza porque a menudo incluyen
ocho elementos de acoplamiento óptico.
El MOC3021 en particular es un optoacoplador de salida de estado sólido (SSR, por sus siglas en inglés)
que integra un diodo emisor de luz (LED) y un fotosensor en un solo encapsulado. Su función principal es
permitir el control de dispositivos de carga, como relés o triacs, mediante una señal de control de baja
potencia sin la necesidad de un contacto eléctrico directo.
Algunas características típicas del MOC3021 incluyen:
• Diodo Emisor de Luz (LED): Emite luz cuando se aplica un voltaje adecuado.
• Fotosensor (Fototriac o Fotodiodo): Detecta la luz emitida por el LED.
• Aislamiento Eléctrico: Proporciona aislamiento galvánico entre la entrada y la salida, lo que ayuda
a prevenir la interferencia y aumenta la seguridad eléctrica.
Este dispositivo es comúnmente utilizado en aplicaciones de control de carga AC, como en el encendido y
apagado de dispositivos conectados a la red eléctrica. Por ejemplo, se puede emplear en circuitos de
control de iluminación, controladores de velocidad de motor, o en sistemas de control de potencia. El
MOC3021 es parte de la familia de dispositivos MOC30xx, cada uno con características específicas, pero
todos basados en el mismo principio fundamental de optoacoplamiento.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 9:
• EQUIPO Y MATERIAL:
Material para usar en la práctica:
Material: Equipo y Herramienta:
Cable estañado 22awg Resistencias (calculadas) Transistor Pinza corte y punta
BC 558
Protoboard Display DA05 PIC18F4550 Pickit 3
Placa de desarrollo Jumpers LCD 16x2
• DESARROLLO:
1) Para la parte del display se conectó el puerto D a la salida de los pines y se tomaron los pines B0 y B1
para la salida de los transistores que controlan la conexión de los display que son de ánodo común.
Imagen 9.1: Conexión displays a PIC18F4550
2) En el cogido se realizó una función con el nombre “imprime” la cual recibe un numero entre el
0 - 9 y lo manda por el puerto D.
3) En el código principal dentro de un ciclo infinito se realizó una anidación de ciclos for, en la
anidación más profunda durante 90 ciclos mientras se cambia la activación de cada display
por tiempos breves. Los 2 ciclos exteriores realizan el corrimiento de las unidades y decenas
acorde a como se cuenta comúnmente.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
Código en C display
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOLVP,BROWNOUT
#use delay(clock=20M)
#use fast_io(D)
#use fast_io(B)
int decenas=0;
int unidades=0;
int tiempo=0;
void imprime(int conta);
void main(){ // HEX MSB| |LSB
set_tris_D(00);
set_tris_B(00);
while(TRUE){
for( decenas=0; decenas< 9; decenas++)
{
for(unidades=0; unidades<=9; unidades++)
{
for( tiempo=0; tiempo<=90; tiempo++)
{
imprime(decenas);
output_B(0b01000000);
delay_ms(1);
imprime(unidades);
output_B(0b10000000);
delay_ms(1);
}
}
}
}
}
void imprime(int conta)
{
switch (conta)
{
case 0:
output_D(0b11000000);//0
break;
case 1:
output_D(0b11111001);//1
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
break;
case 2:
output_D(0b00100100);//2
break;
case 3:
output_D(0b10110000);//3 0x30
break;
case 4:
output_D(0b00011001);//4
break;
case 5:
output_D(0b00010010);//5
break;
case 6:
output_D(0b00000011);//6 0b00000011
break;
case 7:
output_D(0b11111000);//7
break;
case 8:
output_D(0b00000000);//8
break;
case 9:
output_D(0b00010000);//9
break;
default:
output_D(0xFF);// Todos on
break;
}
4) Para el segundo punto se realizó un nuevo programa y circuito ya que se utilizó por error
el mismo puerto para ambos casos.
Imagen 9.2: Conexión LCD 16x2 a
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
Código en C LCD
#include <18f4550.h>
#use delay (clock = 20M)
#include <LCD.c>
int A11,A12,A13,A21,A22,A23,A31,A32,A33;
int B11,B12,B13,B21,B22,B23,B31,B32,B33;
int C11,C12,C13,C21,C22,C23,C31,C32,C33;
void suma();
void main(){
lcd_init();
do{
suma();
// Mostrar C11 en el LCD
lcd_gotoxy(1, 1); printf(lcd_putc,"%d",C11);
// Mostrar C12 en el LCD
lcd_gotoxy(3, 1); printf(lcd_putc,"%d",C12);
// Mostrar C13 en el LCD
lcd_gotoxy(5, 1); printf(lcd_putc,"%d",C13);
// Mostrar C21 en el LCD
lcd_gotoxy(1, 2); printf(lcd_putc,"%d",C21);
// Mostrar C22 en el LCD
lcd_gotoxy(3, 2); printf(lcd_putc,"%d",C22);
// Mostrar C23 en el LCD
lcd_gotoxy(5, 2); printf(lcd_putc,"%d",C23);
// Mostrar C31 en el LCD
lcd_gotoxy(8, 1); printf(lcd_putc,"%d",C31);
// Mostrar C32 en el LCD
lcd_gotoxy(10, 1); printf(lcd_putc,"%d",C32);
// Mostrar C33 en el LCD
lcd_gotoxy(12, 1); printf(lcd_putc,"%d",C33);
}while (true);
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
}
void suma(){
A11=2; A12=3; A13=7;
A21=3; A22=8; A23=3;
A31=6; A32=4; A33=1;
B11=1; B12=1; B13=1;
B21=1; B22=1; B23=1;
B31=1; B32=1; B33=1;
C11=A11+B11; C12=A12+B12; C13=A13+B13;
C21=A21+B21; C22=A22+B22; C23=A23+B23;
C31=A31+B31; C32=A32+B32; C33=A33+B33;
• RESULTADOS OBTENIDOS:
Resultados obtenidos experimentalmente:
Imagen 9.3: Contador funcionando Imagen 9.3: LCD matrices funcionando
Explicación:
En la imagen 9.2 se puede apreciar el contador ascendente funcionando, la permanencia de cada número
es de alrededor de 1s y ya que el cambio en la activación de cada display es muy rápido no se puede
apreciar a simple vista. Por otro lado, en la imagen 9.3 muestra el arreglo que se hizo dentro de los 2
renglones de la matriz para poder observar el resultado de la suma de 2 matricez.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
• CONLUSIONES PRACTICA 9:
Alumno Conclusión:
Garcia Olivares Carlos Eduardo Para las aplicaciones vistas durante esta práctica, podemos
destacar ciertos puntos como el hecho de que el uso de la
multiplexación es de gran ayuda para el ahorro de puertos, asi
como de la simplificación de los diagramas eléctricos, es decir
que la aplicación del multitask permite no solo una mejora
considerable del espacio, si no una optimización de código.
Arzate Alvarez Daniel El circuito visto, puede no solo implementarse para un
contador, o incluso para un Display, podría usarse para más
números e incluso para un módulo de 8x8, por ejemplo,
mediante la multiplexación de los leds, que es “universal”
para este tipo de dispositivos, pudiendo realizar
animaciones, mensajes, relojes, etc...
Andres Valderrama Barbosa En esta practica se buscó demostrar distintas formas de enviar
información al usuario. En particular el uso de display facilita
bastante la impresión de números en un formato en el que las
personas están muy acostumbradas de ver, pero por el otro lado
con la LCD es posible enviar caracteres e información mucho mas
completa. En conclusión el uso de interfaces de usuario facilita y
hace más completos nuestros proyectos.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 11:
• EQUIPO Y MATERIAL:
Material para usar en la práctica:
Material: Equipo y Herramienta:
Cable estañado 22awg Resistencias (calculadas) MOC3031M Pinza corte y punta
Protoboard TRIAC BT136 PIC18F4550 Pickit 3
Placa de desarrollo Jumpers Push bottons PC
Capacitor 1.1uF Ventilador Clavija y
cable
• DESARROLLO:
1) Para esta práctica se utilizo el circuito de potencia de la practica 14 ya que realizan la misma función y
ya teníamos ese circuito armado, se siguió el circuito que se muestra a continuación.
Imagen 11.1: Conexión Ventilador a PIC18F4550
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
2) A continuación, se muestra el código empleado en el PIC18F4550 para el punto de los push
bottoms.
Código en C
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOLVP,BROWNOUT
#use delay(clock=20M)
#use fast_io(D)
#use fast_io(B)
int Flag=0;
void main(){ // HEX MSB| |LSB
set_tris_C(0xFF); // Entrada
set_tris_B(0X00); // Salida
while(TRUE){
//if(input(PIN_C1) != input(PIN_C2))
//{
if(input(PIN_C1)==1 && input(PIN_C2)==0 && Flag ==0)
//Encender Motor
{
Flag = 1;
output_B(0xFF);
}
if(input(PIN_C1)==0 && input(PIN_C2)==1 && Flag ==1)
//Apagar Motor
{
Flag = 0;
output_B(0x00);
}
//}
}
3) Para el segundo punto de la práctica que consiste en encender el botón por medio de la interfaz
se utilizaron los códigos e interfaz de prácticas pasadas.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
• RESULTADOS OBTENIDOS:
Resultados obtenidos experimentalmente:
Imagen 11.1: Ventilador AC
Imagen 11.2: Ventilador AC con interfaz
Explicación:
En la imagen 11.1 se puede apreciar el encendido del ventilador de AC por medio de un push bottom y em
la imagen 11.2 el encendido del mismo ventilador, pero a través de un push bottom virtual dentro de una
interfaz.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
• CONLUSIONES PRACTICA 11:
Alumno Conclusión:
Garcia Olivares Carlos Eduardo De otra manera es importante destacar que el uso de MOC como
de otros periféricos, nos permiten el control y manipulaciones
interfaces para el control de corriente alterna, sin necesidad de
arriesga el PIC, por lo cual, el uso de estos es muy favorable al
momento de diseñar aplicaciones que involucren esta tipo de
corriente.
Es impórtate el diseño de una buena etapa de control, como un
diseño de la etapa de potencia que permitan complementarse y
evitar fallas de tensión, entonces para ello es importante guiarse
con la datasheet.
Arzate Alvarez Daniel De esta práctica es similar a anteriores por el uso de
corriente alterna al igual que corriente directa para no dañar
ningún dispositivo que no pueda soportar dicha carga, como
el mismo PIC, y con ayuda del MOC se podrían usar otras
cosas aparte de un ventilador, como bombas, focos,
etcétera
Andres Valderrama Barbosa En esta practica se utilizo las propiedades aislantes de los
optoacopladores para encender y apagar una carga de corriente
alterna con el pic, lo cual es un avance mucho mas grande porque
nos permite acceder a aplicaciones cada vez mas complejas y sin
la limitante de la potencia. En esta practica pudimos acercarnos a
aplicaciones de PLCs industriales.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 12
EQUIPO Y MATERIAL:
Material para usar en la práctica:
Material: Equipo y Herramienta:
Cable estañado 22awg Potenciómetro Pinza corte y punta
Protoboard Pushbutton Multímetro
Capacitor 22uF LEDs Puntas banana caimán
Cristal de cuarzo Fuente de alimentación
Motor DC
20MHz
DESARROLLO:
PRACTICA 12: INTERRUPCIONES
1) Implementación: Desarrollar un código en c que permita ejecutar una acción en el PIN B0, y que si
se presiona un botón en el Pin D1, el proceso original se interrumpa y se ejecute uno nuevo
#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOWRT
#use delay(clock=20M)
#BYTE port_b = 0xF81
#BYTE port_d = 0xF83
int n=0;
#int_ext
void PortB_Interrupt(){
ext_int_edge(H_TO_L);
for(n=1;n<=5;n++){
output_high(PIN_D1);
delay_ms(300);
output_low(PIN_D1);
delay_ms(300);
}
}
void main(){
set_tris_b(0b00000001);
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
set_tris_d(0b00000000);
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
while(TRUE){
output_high(PIN_D0);
delay_ms(500);
output_low(PIN_D0);
delay_ms(500);
}
2) Circuito Diseñar un circuito que realice lo que se pidió en el punto anterior
Imagen P12.1: Diagrama de circuito para la practica
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
Imagen P12.2: Circuito físico para la practica 16
RESULTADOS OBTENIDOS:
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
Imagen P12.3: Proceso interrumpido
EXPLICACIÓN:
El circuito funciona de manera que siempre se está prendiendo y apagando una salida de un led, el B0,
pero, en cuanto se acciona el interruptor, el Led original, independientemente si está activo o apagado, se
“congela” en el proceso original, e inicia otro, que en este caso, enciende y apaga el pin B1, hasta que
finalice la secuencia de interrupcion
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
CONCLUSIONES PRACTICA 12:
Garcia Olivares Carlos Eduardo Las interrupciones son necesarias por que
principalmente optimizan el programa, es decir, no
existe parte del código que gestione esa entrada,
hasta que se active una bandera.
Algo a destacar es que una vez activada la
interrupción no se puede detener hasta completar la
tarea o indicar que la misma acabo, por lo cual esta
misma da prioridad a ciertas cosas para detener
otras.
Arzate Alvarez Daniel Esta práctica da la importancia de las interrupciones
en microcontroladores, por ejemplo, si se desea
construir eg, un reloj despertador, ahí es donde
entran estas mismas, ya que podría ser que una
alarma esté constantemente sonando y que esta pare
cuando se presiona un botón, y que la acción de este
botón sea reiniciar el ciclo para que pasen 24h, o
espera 10 minutos, por ejemplo
Andrés Valderrama Barbosa Las interrupciones son una herramienta bastante útil
para priorizar una determinada acción sobre el
proceso principal del programa, lo que permite leer
datos cuando el sea el momento determinado por el
hardware independientemente del en donde se
encuentre el programa.
Las interrupciones serán utilizadas mas adelante
para realizar aplicaciones mucho más avanzadas y
precisas.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 13 (PWM): DESARROLLO
1) Implementación Desarrollar un código, el cual lea el valor del canal analógico 0, y con el valor
obtenido, cree un pulso cuadrado de 5V con amplitud dada por el valor del potenciometro
#include <18f4550.h>
#fuses HS, NOPROTECT, NOPUT, NOWDT
#define adc=10;
#use delay(clock=20M)
void main(){
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_2(T2_DIV_BY_16,100,1);// PWM
setup_ccp1(CCP_PWM); //CCP1 como salida PWM
int16 x;
while(TRUE) {
set_adc_channel(0);
delay_us(10);
x=read_adc();//otenciometro
set_pwm1_duty((int16)x);//controla el ciclo de trabajo del PWM
} }
2) Implementación Diseñar un circuito que pida lo que se pidió en el punto anterior, con 2 diferentes
salidas, 1) un LED, 2) un motor de DC
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
Imagen P13.1: Diagrama de circuito para la practica
RESULTADOS OBTENIDOS
Imagen P3.2: Circuito para ambos incisos
EXPLICACION
Con este circuito, se pretende que al girar el potenciometro, el ADC lea el valor, y la salida del CCP1,
controle ya sea la intensidad luminosa del LED o la velocidad de giro del motor de DC, esto pudiendo
medirse incluso en un osciloscopio la salida y como va variando el ancho del pulso
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
CONLUSIONES PRACTICA 13:
Alumno Conclusión:
Garcia Olivares Carlos Eduardo Es necesario especificar que para el control de la
velocidad del motor, el uso de PWM o un reloj de
frecuencia puede modular la velocidad, pero de la
misma manera también regula el consumo del
voltaje y corriente del mismo motor, por lo cual es
factible usarlo.
De la misma manera es importante destacar que el
uso de un driver de motor, permite de manera fácil
el uso del motor, y el cambio de dirección de giro
pero de la misma manera el voltaje no puede ser el
mismo para el consumo del PIC, por lo cual es
factible el uso de optoacopladores para la
protección.
Arzate Alvarez Daniel Esta práctica se hizo un acoplamiento de 2
diferentes motores, y fuentes de VDC, una de 5V
para alimentar el pic y un motor de 5VCD. y un opto
acoplador para alimentar el circuito de motores de
mayor voltaje, sin necesidad de poner en riesgo
nuestro PIC, así pudiendo trabajar con tensiones
mayores y/o con ayuda de un relevador, corriente
alterna
Andrés Valderrama Barbosa En esta práctica se hizo uso de los timmers del
microcontrolador para poder producir una señal de
salida de PWM. Las señales PWM son comúnmente
usadas para regular la velocidad de motores de CD
o incluso regular el brillo de leds. Con esta práctica
desbloqueamos una aplicación más del uC con lo
que podremos implementar más dispositivos.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 14:
• EQUIPO Y MATERIAL:
Material para usar en la práctica:
Material: Equipo y Herramienta:
Cable estañado 22awg Resistencias (calculadas) MOC3031M Pinza corte y punta
Protoboard TRIAC BT136 PIC18F4550 Pickit 3
Placa de desarrollo Jumpers Push bottons PC
Capacitor 1.1uF Ventilador Clavija y
cable
Didos 1N4004 4n25 Pot 10K
ohms
• DESARROLLO:
1) Para esta práctica se utilizó el circuito y código proporcionado por el profesor, dicho circuito se
muestra en la imagen siguiente.
Imagen 14.1: Conexión regulación de velocidad ventilador
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
2) A continuación, se muestra el código empleado en el PIC18F4550.
Código en C
//control de motor de 120vac , corre correcto verificado con motor
#include <18f4550.h>
#device adc=10
#fuses HS, NOWDT,NOPROTECT,NOPUT
#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(b)
#priority TIMER1,EXT //prioridad interrupcion por rb0
#define frec_1 pin_b1
#define frec_2 pin_b2
#define disparo pin_b7
long delay=7000;
short bandera1=0;
int contador=0;
long adc=0;
#INT_TIMER1
void timer1(){
adc=read_adc(); //lectura de potenciometro externo para
temporizar disparo
delay_us(20); //tiempo de conversion adc
delay=adc*7.7;
set_timer1(65526); }
#INT_EXT
void ext_isr(){
ext_int_edge(0,L_TO_H);
bandera1=1; //si entro pulso, poner en 1 bandera de
sincronizacion
output_toggle(frec_1); //indicador de interrupcion
//si todo esta correcto frec de interrupcion = 60Hz
contador++;
if(contador==60){
output_toggle(frec_2);
contador=0; }
disable_interrupts(INT_TIMER1);
}
void main(){
set_tris_a(0x01);
set_tris_b(0x01);
delay_ms(100);
output_high(frec_1);
output_high(frec_2);
delay_ms(500);
output_low(frec_1);
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
output_low(frec_2);
delay_ms(500);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);//Setup timer:
Reloj interno, preescaler= 8
set_timer1(65526);//Carga del TMR1 para 20 mhz q 200 ms
enable_interrupts(GLOBAL);//Habilito interrupciones globales
enable_interrupts(INT_EXT);//Habilito interrupción particular del
EXT
setup_adc_ports(an0);
setup_adc(adc_clock_internal);
set_adc_channel(0);
while(TRUE) {
enable_interrupts(INT_TIMER1);
if(bandera1==1){ //espera bandera de sincronizacion{
delay_us(delay+440);
output_high(disparo);
delay_us(200);
output_low(disparo);
bandera1=0;
}
}
}
• RESULTADOS OBTENIDOS:
Resultados obtenidos experimentalmente:
Imagen 14.1: Control de velocidad de Ventilador AC
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
Explicación:
En la imagen 14.1 se muestra el regulador de velocidad de un motor de CA dicho control obtiene la
información de un potenciómetro y por medio de un optoacoplador entre el circuito DC y AC para proteger
el PIC.
• CONLUSIONES PRACTICA 14:
Alumno Conclusión:
Garcia Olivares Carlos Eduardo Para este punto podemos decir que el uso d 4euna interfaz en
software, es mucho mas fácil de usar para el control de la
corriente alterna, aun que para ello implica el diseño de una etapa
de potencia, es necesario simplificar la misma, he ahí el por que
destacamos el uso de la interfaz, ya que esta misma permite
simplificar gran parte esto y enfocarnos en lo principal que es la
etapa de potencia. Es por eso que gracias a estas practicas
podemos desarrollar mas aplicaciones que permitan una
optimización de sistemas.
Arzate Alvarez Daniel Es similar a la anterior practica por el uso de corriente
alterna, pero esta vez se puede variar la velocidad, o
intensidad (si se trabaja por ejemplo con un foco) al igual
que corriente directa para no dañar ningún dispositivo que
no pueda soportar dicha carga, como el mismo PIC, y con
ayuda del MOC se podrían usar otras cosas aparte de un
ventilador, como bombas, focos, etcétera
Andres Valderrama Barbosa En esta práctica pudimos llevar más allá las aplicaciones de
control de cargas AC, llegando a controlar la velocidad de giro de
un motor de AC. Dicha aplicación desbloquea la capacidad de
desarrollar proyectos mucho más complejos con aplicaciones
reales en la industria ya que allá se ocupan cargas mucho más
complejas que las usadas en laboratorio (como motores de 5v),
pero gracias a esta práctica podremos controlar motores de
máquinas profesionales.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 6:
EQUIPO Y MATERIAL:
Material para usar en la práctica:
Material: Equipo y Herramienta:
Cable estañado 22awg Potenciómetro Pinza corte y punta
Protoboard Pushbutton Multímetro
Capacitor 22uF LM35 Puntas banana caimán
Cristal de cuarzo 20MHz Fuente de alimentación
DESARROLLO:
PRACTICA 6:
I. Implementación: Desarrollar un código en c que permita leer el voltaje que se le enviará al PIC por
medio de un potenciómetro de 10K
#define USB_CDC_DELAYED_FLUSH
#define USB_CDC_DATA_LOCAL_SIZE 128
static void RDA_isr(void);
// Includes all USB code and interrupts, as well as the CDC API
#include <usb_cdc.h>
#include <stdlib.h>
#include <string.h>
#define USB_CON_SENSE_PIN PIN_B2 //No usado cuando alimentado desde el USB
#define LED1 PIN_B4
#define LED2 PIN_B5
int deg=0;
void main(){
int16 v=0;
float p;
char msg[32];
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
set_tris_b(0b00000100);
bit_clear(portb,4);
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
bit_clear(portb,5);
usb_cdc_init();
usb_init();
//enable_interrupts(INT_RDA); //Habilita Interrupción por serial
(Recepcion USB_CDC)
//enable_interrupts(GLOBAL); //Habilita todas las interrupciones
while(true){
usb_task(); //Verifica la comunicación USB
if(usb_enumerated()) {
v = read_adc();
p=5*v / 1023.0;
sprintf(msg,"I%1.2fFI%1.2fFI%1.2fF",p,p,p);
printf(usb_cdc_putc,"%s",msg);
delay_ms(1000);
}
}
}
Circuito: Diseñar un circuito que pueda unificar al microcontrolador y la res la protección del PIC
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
Imagen P6.1: Diagrama de circuito para la practica 6
Imagen P6.2: Circuito físico para la practica 16
RESULTADOS OBTENIDOS:
Imagen P6.3: Interfaz mostrando voltaje en el ordenador
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
EXPLICACIÓN:
El circuito funciona cuando el PIC lee los valores obtenidos desde el AN0, luego con el código, los
convierte a un valor digital, para enviarlo a la computadora, ahí esta lee desde que puerto COM están
llegando datos, y los grafica mediante puntos, pero, como la medición es rápida se ve una grafica con
líneas rectas
CONCLUSIONES PRACTICA 6:
Garcia Olivares Carlos Eduardo El uso de interfases viene con el propósito de
simplificar métodos de control de un PIC,
reduciendo pines de entrada analógicos por
lógicos controlados totalmente por el software. Por
lo cual de la misma manera podemos graficar y
hacer estudios de cada uno de los periféricos, así
como su comportamiento para el programa del
PIC.
Arzate Alvarez Daniel Con esta pracica se tiene en claro que hay
señales analógicas y digitales, y que con
ayuda de un proceso las analógicas pueden
ser digitales, como es el caso del PIC, el cual
con una resolución bastante grande, que a
escalas pequeñas no es del 100% precisa,
podemos convertir señales o impulsos a una
manera digital
Andrés Valderrama Barbosa En esta práctica integramos dos aplicaciones para el
pic, las cuales son la lectura de valores analógicos
por medio de un ADC y reafirmamos el uso de
interfaces. Lo que destaca esta práctica sobre las
anteriores es que con el ADC podremos adaptar
señales de sensores de forma que sean
aprovechables para el PIC, esto abre un panorama
de nuevos posibles dispositivos de entradas.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 7: DESARROLLO
1) Implementación Usando el circuito de la práctica anterior, cambiar el potenciómetro de 10K con un
sensor de temperatura LM35
Imagen P7.1: Diagrama de circuito para la practica 17
Imagen P7.2: Circuito Fisico
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
2) Implementación Cambiar el código adaptándolo a la resolución del sensor de temperatura
(10Mv/°C), para ello, solo se necesita multiplicar el valor anterior por 100, y el coddigo resultaría:
#include <18F4550.h>
#device ADC=10
#fuses HSPLL, NOWDT, NOPROTECT, NODEBUG, USBDIV, PLL5, CPUDIV1, VREGEN
#use delay(clock=48000000)
#byte porta = 0xf80 // Identificador para el puerto A.
#byte portb = 0xf81 // Identificador para el puerto B.
#byte portc = 0xf82 // Identificador para el puerto C.
#byte portd = 0xf83 // Identificador para el puerto D.
#byte porte = 0xf84 .
#define USB_CDC_ISR() RDA_isr()
#define USB_CDC_DELAYED_FLUSH
#define USB_CDC_DATA_LOCAL_SIZE 128
#include <usb_cdc.h>
#include <stdlib.h>
#include <string.h>
#define USB_CON_SENSE_PIN PIN_B2
#define LED1 PIN_B4
#define LED2 PIN_B5
int deg=0;
void main(){
int16 v=0;
float p;
char msg[32];
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
set_tris_b(0b00000100);
bit_clear(portb,4);
bit_clear(portb,5);
usb_cdc_init();
usb_init();
while(true){
usb_task();
if(usb_enumerated()) {
v = read_adc();
p=500.0 * v / 1023.0;
sprintf(msg,"I%1.2fFI%1.2fFI%1.2fF",p,p,p);
printf(usb_cdc_putc,"%s",msg);
delay_ms(1000);
}}}
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
RESULTADOS OBTENIDOS
Imagen P7.3: Grafica mostrando ~23° (Temperatura ambiente)
Explicación:
El funcionamiento es practicamente igual al de la practicas anterior, pero el voltaje que manda el PIC a la
computadora es 100 veces mayor, ademas que se cambaron los limites Y para la temperatura
CONLUSIONES PRACTICA 7:
Alumno Conclusión:
Garcia Olivares Carlos Eduardo Muy similarmente a la practica anterior, estos es
factible el uso de sensores y mas que nada es
enfocado a posibles aplicaciones donde el valor de
entrada puede ser usado para banderas de
activación de tal manera que no dependemos de
un valor lógico, si no análogo, el cual a través de la
resolución podemos o no ser exactos.
Arzate Alvarez Daniel De igual forma que la practica anterior, aquí
entra en juego el uso de convertidores a digital,
y aquí solo se vio un caso, pero hay infinitos
casos para usar este, ya que muchos
sensores, trabajan de manera similar al LM
pudiendo ser usados en automatización
Andrés Valderrama Barbosa De manera semejante a lo que planteaba en la
practica anterior en esta se emplea un sensor de
temperatura para poder leer su valor con un ADC,
con ello podremos realizar controladores de
temperara o proyectos de monitoreo.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 5:
EQUIPO Y MATERIAL:
Material para usar en la práctica:
Material: Equipo y Herramienta:
Cable estañado 22awg Potenciómetro Pinza corte y punta
Protoboard Pushbutton Multímetro
Capacitor 22uF LM35 Puntas banana caimán
Cristal de cuarzo 20MHz Fuente de alimentación
DESARROLLO:
❖ Implementación: Desarrollar el código necesario para que con uso de un teclado matricial se envíe
un mensaje el cual indique cual fue la tecla presionada.
Imagen 5.1: Diagrama de conexiones para LCD a PIC
❖ Código:
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
/*programa que no quise programar en cPIC
por que no me deja usar binario :c
oscilador configurado en 48Mhz divido PLL en
5 para 20MHz*/
unsigned short kp = 0;
char keypadPort at PORTB;
sbit LCD_RS at RD0_bit;
sbit LCD_EN at RD1_bit; switch (kp) {
sbit LCD_D4 at RD2_bit; case 1: kp = 49; break; // 7-55
sbit LCD_D5 at RD3_bit; case 2: kp = 50; break; // 8-56
sbit LCD_D6 at RD4_bit; case 3: kp = 51; break; // 9-57
sbit LCD_D7 at RD5_bit; case 4: kp = 65; break; // /-47
sbit LCD_RS_Direction at TRISD0_bit; case 5: kp = 52; break; // 4-52
sbit LCD_EN_Direction at TRISD1_bit; case 6: kp = 53; break; // 5-53
sbit LCD_D4_Direction at TRISD2_bit; case 7: kp = 54; break; // 6-54
sbit LCD_D5_Direction at TRISD3_bit; case 8: kp = 66; break; // *-42
sbit LCD_D6_Direction at TRISD4_bit; case 9: kp = 55; break; // 1-49
sbit LCD_D7_Direction at TRISD5_bit; case 10: kp = 56; break; // 2-50
void main() { case 11: kp = 57; break; // 3-51
ADCON1 = 0x0F; case 12: kp = 67; break; // --45
Keypad_Init(); case 13: kp = 42; break; //
Lcd_Init(); case 14: kp = 48; break; // 0-48
Lcd_Cmd(_LCD_CLEAR); case 15: kp = 35; break; // =-61
Lcd_Cmd(_LCD_CURSOR_OFF); case 16: kp = 68; break; // +-43
Delay_ms(100); }
Lcd_Out(1, 1, "Tecla: "); Lcd_Chr(1, 15, kp);
do { } while (1);
kp = 0; }
do
kp = Keypad_Key_Click();
while (!kp);
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
CONLUSIONES PRACTICA 5:
Alumno Conclusión:
Garcia Olivares Carlos Eduardo El uso de la LCD como parte de la interfaz es una
agradable opción, ya que fácilmente con la
biblioteca es posible mandar mensaje detallados
que expliquen y orientan las funciones de un
sistema, por lo cual el uso de la pantalla LCD es
factible mas cuando muestran información
necesaria.
Arzate Álvarez Daniel Aquí sin necesidad de una interfaz grafica, de
todas formas usamos interfaces, en cuanto a
salida, la LCD, y entrada, el teclado matricial,
y es encargo del programador y obvio del
PIC,saber que teclas se están presionando y
como mostrarlas, pudiendo, si se requiriera,
hacer un sistema de contraseña y que
compare si es correcta o no
Andrés Valderrama Barbosa • En esta práctica se utilizó un teclado matricial y
una pantalla LCD. El fin fue completado ya que
se buscaba que por medio de la detección de
que pines del PIC eran activados poder
conocer que símbolo correspondía al botón
oprimido. Esta practica sirve para demostrar la
implementación de una interfaz de usuario para
ingresar información al PIC.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 10:
EQUIPO Y MATERIAL:
Material para usar en la práctica:
Material: Equipo y Herramienta:
Cable estañado 22awg Potenciómetro Pinza corte y punta
Protoboard Pushbutton Multímetro
Motor de 24v DC Motor a pasos Puntas banana caimán
555NE Puente H Fuente de alimentación
DESARROLLO:
❖ Implementación: Retomando la practica numero 8, realizar las adaptaciones necesarias para el
control de un motor de 24 volts, donde el mismo deberá ser modulado por el PWM del pulso de un
555, donde el potenciómetro será controlado por el motor a pasos, y la dirección del motor
directamente desde el PIC.
❖ Circuito:
Imagen 10.1: Conexión adaptada de la practica 8 para controlar PWM
Código:
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
//YA ME ABURIIIIIIIIIIIIIIIII// PORTD=0b000000000;
#define LEDRON PORTA.F0//LED ROJO delay_ms(100);
#define LEDVOFF PORTA.F1//LED VERDE return;
#define LEDIZQ PORTA.F2//LED naranja }//ONA
#define LEDDER PORTA.F3//LED Azul void OFFA(){// implementar su código para opción
#define ON PORTC.F0 // delay_ms(100);
#define OFF PORTC.F1 PORTD=0b00000000;
#define DIR PORTC.F2 delay_ms(200);
//añadidos return;
#define VA PORTC.F5 }//stop
#define VM PORTC.F6 void SEL(){// implementar su código para opción de apagado
#define VB PORTC.F7 if(VA==1){VAA();}
//funcines else if (VA==0);{
void ONA(); //prender if (VM==1){VMA();}
void OFFA(); //stop else if (VM==0){
void VAA(); //rapido if (VB==1){
void VMA(); //medio delay_ms(20);
void VBA(); //bajo LEDRON=1;
void SEL(); delay_ms(20);
LEDRON=0;
int i=0; }//if VB
}//else if VM
void main() { }//else if VA
//Entradas iniciales return;
}//sel
PORTA=0; void VAA(){// implementar su código para opción de giro en
PORTB=0; sentido izquierdo
PORTC=0; PORTD=0b00000001;
PORTD=0; delay_ms(20);
//Tipo de 1-ENTRADAS/0-SALIDAS PORTD=0b00000010;
TRISA=0b00010000; //Salida de estados A0-A3 delay_ms(20);
TRISB=0b11111111; //B7-B4 teclado PORTD=0b00000100;
TRISC=0b11111111; //C0-C2 y A5 selector delay_ms(20);
TRISD=0b00000000; //SALIDA DE MOTOR a pasos D0- PORTD=0b00001000;
D3 delay_ms(20);
//funcion de motor a pasos //LEDIZQ=0;
//delay_ms(500);
while(1){ return;
if(ON==0){ }//ALTO
delay_ms(20); void VMA(){// implementar su código para opción de giro en
LEDRON=0; sentido derecho
delay_ms(20); PORTD=0b00001000;
LEDRON=1; delay_ms(50);
ONA(); PORTD=0b00000100;
} //fin if para apagado delay_ms(50);
else if(ON==1){ PORTD=0b00000010;
if(OFF=1){ delay_ms(50);
LEDVOFF=0; PORTD=0b00000001;
OFFA(); delay_ms(50);
LEDVOFF=1; //LEDDER=0;
}//fin de apagar //delay_ms(500);
if(DIR==1){ return;
LEDIZQ=0; }//medio
LEDDER=1; void VBA(){// implementar su código para opción de giro en
SEL(); sentido derecho
delay_ms(10); PORTD=0b00001000;
}//fin der delay_ms(100);
else if(DIR==0){ PORTD=0b00000100;
LEDDER=0; delay_ms(100);
LEDIZQ=1; PORTD=0b00000010;
SEL(); delay_ms(100);
delay_ms(10); PORTD=0b00000001;
}//fin izq delay_ms(100);
}//encendido
}//fin de while //LEDDER=0;
}//in de main //delay_ms(500);
void ONA(){ return;
//LEDRON=1;// led rojo }//Bajo
PORTD=0b000000000;
delay_ms(100);
return;
}//ONA
PRACTICA 5 a 14
void OFFA(){// implementar su código para opción de
apagado
//LEDVOFF=1;// led rojo
// delay_ms(100);
PORTD=0b00000000;
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
RESULTADOS: La practica se enfoca a la union de distintas practicas anteriores,
Imagen 10.4: Voltaje usado para el
motor(0-24 volts soportaba)
Imagen 10.4: Motor de DC de 24
Imagen 10.2: Circuito completo, donde se aprecia la etapa de
volts(salida principal)
control, y de potencia
donde el uso de una etapa de potencia para 24 volts era controlada por el pic directamnete , y el
pwm conectado era por el motor a pasos el cual tambien era controlado por el PIC, todo esto a
traves de sinco entradas, prendido, apagado, parar, derecha/izquierda, paso rapido, medio, lento.
CONLUSIONES PRACTICA 10:
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
Alumno Conclusión:
Garcia Olivares Carlos Eduardo Un sistema que requiera el control de voltajes altos,
necesitas como medidas necesarias la protección
del PIC, por lo cual desarrollar etapas d control por
separado suele ser útil, en este caso, el PIC solo
se encarga de señales de control, mientras que las
demás etapas son controladas por circuitos
integrados separados, de tal manera que el
programa es mucho mas pequeño , lo que mejora
la eficiencia y respuesta del mismo.
La incomodidad de este caso es que las
alimentaciones para cada fase se pueden
compartir, y en otros deben ser individuales, por lo
cual esto también necesita una optimización y
organización dada por el diseñador.
Arzate Álvarez Daniel Aquí, esta práctica es similar a otras hechas
anteriormente, ya que podemos controlar un
motor a pasos y hacerlo más rápido o lento
(según se requiera) con un pulso pwm, desde
hacer más corto el periodo, para que vaya más
rápido, e inversamente, más largo el pulso
para que vaya más lento, o incluir una
velocidad media.
Andrés Valderrama Barbosa En esta práctica se realizaron distintas interfaces
entre componentes para poder regular la velocidad
de giro de un motor de 24V, esto demuestra que con
electrónica es posible controlar dispositivos de
potencias distintas a partir del uso correcto de
interfaces.
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
PRACTICA 8:
EQUIPO Y MATERIAL:
Material para usar en la práctica:
Material: Equipo y Herramienta:
Cable estañado 22awg Potenciómetro Pinza corte y punta
Protoboard Pushbutton Multímetro
Motor a Pasos Leds Puntas banana caimán
Resistencias calculadas Fuente de alimentación
DESARROLLO:
❖ Implementación: Desarrollar un código, el cual permita el control de giro de un motor a pasos, el
mismo deberá ser controlado por 3 entradas, es decir que seleccionaremos el sentido de giro, así
como el estado de encendido u apagado del mismo, de la misma manera deberá tener leds
indicadores para cada estado.
❖ Circuito:
Imagen 8.1: Conexión para control motor a pasos a PIC18F4550
❖ Código:
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
#include <18f4550.h> output_high(bobina_1);
#fuses output_low(bobina_2);
HS,NOWDT,NOPROTECT,NOPUT,NOLVP,BROWNOUT output_low(bobina_3);
#use delay(clock=20M) output_high(bobina_4);
#use standard_io(B) delay_ms(velocidad);
#use standard_io(C) }
#define LEDencendido PIN_A0
#define LEDapagado PIN_A1 void pasos_derecha(int velocidad)
#define LEDizq PIN_A2 {
#define LEDdere PIN_A3 output_high(bobina_1);
#define bobina_1 PIN_B0 output_high(bobina_2);
#define bobina_2 PIN_B1 output_low(bobina_3);
#define bobina_3 PIN_B2 output_low(bobina_4);
#define bobina_4 PIN_B3 delay_ms(velocidad);
#define encendido PIN_D0
#define apagado PIN_D1 output_low(bobina_1);
#define izquierdo PIN_D2 output_high(bobina_2);
#define derecho PIN_D3 output_high(bobina_3);
void pasos_izquierda(int velocidad); output_low(bobina_4);
void pasos_derecha(int velocidad); delay_ms(velocidad);
void pasos_off(void);
void main(){ output_low(bobina_1);
while(true) output_low(bobina_2);
{ output_high(bobina_3);
pasos_off(); output_high(bobina_4);
delay_ms(velocidad);
if(input(encendido) == 1){
pasos_off(); output_high(bobina_1);
output_high(LEDencendido); output_low(bobina_2);
} output_low(bobina_3);
else if(input(apagado) == 1){ output_high(bobina_4);
pasos_off(); delay_ms(velocidad);
output_high(LEDapagado); }
}
else if(input(izquierdo) == 1){ void pasos_off(void)
pasos_izquierda(2); {
output_high(LEDizq); output_low(bobina_1);
} output_low(bobina_2);
else if(input(derecho) == 1){ output_low(bobina_3);
pasos_derecha(2); output_low(bobina_4);
output_high(LEDdere); }
}
else {
output_low(LEDencendido);
output_low(LEDapagado);
output_low(LEDizq);
output_low(LEDdere);
}
}
}
void pasos_izquierda(int velocidad)
{
output_low(bobina_1);
output_low(bobina_2);
output_high(bobina_3);
output_high(bobina_4);
delay_ms(velocidad);
output_low(bobina_1);
output_high(bobina_2);
output_high(bobina_3);
output_low(bobina_4);
delay_ms(velocidad);
output_high(bobina_1);
output_high(bobina_2);
output_low(bobina_3);
output_low(bobina_4);
delay_ms(velocidad);
output_high(bobina_1);
output_low(bobina_2);
PRACTICA 5 a 14
output_low(bobina_3);
output_high(bobina_4);
delay_ms(velocidad);
}
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
RESULTADOS:
Imagen 8.2: Motor a pasos con Imagen 8.3: Conexiones a control para
carga de un potenciometro la activación de las bobinas del motor,
y entradas de selección
CONLUSIONES PRACTICA 8:
Alumno Conclusión:
Garcia Olivares Carlos Eduardo Para el control de un motor a pasos, es necesario
recordar la lógica de activación en el caso de un
motor unipolar, por lo cual el uso de etapas de
control prediseñadas es factible. Así la
simplifcacion del programa es posible, de esta
manera podemos destacar que el control debe ser
dado por periféricos que permitan la activación del
mismo, dado ello también la implementación de
casos cuando se activan 2 o mas al mismo tiempo,
y la prioridad de ciertos puntos.
Arzate Alvarez Daniel Similarmente a la anterior práctica, es el
control de un motor, con excepción que ahora
se define el giro de motor y que indique hacía
que lado está girando, con la indicación de un
led, este es parecido a la práctica del puente
H, ya que en ambos casos controlamos la
dirección de giro
Andrés Valderrama Barbosa De manera parecida a al anterior practica en esta se
vuelve a controlar un motor de DC de mayor voltaje
PRACTICA 5 a 14
INSTITUTO POLITECNICO NACIONAL
UNIDAD PRFESIONAL INTERDICIPLINARIA DE INGENERIA Y
TECNOLOGIS AVANZADAS
que 5V. Pero ahora se define el sentido de giro del
motor utilizando leds, cabe aclarar que el uso de
todas estas interfaces hace más sencillo escribir la
lógica del programa.
BIBLIOGRAFIA:
Boylestad, R. L. (2009). Teoria de circuitos y dispositivos electronicos . Estado de México: Pearson.
Valdes, F., & Areny, R. P. (2007). Microcontroladores fundamentos y aplicaciones con PIC. Marcombo.
Programación de Microcontroladores PIC en Lenguaje C (1.a ed.). (2020).
Schmidt, D. (2022). MikroC Pro para PIC y ARM Cortex: programación y ejemplos. Marcombo.
PRACTICA 5 a 14