0% encontró este documento útil (0 votos)
62 vistas74 páginas

Tarea Micro

Este documento contiene varios proyectos y ejercicios prácticos relacionados con microcontroladores y electrónica digital. Incluye códigos y simulaciones para hacer parpadear LEDs, crear semáforos, generar sonidos, controlar motores con PWM y más. Los proyectos están explicados a través de diagramas de flujo y códigos en MikroC, y se simulan en Proteus para validar el funcionamiento.

Cargado por

roger
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
62 vistas74 páginas

Tarea Micro

Este documento contiene varios proyectos y ejercicios prácticos relacionados con microcontroladores y electrónica digital. Incluye códigos y simulaciones para hacer parpadear LEDs, crear semáforos, generar sonidos, controlar motores con PWM y más. Los proyectos están explicados a través de diagramas de flujo y códigos en MikroC, y se simulan en Proteus para validar el funcionamiento.

Cargado por

roger
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

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

También podría gustarte