UNIVERSIDAD ESTATAL
PENÍNSULA DE SANTA ELENA
FACULTAD DE SISTEMAS Y TELECOMUNICACIONES
CARRERA DE ELECTRÓNICA Y TELECOMUNICACIONES
DOCENTE
SENDEY VERA
ALUMNO
JEAN PIERRE MONSERRATE RODRÍGUEZ
TAREA
MICROCONTROLADORES
PARALELO
ELECTRÓNICA 7/1
SEMESTRE
SÉPTIMO
LA LIBERTAD – ECUADOR
2019 – 2020
5.1 PROYECTOS CON LEDS
5.1.1 PROGRAMA BÁSICO PARA HACER PARPADEAR UN LED CON
INTERVALOS DE 1 SEGUNDO.
Codigo
program MyProject
main:
'iniciar el puerto B como salida
PORTB=0
TRISB=0
while(1) 'bucle para el parpadeo (verdadero)
RB0_bit=1 'encender el led del puerto
Delay_ms(500) 'tiempo para encender el led
RB0_bit=0 'apagar el led del puerto
Delay_ms(500) 'retardo
wend
end.
Simulacion
Diagrama de flujo
5.1.2. UN SEMÁFORO DE 2
INTERSECCIONES.
Codigo
program MyProject
' Declarations section
main:
trisb=0 'indica que todos los
pines del puerto B son de salida
semaforo: 'nombre de la línea
semáforo
portb=%100001 'encender rojo del 1er semáforo y verde del 2do semáforo
Delay_ms(9000) 'esperar 9 segundos
portb=%100010 'cambiar en el 2do semáforo de verde a amarillo
Delay_ms(3000) 'esperar 3 segundos
portb=%001100 'cambiar a verde en el 1er semáforo y rojo el 2do semáforo
Delay_ms(9000) 'esperar 9 segundos
portb=%010100 'cambiar en el 1er semáforo de verde a amarillo
Delay_ms(3000) 'esperar 3 segundos
GOTO semaforo 'continuar con el ciclo para siempre
END.
Simluacion
Diagrama de flujo
5.1.3. JUEGO DE LUCES PARA DISCOTECA.
Codigo
program MyProject
' Declarations section
main:
Trisb=%00000000 'convierte todos los pines del puerto B en salidas
discoteca: 'nombre de la subrutina
Portb=%00000001 'enciende el puerto B.0, los demás permanecen apagados
GOSUB pedro 'ir a subrutina pedro y volver cuando diga RETURN
Portb=%00000010 'enciende el puerto B.1, los demás les apaga
GOSUB pedro 'ir a subrutina tiempo y volver cuando diga RETURN
Portb=%00000100 'enciende el puerto B.2, los demás les apaga
GOSUB pedro 'ir a subrutina pedro y volver cuando diga RETURN
Portb=%00001000 'enciende el puerto B.3, los demás les apaga
GOSUB pedro 'ir a subrutina pedro y volver cuando diga RETURN
Portb=%00010000 'enciende el puerto B.4, los demás les apaga
GOSUB pedro 'ir a subrutina pedro y volver cuando diga RETURN
Portb=%00100000 'enciende el puerto B.5, los demás les apaga
GOSUB pedro 'ir a subrutina pedro y volver cuando diga RETURN
Portb=%01000000 'enciende el puerto B.6, los demás les apaga
GOSUB pedro 'ir a subrutina pedro y volver cuando diga RETURN
Portb=%10000000 'enciende el puerto B.7, los demás les apaga
GOSUB pedro 'ir a subrutina pedro y volver cuando diga RETURN
GOTO discoteca 'ir al inicio del programa
pedro: 'esta es la subrutina pedro
delay_ms 200 'retardo de 200 milisegundos, aquí podemos cambiarlo
RETURN 'volver al GOSUB que le envió
end.
Simulacion
Diagrama de flujo
5.2 PROYECTOS DE REPETICIONES
5.2.2. LUCES DEL AUTO FANTÁSTICO (DESPLAZAMIENTOS).
Codigo
program MyProject
dim x as BYTE 'creamos la variable x y le asignamos tamaño de 255
main:
TRISB = 0 'hacemos salidas a todo el puerto B
PORTB = 1 'Cargamos el puerto B con 1 (%00000001)
PROG:
FOR x = 1 TO 7 'repetir 7 veces
PORTB = PORTB << 1 'desplazar uno a uno a la izquierda
delay_ms 200 'esperar 200 milisegundos
NEXT x 'repetir hasta que x sea = a 7
for x = 1 TO 7 'repetir 7 veces
PORTB = PORTB >> 1 'desplazar uno a uno a la derecha
delay_ms 200 'esperar 200 milisegundos
NEXT x 'repetir hasta que x sea = a 7
GOTO PROG 'ir a PROG
end.
Simulacion
Diagrama de flujo
5.3 PRÁCTICAS CON PULSADORES
5.3.1. EJERCICIO CON PULSADORES.
Codigo
program MyProject
' Declarations section
main:
TRISB = 0
TRISA = 1
while(1)
IF PORTA.1 = 0 THEN ' pregunta si porta.1=0
PORTB.3=1 'encender el led
delay_ms 1000 'esperar 1 segundo
PORTB.3=0 'apagar el led
end if
wend
END. 'fin de la programación
Simulacion
Diagrama de flujo
5.3.2. CONTADOR BINARIO CON PULSADOR ANTIRREBOTE.
Codigo
program MyProject
dim num as BYTE 'crea la variable num con un tamaño de 255
main:
Trisb=0
trisa=1
while(1)
portb=num 'indica sacar el valor de num a través del puerto B
IF PORTA.0=1 THEN 'pregunta si el botón ha sido presionado
delay_ms 200 'espera de 200 mls para estabilizar el botón
num=num + 1 'suma 1 a la variable num y el nuevo valor le guarda en num
end if
wend 'volver al principio del programa
END. 'fin de la programació
Simulacion
Diagrama de flujo
SONIDO
5.6.1 GENERACIÓN DE SONIDO:
En esta práctica utilizaremos la librería Sound para generar un sonido a través de un
piezoeléctrico (Buzzer pasivo) o podría ser también un parlante. Se determinará la frecuencia a
utilizar y el tiempo que se desea emplear al sonido. Ejemplo realizado en Mikrocode:
MATERIALES.
1 Buzzer pasivo (piezoeléctrico) o un parlante grande o pequeño
1 capacitor de 10uF/25V.
RESOLUCION DE LA PRACTICA
Diagrama de flujo:
Código realizado en MikroC:
Simulación realizada en PROTEUS:
5.6.2 UNA SIRENA POLICIAL:
Esta práctica consiste en sacar por un parlante el sonido característico de una sirena policial,
para esto emplearemos la ayuda de la declaración SOUND. LA DECLARACIÓN SOUND.
Sirve para generar tonos y/o ruido blanco en un pin del PIC, y es posible combinar hasta 2
frecuencias desde de 1 a 127 que son tonos y 128 a 255 ruido blanco, 0 es silencio, 1 equivale a
78,74 HZ y 127 a 10000 Hz. Ejemplo realizado en Mikrocode:
MATERIALES.
1 Buzzer pasivo (piezoeléctrico) o un parlante grande o pequeño
1 capacitor de 10uF/25V.
RESOLUCION DE LA PRACTICA
Diagrama de flujo:
Código realizado en MikroC:
Simulación realizada en PROTEUS:
Debido a que son diferentes sonidos que se generan se utilizara el mismo esquema.
5.6.3 GENERACION DE UN TIMBRE DE TELEFONO CELULAR:
Esta práctica consiste en sacar por un parlante el sonido característico de un teléfono celular,
para esto emplearemos la ayuda de la declaración SOUND. LA DECLARACIÓN SOUND.
Sirve para generar tonos y/o ruido blanco en un pin del PIC, y es posible combinar hasta 2
frecuencias desde de 1 a 127 que son tonos y 128 a 255 ruido blanco, 0 es silencio, 1 equivale a
78,74 HZ y 127 a 10000 Hz. Ejemplo realizado en Mikrocode:
MATERIALES.
1 Buzzer pasivo (piezoeléctrico) o un parlante grande o pequeño
1 capacitor de 10uF/25V.
RESOLUCION DE LA PRACTICA
Diagrama de flujo:
Código realizado en MikroC:
Simulación realizada en PROTEUS:
5.8 PROYECTOS CON MOTORES
5.8.1 MANEJO DEL PWM COMO VARIADOR DE VELOCIDAD DE UN
MOTOR DC
El PWM (Pulse Width Modulation) o modulación en ancho del pulso, tiene muchas
aplicaciones, por ejemplo para atenuar la iluminación de un led, la iluminación del
BACKLIGHT de un LCD, para variar la velocidad de un motor DC, que es lo que veremos en
este caso. El presente proyecto es un variador de velocidad de un motor DC de juguete que se
alimenta a 5 voltios, su funcionamiento es de la siguiente manera:
Al momento de alimentar el circuito, el motor parte desde una velocidad media, es decir
(FREC=125), al pulsar el botón (S) incrementa la variable en múltiplos de 25 y la velocidad del
motor sube hasta llegar a (FREC=250), si seguimos pulsando la misma tecla, el LED
permanecerá encendido, esto nos indica que ya llegó al límite, entonces pulsamos el botón (B),
el cual hace que disminuya la velocidad del motor hasta llegar a (FREC=25), de igual manera si
seguimos pulsando el botón (B) el LED permanecerá encendido. Si usted no dispone de un
motor puede conectar a un LED directamente con una resistencia de 330 Ω, igualmente podrá
observar cómo baja o sube la intensidad del LED.
RESOLUCIÓN DEL PROBLEMA CON MI CODIGO EN MICRO C
//DECLARCIÓN DE VARIABLES
#define botsubir PORTB.RB1 //NOMBRE DEL PIN B1
#define botbajar PORTB.RB2 //NOMBRE DEL PINB2
#define LED PORTB.RB3 //NOMBRE DEL PIN3
int duty1, duty2; //ESTABLECEMOS UN RANGO MAXIMO DE LA FREC
//INICIO DEL BUCLE INFINITO
void main(){ DIAGRAMA DE FLUJO
TRISC=0;
TRISB=1;
PORTB=0;
PORTC=0;
duty1=0;
duty2=0;
//PWM_1 PORTC CCP1
PWM1_Init(5000);
PWM1_Start();
PWM1_Set_Duty(duty1);
//PMW_2 portc CCP2
PWM2_Init(5000);
PWM2_Start();
PWM2_Set_Duty(duty2);
LED=1; //PRENDEMOS EL LED PARA SABER QUE YA INICIO
Delay_ms(500);
LED=0;
while(1){
if(botsubir==1){
//SUBIR();
for(duty1=0; duty1=5000; duty1++){
Delay_ms(40);
PWM1_Set_Duty(duty1);
//aviso();
}
if (botbajar==1){
//BAJAR();
for(duty2=5000; duty2=0; duty1--){
Delay_ms(40);
PWM2_Set_Duty(duty2);
}
}
}
}
}
SIMULACIÓN EN PROTEUS
5.8.4 MANEJO DE UN MOTOR PASO A PASO EN SECUENCIA WAVE DRIVE
Como práctica básica para introducirnos en el manejo de motores PAP vamos a hacer un
programa que genere una revolución completa a un motor de 7.5 grados a 24 voltios en
secuencia wave drive o secuencia por ola, esta es la forma más fácil de manejar un motor,
consiste en energizar una sola bobina a la vez, A, C, B, y por último la D, a continuación
veremos la tabla de energizado para conseguir que el motor gire en ambos sentidos.
SIMULACIÓN EN MICRO C
short int x=0;
void antihorario(){
for(x=1; x=12; x++){
PORTB=0x01;//B0
Delay_);
PORTB=0x0ms(5002; //B1
Delay_ms(500);
PORTB=0x04; //B2
Delay_ms(500);
PORTB=0x08; //B3
Delay_ms(500);
}
}
void horario (){
for(x=1; x=12; x++){
PORTB=0x08;
Delay_ms(500);
PORTB=0x04;
Delay_ms(500);
PORTB=0x02;
Delay_ms(500);
PORTB=0x01;
Delay_ms(500);
}
}
void main() {
TRISB=0;
antihorario();
Delay_ms(1000);
horario();
Delay_ms(1000);
}
DIAGRAMA DE FLUJO
SIMULACIÓN EN PROTEUS
5.8.5 MANEJO DE UN MOTOR PASO A PASO EN SECUENCIA FULL STEP
También conocida como secuencia por paso completo, este es la manera que recomienda los
fabricantes, debido a que siempre se encuentran energizadas 2 bobinas, se obtiene un alto torque
de paso y de retención, y consume un 40% más de corriente que el caso anterior. El siguiente
ejercicio hace girar el motor continuamente, noten además la fuerza que tiene tratando de
detener el giro con sus dedos. En cuanto a los materiales y el diagrama de conexión utilizaremos
los mismos del ejercicio anterior. A continuación mostraremos la gráfica de secuencia de pasos
y energizado para el manejo del motor a paso completo.
SOLUCIÓN EN MICRO C
DIAGRAMA DE FLUJO
SIMULACIÓN EN PROTEUS
5.8.6 MANEJO DE UN MOTOR PASO A PASO EN SECUENCIA HALF STEP
También conocida como secuencia a medio paso, este es una combinación de las 2 secuencias
anteriores, se energiza 2 bobinas, luego 1 bobina, luego otra vez 2 bobinas y así alternadamente,
como resultado el rotor avanza medio paso por cada pulso de excitación, la ventaja de esta
secuencia es la disminución del avance angular, de 7,5° a 3,75°, por consiguiente para girar una
vuelta completa se necesita el doble de pasos, en este caso 96, lo que veremos en el programa
será 8 secuencias que multiplicado por 12, nos dará 96 y esto equivale a 360°. En cuanto a los
materiales y el diagrama de conexión utilizaremos los mismos del ejercicio anterior. A
continuación
mostraremos la
gráfica de
secuencia de
pasos y
energizado para el
manejo del
motor a medio
paso.
SOLUCIÓN DEL PROBLEMA EN MICRO C
short int x=0;
void REPT(){
for(x=1; x=12; x++){
PORTB=0x01;//B0 A 0=1
Delay_ms(500);
PORTB=0x05;//B0, A Y C 1+4
Delay_ms(500);
PORTB=0x04; //B2 C 2=4
Delay_ms(500);
PORTB=0x06; //B1, C Y B 4+2
Delay_ms(500);
PORTB=0x02; //B1 B 1=2
Delay_ms(500);
PORTB=0x10; //B2, B Y D 8+2
Delay_ms(500);
PORTB=0x08; //B3 D 3=8
Delay_ms(500);
PORTB=0x09; //B3,A Y D 8+1
Delay_ms(1000);
}
}
void main() {
TRISB=0;
REPT();
}
DIAGRAMA DE FLUJO
SIMULACIÓN EN PROTEUS
5.5.1_HOLA
DIAGRAMA DE BLOQUE_HOLA
PROTEUS_HOLA_microPIC
5.5.3
DESPLAZAMIENTO DEL TEXTO
PROTEUS_DESPLAZAMIENTO
DIAGRAMA DE BLOQUE
PROTEUS_CUSOR
DIAGRAMA DE BLOQUE
CARÁCTER
PROTEUS_CARACTER
DIAGRAMA DE FLUJO_CARACTER
EJERCICIO 5.4.1 MANEJO DE UN DISPLAY DE 7 SEGMENTOS CON EL CI. 7447.
CODIGO MICROBASIC
PROTEUS CONTADOR DE 0 a 9
DIAGRAMA DE FLUJO
Ejercicio 5.4.2. UN CONTADOR DECIMAL DE UN DÍGITO CON EL CI. 7447 y UN
PULSADOR.
Proteus Contador de 0 a 9 con pulsador
DIAGRAMA DE FLUJO
5.4.4. MANEJO DE 4 DISPLAYS DE 7 SEGMENTOS CON EL CI. 7447.
Proteus
Diagrama de flujo
EJERCICIO 5.4.6
CÓDIGO MIKROC
SIMULACIÓN PROTEUS
PRESENTACIÓN DE LA PALABRA HOLA
DIAGRAMA DE FLUJO
EJERCICIO 5.4.7
CÓDIGO MIKROC
SIMULACIÓN PROTEUS
DESPLAZAMIENTO HACIA LA DERECHA DE LA PALABRA HOLA
DIAGRAMA DE FLUJO
5.11.3. TERMÓMETRO DIGITAL CON EL PIC 16F877A.
Para esta práctica necesitaremos el sensor de temperatura LM35, este dispositivo presenta en su pin
OUT una variación de 10 mV por grado centígrado, su alimentación puede ser de 4 a 30 Voltios, y
su rango de temperatura a sensar entre -55°C hasta 150 °C. Para medir la temperatura se conecta el
pin out del LM35 al puerto A.0, el cual está configurado como conversor A/D a 10 bits, este valor se
almacena en la variable dato que tiene capacidad de 2 bytes (16 bits), el cual se lo divide para 128,
debido a que la variable del conversor A/D de 10 bits lo presenta en 16 bits, de la siguiente manera:
1111111111000000, los 6 bits que contienen ceros se los debe ignorar, ya que sólo necesitamos los 8
bits del 1er byte más 2 bits del segundo byte, si este dato lo dividimos para 64 conseguiremos
eliminar los 6 bits que corresponde a los ceros, de esta manera tendremos el dato a 10 bits, es decir el
C A/D mostraría como valor máximo 1024, esto es una resolución de 5 mV, pero como el LM35
tiene incrementos de 10 mV, debemos bajar la resolución a 9 bits y eso se consigue dividiendo para
128, lo cual elimina 7 bits del 2do byte, de esta manera el valor más alto sería 512, esto es lo más
cercano a la escala del LM35. El proyecto funciona de la siguiente manera: si la temperatura
permanece entre
20°C y 24°C ninguno de los relés se activa, pero si la temperatura no se encuentra entre estos 2
rangos, se activa el relé que le corresponde, sea para calentar o enfriar el ambiente, si deseamos
modificar los rangos de temperatura, presionamos el pulsador E, con los otros 2 botones
aumentamos o disminuimos la temperatura mínima a comparar, y una vez que estemos de acuerdo
presionamos la tecla E nuevamente, luego nos pide programar la temperatura máxima, procedemos
igual que el caso anterior y cuando presionemos la tecla E, parpadeará
Codificación en el software Mikrobasic
Simulación en el software proteus
Diagrama de flujo
5.10.1. UTILIZANDO LA INTERRUPCIÓN DEL PUERTO B.
Existen aplicaciones en donde un evento es muy importante atenderlo, por ejemplo cuando algún
dispositivo intenta comunicarse con el PIC, en un sistema de seguridad en donde una zona es más
importante que las demás zonas o como el ejercicio anterior en donde cada segundo envía un pulso SQW,
podríamos utilizar este pulso para indicar al PIC que debe leer los nuevos datos (segundo, minutos, hora,
etc. ).
Como práctica para poder entender la interrupción en el cambio de estado del Portb.0, haremos un
parpadeo de un led rojo cada 200mls, y cuando exista una interrupción externa (pulsador), deja de
ejecutarse el programa y atiende un Handler (subrutina) el cual contiene un programa en donde se
enciende un led verde por 1 segundo, una vez terminado el programa e interrupción, retorna al programa
principal en el lugar mismo donde ocurrió la interrupción.
Codificación en el software Mikrobasic
Simulación en el software Proteus
Parpadeo del led 1 “rojo2” cada 200mls sin interrupciones.
Interrupción en RBO para el encendido del led 2 “verde”
Diagrama de flujo