Você está na página 1de 108

2015

Practicas parcial VI
UNIVERSIDAD TEGNOLÓGICA DE AGUASCALIENTES
ELECTRONICA DIGITAL

Alumno: EDGAR ESPINOZA CORONADO


Matricula: 140390
Carrera: Mecatronica
Grupo: 3.-C

Maestro: Víctor Manuel Mora Romo


MECATRÓNICA

Contenido
Practica 1 ....................................................................................................................................................... 2
RESUMEN ...................................................................................................................................................... 2
MARCO TEORICO ........................................................................................................................................... 4
MICROCONTROLADORES .............................................................................................................................. 4
LOS MICROCONTROLADORES DE HOY EN DIA .............................................................................................. 6
CONCLUSION: .............................................................................................................................................. 21
BIBLIOGRAFIAS: ........................................................................................................................................... 21
Practica 2 ..................................................................................................................................................... 22
Resumen ..................................................................................................................................................... 22
Marco Teórico ............................................................................................................................................. 23
Objetivos ..................................................................................................................................................... 29
Generales ................................................................................................................................................ 29
Particulares .............................................................................................................................................. 30
MATERIAL Y EQUIPO............................................................................................................................... 30
DESARROLLO ....................................................................................................................................... 30
Resultados: .............................................................................................................................................. 56
Discusión: ................................................................................................................................................ 56
Conclusión: .............................................................................................................................................. 56
Referencias: ............................................................................................................................................. 56

1
MECATRÓNICA

Practica 1

RESUMEN

en estas prácticas se utilizaran microcontroladores para poder controlar encendidos de leds,


pero para esto los microcontroladores se tienen
Contenido que programar con un tipo de lenguaje que en este caso es c. los programas utilizados
para esto son el mikrobasic y el pic c, ambos pueden realizar las mismas funciones, pero si varian
mucho en los caracteres a utilizar para realizar la misma función. El microcontrolador utilizado
para estas prácticas fue el pic18f4550 ya que es uno de los mas versátiles por el numero de pines
que tiene que son 40.
Los microcontroladores son muy fáciles de utilizar para la elaboración de cualquier función
deseada, en estos casos son solo para el encendido de leds.
Uno de los casos que se implementaran son el como acondicionar un semáforo , como
acondicionar un cruzero y el mas simple, el encendido de un led.
Se pueden utilizar para una infinidad de tareas que uno pueda imaginar, o que uno no se imagina
que se pueden realizar, gracias a que estos microcontroladores tienen funciones similares a las
de una computadora, en la cual se puede procesar información, guardar información asi como
también el de tener entradas y salidas periféricas que ayudan a conectar otros dispositivos para
las funciones relativas requerridas.

OBJETIVOS GENERALES:

El alumno al final de la práctica:

 Programará el Microcontrolador para activar varias salidas a leds.


 Identificará e implementará el uso del Microcontrolador.

OBJETIVOS PARTICULARES:
 Al finalizar la práctica el alumno encenderá un led por medio de un pic18f4550 una vez
programado.
 Por medio de un microcontrolador, el alumno entenderá y aplicara la programación
adecuada para encender un led por un cierto tiempo asignado.

MATERIAL Y EQUIPO

 18F4550  3 Led
 7805  3 R220Ω o R330Ω

2
MECATRÓNICA

 1 R10KΩ
 1 Cristal 20MHZ
 2 Capacitores Cerámicos 22pF
 Protoboard
 Fuente de voltaje
 Multímetro

3
MARCO TEÓRICO
Investigue de otras fuentes sobre aplicaciones de los microcontroladores.

MARCO TEORICO

MICROCONTROLADORES

Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz de


ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los
cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales
unidades funcionales de una computadora: unidad central de
procesamiento, memoria y periféricos deentrada/salida.

Algunos microcontroladores pueden utilizar palabras de cuatro bits y funcionan a velocidad de reloj
con frecuencias tan bajas como 4 kHz, con un consumo de baja potencia (mW o microvatios). Por lo
general, tendrá la capacidad de mantenerse a la espera de un evento como pulsar un botón o de otra
interrupción; así, el consumo de energía durante el estado de reposo (reloj de la CPU y los periféricos
de la mayoría) puede ser sólo de nanovatios, lo que hace que muchos de ellos sean muy adecuados
para aplicaciones con batería de larga duración. Otros microcontroladores pueden servir para roles
de rendimiento crítico, donde sea necesario actuar más como unprocesador digital de señal (DSP),
con velocidades de reloj y consumo de energía más altos.

Cuando es fabricado el microcontrolador, no contiene datos en la memoria ROM. Para que pueda
controlar algún proceso es necesario generar o crear y luego grabar en la EEPROM o equivalente del
microcontrolador algún programa, el cual puede ser escrito en lenguaje ensamblador u otro lenguaje
para microcontroladores; sin embargo, para que el programa pueda ser grabado en la memoria del
microcontrolador, debe ser codificado en sistema numérico hexadecimal que es finalmente el sistema
que hace trabajar al microcontrolador cuando éste es alimentado con el voltaje adecuado y asociado
a dispositivos analógicos y discretos para su funcionamiento.1

El primer microcontrolador fue el Intel 4004 de 4 bits, lanzado en 1971, seguido por el Intel 8008 y
otros más capaces. Sin embargo, ambos procesadores requieren circuitos adicionales para
implementar un sistema de trabajo, elevando el costo del sistema total.

El Instituto Smithsoniano dice que los ingenieros de Texas Instruments Gary Boone y Michael
Cochran lograron crear el primer microcontrolador, TMS 1000, en 1971; fue comercializado en 1974.
Combina memoria ROM, memoria RAM, microprocesador y reloj en un chip y estaba destinada a los
sistemas embebidos.2

Debido en parte a la existencia del TMS 1000,3 Intel desarrolló un sistema de ordenador en un chip
optimizado para aplicaciones de control, el Intel 8048, que comenzó a comercializarse en
1977.3 Combina memoria RAM y ROM en el mismo chip y puede encontrarse en más de mil millones
de teclados de compatible IBM PC, y otras numerosas aplicaciones. El en ese momento presidente
de Intel, Luke J. Valenter, declaró que el microcontrolador es uno de los productos más exitosos en la
historia de la compañía, y amplió el presupuesto de la división en más del 25%.

La mayoría de los microcontroladores en este momento tienen dos variantes. Unos tenía una
memoria EPROM reprogramable, significativamente más caros que la variantePROM que era sólo
una vez programable. Para borrar la EPROM necesita exponer a la luz ultravioleta la tapa de cuarzo
transparente. Los chips con todo opaco representaban un coste menor.

En 1993, el lanzamiento de la EEPROM en los microcontroladores (comenzando con el


Microchip PIC16x84)4 permite borrarla eléctrica y rápidamente sin necesidad de un paquete costoso
como se requiere en EPROM, lo que permite tanto la creación rápida de prototipos y la programación
en el sistema. El mismo año, Atmel lanza el primer microcontrolador que utiliza memoria flash.5 Otras
compañías rápidamente siguieron el ejemplo, con los dos tipos de memoria.

El costo se ha desplomado en el tiempo, con el más barato microcontrolador de 8 bits disponible por
menos de 0,25 dólares para miles de unidades en 2009, y algunos microcontroladores de 32 bits a 1
dólar por cantidades similares. En la actualidad los microcontroladores son baratos y fácilmente
disponibles para los aficionados, con grandes comunidades en línea para ciertos procesadores.

En el futuro, la MRAM podría ser utilizada en microcontroladores, ya que tiene resistencia infinita y el
coste de su oblea semiconductora es relativamente bajo.

CARACTERISTICAS:

Los microcontroladores están diseñados para reducir el costo económico y el consumo de energía de
un sistema en particular. Por eso el tamaño de la unidad central de procesamiento, la cantidad de
memoria y los periféricos incluidos dependerán de la aplicación. El control de un electrodoméstico
sencillo como una batidora utilizará un procesador muy pequeño (4 u 8 bits) porque sustituirá a un
autómata finito. En cambio, un reproductor de música y/o vídeo digital (MP3 o MP4) requerirá de un
procesador de 32 bits o de 64 bits y de uno o más códecs de señal digital (audio y/o vídeo). El control
de un sistema de frenos ABS (Antilock Brake System) se basa normalmente en un microcontrolador
de 16 bits, al igual que el sistema de control electrónico del motor en un automóvil.

Los microcontroladores representan la inmensa mayoría de los chips de computadoras vendidos,


sobre un 50% son controladores "simples" y el restante corresponde a DSP más especializados.
Mientras se pueden tener uno o dos microprocesadores de propósito general en casa (Ud. está
usando uno para esto), usted tiene distribuidos seguramente entre los electrodomésticos de su hogar
una o dos docenas de microcontroladores. Pueden encontrarse en casi cualquier dispositivo
electrónico como automóviles, lavadoras, hornos microondas, teléfonos, etc.
LOS MICROCONTROLADORES DE HOY EN DIA

Microcontroladores en la actualidad.

El microcontrolador es uno de los logros más sobresalientes del siglo XX. Hace un cuarto de siglo tal
afirmación habría parecido absurda. Pero cada año, el microcontrolador se acerca más al centro de
nuestras vidas, forjándose un sitio en el núcleo de una máquina tras otra. Su presencia ha comenzado a
cambiar la forma en que percibimos el mundo e incluso a nosotros mismos. Cada vez se hace más difícil
pasar por alto el microcontrolador como otro simple producto en una larga línea de innovaciones
tecnológicas.

Ninguna otra invención en la historia se ha diseminado tan aprisa por todo el mundo o ha tocado tan
profundamente tantos aspectos de la existencia humana. Hoy existen casi 15,000 millones de microchips
de alguna clase en uso . De cara a esa realidad, ¿quién puede dudar que el microcontrolador no sólo está
transformando los productos que usamos, sino también nuestra forma de vivir y, por último, la forma en
que percibimos la realidad?

No obstante que reconocemos la penetración del microcontrolador en nuestras vidas, ya estamos


creciendo indiferentes a la presencia de esos miles de máquinas diminutas que nos encontramos sin
saberlo todos los días. Así que, antes de que se integre de manera demasiado imperceptible en nuestra
diaria existencia, es el momento de celebrar al microcontrolador y la revolución que ha originado, para
apreciar el milagro que es en realidad cada uno de esos chips de silicio diminutos y meditar acerca de su
significado para nuestras vidas y las de nuestros descendientes.

Primero, la revolución. Si desecháramos el microchip de todas y cada una de las aplicaciones en las que
ahora encuentra un hogar, terminaríamos aturdidos y aterrorizados por la pérdida. La cocina moderna
quedaría casi inservible porque el horno de microondas, la máquina lavavajillas y la mayoría de otros
aparatos domésticos no funcionarían más. El televisor y la videocasete se reducirían a la negrura, el equipo
estereofónico se volvería mudo y la mayoría de los relojes se detendrían. El automóvil no arrancaría. Los
aviones no podrían despegar del suelo. El sistema telefónico quedaría muerto, al igual que la mayoría de
las luces de las calles, termostatos y, desde luego, unos 500 millones de computadoras. Y éstas son tan
sólo las aplicaciones más evidentes. Todas las fábricas del mundo industrial pararían y también la red
eléctrica, las bolsas de valores y el sistema bancario global. Pero vayamos más a fondo: los marcapasos se
detendrían también, al igual que el equipo quirúrgico y los sistemas de supervisión fetal.

Todo debido a la pérdida de un diminuto cuadradito de silicio del tamaño de la uña de un dedo, que pesa
menos que una estampilla postal, y construido tan sólo de cristal, fuego, agua y metal.

Desde luego, éste es el milagro. Decenas de miles de microcontroladores se integran todos los días en las
plantas de manufactura más avanzadas jamás conocidas, donde un simple gránulo de polvo puede
significar el desastre, donde los procesadores ocurren en ambientes más limpios que ningún otro sitio en
la tierra. Incluso el agua que utiliza para enjuagar las superficies de los chips terminados es más pura que
la que se utiliza en la cirugía a corazón abierto.

Y no obstante, pese a un proceso de manufactura extraordinariamente refinado, los microchips se


producen en volumen a razón de más de 1,000 millones de unidades por año. Para poner esta complejidad
en perspectiva, imagínese que dentro de cada microcontrolador diminuto existe una estructura tan
compleja como una ciudad de tamaño mediano, incluidas todas sus líneas de energía eléctrica, líneas
telefónicas, líneas de drenaje, edificios, calles y casas. Ahora imagine que en esa misma ciudad, millones
de personas se desplazan a la velocidad de la luz y con la sincronización perfecta en una danza de
coreografía muy complicada.

Y eso es tan sólo un chip. De todas las estadísticas asombrosas que se utilizan para describir el mundo del
microcontrolador, ninguna es más extraordinaria que ésta: el número total de transistores que integran
todos los microchips que se producirán en el mundo este año es equivalente al número de gotas de lluvia
que caerán en California durante ese mismo periodo.

Pero el microcontrolador ya ha eclipsado hasta a la Revolución Industrial. Evolucionando a mayor


velocidad que ningún otro invento en la historia, la capacidad del microprocesador ha aumentado 10,000
veces en los últimos 25 años. Lo que es notable, y quizá un poco atemorizante, es que por todos los
indicios, estamos tan sólo a la mitad de la historia del microcontrolador. No es muy aventurado sugerir
que la humanidad tardará otro siglo en comprender todas las implicaciones de esta revolución. Por lo
tanto, todos los milagros de que somos testigos hoy como resultado del microcontrolador pueden ser si
acaso una pequeñísima fracción de todas las maravillas que obtendremos de este dispositivo hacia el
nuevo milenio.

El más grande atributo del microcontrolador es que puede integrar inteligencia casi a cualquier artefacto.
Se le puede entrenar para adaptarse a su entorno, responder a condiciones cambiantes y volverse más
eficiente y que responda a las necesidades únicas de sus usuarios. Desmonte cualquier rincón de la vida
moderna, retire la capa exterior de cajas y material de construcción y luces parpadeantes, y como semillas
en una maceta, aparecerán microcontroladores por millones.

Principales ámbitos donde intervienen los microcontroladores:

Los siguientes son algunos campos en los que los microcontroladores tienen gran uso:

 En la industria del automóvil: Control de motor, alarmas, regulador del servofreno, dosificador,
etc.
 En la industria de los electrodomésticos: control de calefacciones, lavadoras, cocinas eléctricas,
etc.
 En informática: como controlador de periféricos. Por ejemplo para controlar impresoras, plotters,
cámaras, scanners terminales, unidades de disco, teclados, comunicaciones (modems), etc.
 En la industria de imagen y sonido: tratamiento de la imagen y sonido, control de los motores de
arrastre del giradiscos, magnetófono, video, etc.
En la industria, en general se utilizan en:
 Regulación: todas las familias
e microcontroladores incorporan en alguna de sus versiones conversores A/D y D/A, para la
regulación de la velocidad de las máquinas, de niveles, de temperatura, etc.
 Automatismos: La enorme cantidad de líneas de entrada y salidas, y su inmunidad al ruido le hacen
muy valioso para el control secuencial de procesos. Por ejemplo control de máquinas,
herramientas, apertura y cierre automático de puertas según condiciones, plantas
empaquetadoras, aparatos de maniobra de ascensores, etc.
 Robótica: para control de los motores y captura de señales de los diferentes sensores, fabricación
de controladores robóticos para sistemas automáticos, etc.
Instrumentos portátiles compactos:

 Radio paginador numérico (beeper).


 Planímetro electrónico.
 Nivelímetro digital.
 Identificador-probador de circuitos integrados.
 Tacómetro digital.
 Panel frontal de un osciloscopio.
 Controlador de display LCD.
 Analizador de espectros, etc.
Dispositivos autónomos:

 Fotocopiadoras.
 Máquinas de escribir.
 Selector, Codificador decodificador de TV.
 Localizador de peces.
 Teléfonos de tarjeta.
 Teléfonos celulares.
 Cerraduras electrónicas.
 Sistemas de seguridad.
El número de productos que funcionan en base a uno o varios microcontroladores aumenta de forma
exponencial. No es aventurado pronosticar que en el siglo XXI habrá pocos elementos que carezcan de
microcontrolador.
La industria Informática acapara gran parte de los microcontroladores que se fabrican. Casi todos los
periféricos del computador, desde el ratón o el teclado hasta la impresora, son regulados por el programa
de un microcontrolador.
Los electrodomésticos de línea blanca (lavadoras, hornos, lavavajillas, etc.) y de línea marrón (televisores,
vídeos, aparatos musicales, etc.) incorporan numerosos microcontroladores. Igualmente, los sistemas de
supervisión, vigilancia y alarma en los edificios utilizan estos chips para optimizar el rendimiento de
ascensores, calefacción, aire acondicionado, alarmas de incendio, robo, etc.
Las comunicaciones y sus sistemas de transferencia de información utilizan profundamente estos
pequeños computadores incorporándolos en los grandes automatismos y en los modernos teléfonos.
La instrumentación y la electromedicina son dos campos idóneos para la implementación de circuitos
integrados. Una importante industria suministradora de microcontroladores es la automoción, que los
aplica en el control de aspectos tan populares como la climatización, la seguridad y los frenos ABS.
Las comunicaciones y los productos de consumo general absorben más de la mitad de la producción de
microcontroladores. El resto se distribuye entre el sector de automoción, los computadores y la industria.

Como conclusión y al tratar el tema podemos darnos cuenta el avance sustancial que han tenido los
microcontroladores,estos son circuitos integrados que llegaron a revolucionar la industria de
la computación pero más aun la tecnología en general, ya que si nos ponemos a pensar, la
gran mayoría (por no decir todos) los dispositivos electrónicos tienen uno o más microcontroladores que
le permiten cumplir a cabalidad las funciones que se les fueron asignadas, esto debido a la gran capacidad
que tienen integrado estos pequeños pero poderosos dispositivos.

DESARROLLO

La entrada de voltaje del microcontrolador deberá de ser suministrada con un regulador 7805 para evitar
algún daño posible

Circuito de fuente de +5v para TTL

I. Encender un led

1.- Realizar el siguiente ejercicio en el PIC C Compiler en un proyecto nuevo y en una carpeta exclusiva
para este ejercicio, el cual consta de prender y apagar un led cada ½ segundo.
2.- Compile el programa y verifique si existe algún error
3.- Realice el siguiente montaje en Proteus del circuito antes programado.

Montaje del Microcontrolador 18f4550


4.- Pulse doble clic sobre el microcontrolador y en program file introduzca el archivo .hex del código ya
antes compilado

5.- Correr la simulación y observar que sea correcta.

6.- En la misma carpeta donde se guardo el programa guardar la simulación.

7.- Grabe el programa dentro del microcontrolador

8.- Realice ahora el circuito en protoboard y verifique su funcionamiento.

9.- Mida la salida del microcontrolador con y sin led.


Cuestionario:
1. ¿Hubo alguna diferencia entre la simulación y la construcción en el Protoboard?
Muy poca, ya que tiene los mismos pines, solo varia un poco en el acomodo de estos, pero tiene
el mismo funcionamiento.

2. ¿Qué efecto hubo con respecto a los voltajes de salida con y sin led conectado?
Sin el led conectado el voltaje es de 5v pero cuando se conecta el led, debido a la resistencia que
tiene conectada el votaje disminuye casi la mitad ya que al medirlo maraca 2.23v

II. Encender 2 Leds


1. Realice una secuencia en la cual dos led prendan alternadamente cada 500 ms. (Incluya aquí el
programa utilizado).
Espacio para que desarrolle el programa:

Se utilizo pic c++

Y es importante anexar estos fusibles en caso de programar con la tarjeta de


desarrollo, ya que sin esto no funcionara, si no se usa la tarjeta de desarrollo no es
necesario anexarlo.
Este es el programa para encender los dos leds:

2. Realice el siguiente montaje en Proteus del circuito antes programado

3.-Correr la simulación y observar que sea correcta.


4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
5.- Realice ahora el circuito en protoboard y verifique su funcionamiento.

Cuestionario:

1. ¿Hubo alguna diferencia entre la simulación y la construcción en el Protoboard?


Si, en el protoboard es necesario alimentar el microcontrolador y en simulación no, además de que
si varia un poco en el acomodo de estos.

III. Secuencia de un semáforo


3. Realice un programa en la cual muestre la secuencia de un semáforo en el cual el foco rojo dure
500 ms, el verde 700 ms y el amarillo sea intermitente 3 veces con duración de 100 ms cada uno.
(Incluya aquí el programa utilizado).

Nota: se puede utilizar la instrucción output_b(0b11110000); para habilitar 0 o 1 en el puerto, en


este caso en el puerto b los primeros 4 bits están en bajo y los últimos 4 están en alto.
Espacio para que desarrolle el programa:
4. Realice el siguiente montaje en Proteus del circuito antes programado

3.-Correr la simulación y observar que sea correcta.


4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
5.- Realice ahora el circuito en protoboard y verifique su funcionamiento.

Cuestionario:

2. ¿Hubo alguna diferencia entre la simulación y la construcción en el Protoboard?

Si, un poco en la alimentación y en la numeración de algunos de los pines.

IV. Secuencia de un crucero de semáforos


5. Realice un programa en la cual muestre la secuencia de un crucero de 4 semáforos el cual indique
que cuando un semáforo se encuentre en verde los otros 3 estarán en rojo, utilizar los mismos
parámetros de tiempo del ejercicio anterior (Incluya aquí el programa utilizado).
Espacio para que desarrolle el programa:
6. Realice el siguiente montaje en Proteus del circuito antes programado
3.-Correr la simulación y observar que sea correcta.
4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
5.- Realice ahora el circuito en protoboard y verifique su funcionamiento.

Cuestionario:

3. ¿Hubo alguna diferencia entre la simulación y la construcción en el Protoboard?


Si hubo alguna diferencia significativa en la construcción del protoboard pero fue minima.

4. ¿Se encontró una forma de reducir o simplificar el código del programa?


No se encontró un código para simplificar el programa.
CONCLUSION:
Se realizo con éxito todo el desarrollo para realizar los distintos programas preestablecidos, desde el
encendido de un led, el de un semáforo y el de un cruzero desde los conocimientos rudimentarios
obtenidos y una vez desarrollada mas esta habilidad de la programación de pic

Es muy importante el saber realizar esto, ya que es la base para realizar cualquier otro circuito complejo.

BIBLIOGRAFIAS:
https://es.wikipedia.org/wiki/Microcontrolador
https://microcontroladoressesv.wordpress.com/arquitectura-de-los-microc..
Practica 2

Resumen

En esta práctica se trabajó con lo que se conoce como secuencias de luces con el
micro controlador y fue la practica en la que se conoció la instrucción de
porta=%00000000 que dependiendo de la posición del 0 si se cambia por un uno el
puerto en este caso “A” será activado y por lo tanto el led que vaya conectado a
este puerto será encendido a menos que esté usando una configuración de cátodo
común en ese caso el led prendera cuando los puertos estén en estado bajo es decir
en 0, se empezó encendiendo un led en el puerto B con un push botton después se
encendieron 3 leds y a continuación se iniciaron las secuencias en un principio y
para que quedara claro se hizo que todo el puerto d cambiara de alto a bajo en un
determinado tiempo para que los leds que estuvieran conectados a este puerto
prendieran y apagaran consecutivamente y automáticamente ya que en el cuarto
ejercicio se introdujo un código en el programa para que los leds hicieran la misma
acción pero sin embargo en este caso ya harían si secuencia 5 veces si el push botton
fuera presionado, en la 5nta practica se hizo algo similar solo q en esta ecuación se
usaron 3 push botton y cada combinación hace una secuencia diferente en los leds
por lo tanto en cada combinación se iba haciendo diferente la secuencia, en el sexto
ejercicio se realizó algo similar solo que esta vez se cambiaron los leds por un display
de 7 segmentos y en esta ocasión en cada combinación debería de aparecer nuestro
número de matrícula seguida de la palabra hola y con este ejercicio se concluye la
practica dos.
En conclusión se pueden hacer muchas secuencias con los puertos si son entradas
y salidas solo hay que tener cuidado de los tiempos y de los leds que se desean
encender cada vez que se vaya a hacer una combinación en el dip swich o en los
push botton dependiendo de lo que se esté utilizando.
Marco Teórico
En esta ocasión te presentaremos dos sencillos programas escritos en
ensamblador para el PIC16F877A. El primero de ellos enciende y apaga un LED
conectado al pin RA0 del microcontrolador; mientras que el segundo, prende
secuencialmente los LEDsque han sido conectados al puerto B del mismo.

Además, aprenderemos a simular nuestro microcontrolador en Isis


Proteus eimplementaremos físicamente nuestro PIC en el protoboard.

- Para esta práctica utilizaremos un programador de PICs, que seguramente


encontrarás en tu centro educativo.
- Usaremos el compilador gratuito de Microchip “MPLAB IDE” para escribir
nuestro programa en ensamblador y obtener el archivo .HEX (utilizado por el
programador para grabar el micro). Descargar MPLAB IDE.
- Aunque los PICs son resistentes a la estática, debemos tener cuidado de no tocar
sus pines.

ENCENDIDO DE UN LED.
El siguiente código nos permitirá encender y apagar un LED conectado al pin RA0
del PIC.

__CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF ;
Configuración para
el programador

LIST p=16F877A
INCLUDE <P16F877A.INC>

ORG 0x00 ;Inicio de programa

N EQU 0x00
cont1 EQU 0x20
cont2 EQU 0x21
BCF STATUS,RP0 ; Accede a banco 0
BCF STATUS,RP1
CLRF PORTA ; Limpia PORTA
BSF STATUS,RP0 ; Accede a banco 1
CLRF TRISA ; Configura todos las patitas de PORTA como salidas
BCF STATUS,RP0 ; Regresa a banco 0

Encled
BSF PORTA,0 ; La línea RA0 de PORTA toma el valor de 1, se enciende el LED
CALL Retardo ; Llamada a la rutina de retardo
BCF PORTA,0 ; La línea RA0 de PORTA toma el valor de 0, se apaga el LED
CALL Retardo ; Llamada a la rutina de retardo
GOTO Encled ; Va a la etiqueta Encled

Retardo ; Rutina de retardo


MOVLW N
MOVWF cont1
Rep1
MOVLW N
MOVWF cont2
Rep2
DECFSZ cont2,1
GOTO Rep2
DECFSZ cont1,1
GOTO Rep1
RETURN ; Retorno a la llamada de rutina de retardo.

END ; Fin de programa

Y aquí, nuestro circuito implementado en el protoboard simplificado.


Para esta práctica hemos
utilizado una resistencia (R1) de 10 Kilo Ohms, un cristal (XTAL) de 4 MHz y una
resistencia (R2) de 200 a 300 Ohms para limitar la corriente que llegara a nuestro
LED.

ENCENDIDO SECUENCIAL DE LEDs.


Este código nos permitirá encender secuencialmente los LEDs conectados al
puerto B del micro, en un ciclo infinito de RB0 a RB7.

__CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF ;
Configuración para
el programador

LIST p=16F877A
INCLUDE <P16F877A.INC>

ORG 0x00 ; Inicio de programa

N EQU 0x00
cont1 EQU 0x20
cont2 EQU 0x21

BCF STATUS,RP0 ; Accede a banco 0


BCF STATUS,RP1
CLRF PORTB ; Limpia PORTB
BSF STATUS,RP0 ; Accede a banco 1
CLRF TRISB ; Configura todas las patitas de PORTB como salidas
BCF STATUS,RP0 ; Regresa a banco 0

BSF PORTB,0 ; La línea RA0 de PORTB toma el valor 1, se enciende el LED


Encledsec
CALL Retardo ; Llamada a la rutina de retardo
RLF PORTB,1 ; Recorre el bit de RB0 a RB7
GOTO Encledsec ; Va a la etiqueta Encledsec

Retardo ; Rutina de retardo


MOVLW N
MOVWF cont1
Rep1
MOVLW N
MOVWF cont2
Rep2
DECFSZ cont2,1
GOTO Rep2
DECFSZ cont1,1
GOTO Rep1
RETURN ; Retorno a la llamada de rutina de retardo.

END ; Fin de programa

Y aquí, su correspondiente implementación en el protoboard.

Para esta práctica hemos


utilizado una resistencia (R1) de 10 Kilo Ohms, un cristal (XTAL) de 4 MHz, y 7 LEDs.
Es muy importante que entre la salida de los pines del microcontrolador y sus
respectivos LEDs, coloquemos una resistencia de aproximadamente 200 Ohms,
para evitar averías en nuestro microcontrolador.

IMPLEMENTACIÓN EN PROTEUS.

Seguramente te querrás asegurar de que tu programa funcione correctamente


antes de ir a grabar tu PIC en la programadora y darte cuenta de que al implementar
físicamente tu circuito, este no hace nada. Para probar el correcto funcionamiento
de nuestro circuito existen programas como Isis Proteus que nos permiten simular
una gran variedad de microcontroladores de una manera rápida y sencilla.

Para simular nuestros micros en ISIS:

1.- Escoger el modelo de nuestro microcontrolador y colocarlo en el espacio de


trabajo.

2.- Hacer doble click sobre él, con lo que nos aparecerá la siguiente ventana:

En ella, simplemente
hacemos click sobre la imagen de la carpetita (ubicada en la opción Program File)
para buscar y cargar el archivo .HEX.

3.- Y listo, finalmente simularemos el microcontrolador para comprobar que


nuestro circuito funcione perfectamente bien.

PARA QUE NUESTRO PIC FUNCIONE FÍSICAMENTE.


Nuestro código parece estar bien, nuestra simulación funciona perfectamente,
pero ¡Oh Sorpresa!, a la hora de implementarlo en el protoboard nuestro
proyecto no funciona. Aquí una serie de medidas a tomar en cuenta si nuestro
microcontrolador PIC16F877A no hace nada.

1. Alimentar correctamente nuestro PIC.


Debemos asegurarnos de que nuestro micro este bien alimentado. Para ello veamos
el diagrama de pines del microcontrolador,

En él, podremos apreciar que


existen 4 pines marcados con los símbolos VDD y VSS, estas son las patillas de
alimentación, donde VDD va conectado a voltaje y VSS a (masa) ó a tierra. Para
alimentar a nuestro PIC solo debemos conectar dos de las cuatro patillas, una VDD
y una VSS.

2. Realizar las siguientes conexiones.


El pin 1 del microcontrolador (MCLR/VPP) debe estar conectado a voltaje por medio
de un resistor de 10 Kilo Ohms.

Además, conectaremos dos capacitores (C1 y C2) junto al oscilador de cristal (XTAL)
como lo vemos en la siguiente imagen.
Los valores de los capacitores varían
de acuerdo al tipo de oscilador utilizado (LP, XT, HS), en la siguiente tabla podemos
ver estos valores.

En nuestras prácticas no hemos


utilizado estos capacitores, ya que sin ellos funcionan bien.

3. Configurar correctamente los bits o fusibles de configuración.


Es decir, debemos asegurarnos de activar los bits correctos de acuerdo a las
necesidades del proyecto. En muchas de las prácticas solo debemos escoger el tipo
de cristal, así que deshabilitaremos todas las demás opciones de configuración. Para
estas prácticas hemos utilizado el oscilador de cristal tipo XT.

Objetivos
Generales
 Practicar las secuencias de los puertos para proyectos futuros.
 Conocer lo que es una entrada y una salida del micro para tener un correcto funcionamiento.

Particulares
 Conocer la ubicación de los puertos para una correcta conexión del circuito.
 Realizar en físico las prácticas para verificar su funcionamiento.

MATERIAL Y EQUIPO
 18F4550
 7805
 8 Led
 3 R220Ω o R330Ω
 1 R10KΩ
 1 Cristal 20MHZ
 2 Capacitores Cerámicos 22pF
 Protoboard
 Fuente de voltaje
 Multímetro

DESARROLLO
La entrada de voltaje del microcontrolador deberá de ser suministrada con un regulador 7805 para evitar
algún daño posible

Circuito de fuente de +5v para TTL

V. Encender un led con un boton

1.- Realizar el siguiente ejercicio en el PIC C Compiler en un proyecto nuevo y en una carpeta exclusiva
para este ejercicio, el cual consta de prender y apagar un led por medio de un push boton
.

2.- Compile el programa y verifique si existe algún error


3.- Realice el siguiente montaje en Proteus del circuito antes programado.

Montaje del Microcontrolador 18f4550

4.- Pulse doble clic sobre el microcontrolador y en program file introduzca el archivo .hex del código ya
antes compilado
5.- Correr la simulación y observar que sea correcta.

6.- En la misma carpeta donde se guardo el programa guardar la simulación.

7.- Grabe el programa dentro del microcontrolador

8.- Realice ahora el circuito en protoboard y verifique su funcionamiento.


Cuestionario:
3. ¿Hubo alguna diferencia entre la simulación y la construcción en el Protoboard?

VI. Encender 3 Leds con botones


VII.
7. Realice un programa con el cual pueda encender 3 leds cada uno con un boton. (Incluya aquí el
programa utilizado).

Espacio para que desarrolle el programa:

#include <18f4550.h> //libreria del microcontrolador

#fuses XT,NOWDT //indicaciones para el programador

#use delay(clock=2000000) //crystal a utilizar

#use fast_io(b) //entradas y salidas rapidas del puerto b

#use fast_io(c) //entradas y salidas rapidas del puerto c

void main() // inicio del programa principal

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_B(0x03);//activar puerto b de entrada

set_tris_C(0x00);//activar puerto c de salida

while(1) //ciclo infinito

{
if (INPUT(PIN_B0)==1) //si el valor en la entrada b0 es igual a 1

{output_high(PIN_C0);//enciende el bit al pin c0

else // si no se cumple la condicion

output_low(PIN_C0);//manda un 0 al puerto c0

if (INPUT(PIN_B1)==1) //si el valor en la entrada b0 es igual a 1

{output_high(PIN_C1);//enciende el bit al pin c0

else // si no se cumple la condicion

output_low(PIN_C1);//manda un 0 al puerto c0

if (INPUT(PIN_B2)==1) //si el valor en la entrada b0 es igual a 1

{output_high(PIN_C2);//enciende el bit al pin c0

else // si no se cumple la condicion

output_low(PIN_C2);//manda un 0 al puerto c0

}
8. Realice el siguiente montaje en Proteus del circuito antes programado

3.-Correr la simulación y observar que sea correcta.


4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
6.- Realice ahora el circuito en protoboard y verifique su funcionamiento.

Cuestionario:

5. ¿Hubo alguna diferencia entre la simulación y la construcción en el Protoboard?

VIII. Secuencia de luces 1


1. Realice un programa en la cual encienda una salida en leds conforme a la combinación de entrada
de botones.
Respete la siguiente secuencia.

ABC PUERTO
000 00000000
111 11111111
Nota: Para habilitar la comparación de las entradas puede utilizar la estructura de programación de
una compuerta lógica, en este caso solamente cuando todas las entradas estén activas en 1, se
cumple la condición de todo el puerto encendido, (este deberá estar dentro del while, y hacer cumplir
la condición de salida correspondiente a las salidas del puerto)
Espacio para que desarrolle el programa:

//Fusibles para no borrar o desprogramar el bootlader por Error

#include "18f4550.h"

#fuses
HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB,CPB

#use delay(clock=48000000)

//----No borrar necesario para el bootloader-----------------------//

#build(reset=0x800, interrupt=0x808)

#org 0x000, 0x7ff { }

//----No borrar necesario para el bootloader-----------------------//

void main() // inicio del programa principal

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_B(0x03);//activar puerto b de entrada

set_tris_C(0x00);//activar puerto c de salida

while(1) //ciclo infinito

if ((INPUT(PIN_B0)==1)&(INPUT(PIN_B1)==1)&(INPUT(PIN_B2)==1)) //si B0,B1,B2 son 1 enciende el puerto

output_high(PIN_D0);// si se cumple la condicion

output_high(PIN_D1);// si se cumple la condicion

output_high(PIN_D2);// si se cumple la condicion

output_high(PIN_D3);// si se cumple la condicion

output_high(PIN_D4);// si se cumple la condicion

output_high(PIN_D5);// si se cumple la condicion

output_high(PIN_D6);// si se cumple la condicion

output_high(PIN_D7);// si se cumple la condicion

else
{

output_low(PIN_D0);//si no se cumple la condicion

output_low(PIN_D1);// si se cumple la condicion

output_low(PIN_D2);// si se cumple la condicion

output_low(PIN_D3);// si se cumple la condicion

output_low(PIN_D4);// si se cumple la condicion

output_low(PIN_D5);// si se cumple la condicion

output_low(PIN_D6);// si se cumple la condicion

output_low(PIN_D7);// si se cumple la condicion

2. Realice el siguiente montaje en Proteus del circuito antes programado

3.-Correr la simulación y observar que sea correcta.


4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
5.- Realice ahora el circuito en protoboard y verifique su funcionamiento.

IX. Secuencia de luces 2


1. Realice un programa el cual realice lo siguiente:
 Cuando se coloque la combinación entrada 1=0 y entrada 2=1, deberá de realizar una secuencia
de prender y apagar alternadamente el puerto 5 veces, cualquier otra combinación se mantendrá
todo el puerto apagado.

Nota: Para habilitar un número determinado de iteraciones debemos de recurrir a un ciclo for,
primero se deberá dar de alta la variable que llamaremos en esta ocasión i y será una variable
entera y deberá colocarse dentro del programa principal.

En este caso conforme al programa anterior deberá de colocarse la estructura dentro de la condición
solicitada.

Espacio para que desarrolle el programa:


//Fusibles para no borrar o desprogramar el bootlader por Error

#include "18f4550.h"

#fuses
HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB,CPB

#use delay(clock=48000000)

//----No borrar necesario para el bootloader-----------------------//

#build(reset=0x800, interrupt=0x808)

#org 0x000, 0x7ff { }

//----No borrar necesario para el bootloader-----------------------//

void main() // inicio del programa principal

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(1) //ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==1)) //si B0 esta en 0 y B1 esta en unp

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i

delay_ms(200);
output_high(PIN_B0);// si se cumple la condicion

output_high(PIN_B1);// si se cumple la condicion

output_high(PIN_B2);// si se cumple la condicion

output_high(PIN_B3);// si se cumple la condicion

output_high(PIN_B4);// si se cumple la condicion

output_high(PIN_B5);// si se cumple la condicion

output_high(PIN_B6);// si se cumple la condicion

output_high(PIN_B7);// si se cumple la condicion

delay_ms(200);

output_low(PIN_B0);//si no se cumple la condicion

output_low(PIN_B1);// si se cumple la condicion

output_low(PIN_B2);// si se cumple la condicion

output_low(PIN_B3);// si se cumple la condicion

output_low(PIN_B4);// si se cumple la condicion

output_low(PIN_B5);// si se cumple la condicion

output_low(PIN_B6);// si se cumple la condicion

output_low(PIN_B7);// si se cumple la condicion

delay_ms(200);

2. Realice el siguiente montaje en Proteus del circuito antes programado


3.-Correr la simulación y observar que sea correcta.
4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
5.- Realice ahora el circuito en protoboard y verifique su funcionamiento.

X. Subprogramas

1. Realice un programa el cual realice los siguientes ciclos:

Entradas Secuencia 1 Secuencia 2 Número de repeticiones


000 11111111 00000000 5 veces
001 10101010 01010101 5 veces
010 11110000 00001111 5 veces
100 00110011 11001100 5 veces
111

Nota: Puede crear subprogramas para mandar a cada ciclo determinado, para ello debemos de
declarar cada subprograma
Luego mandar llamar al subprograma en la sentencia que se tenga que utilizar

Espacio para que desarrolle el programa:


//Fusibles para no borrar o desprogramar el bootlader por Error

#include "18f4550.h"

#fuses
HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB,CPB

#use delay(clock=48000000)

//----No borrar necesario para el bootloader-----------------------//

#build(reset=0x800, interrupt=0x808)

#org 0x000, 0x7ff { }

//----No borrar necesario para el bootloader-----------------------//

#include <lcd.c>

#include <kbd.c>

char k;

#use fast_io(b) //entradas y salidas rapidas del puerto b

#use fast_io(c) //entradas y salidas rapidas del puerto c

void secuencia1 (void);

void secuencia2 (void);

void secuancia3 (void);

void secuancia4 (void);

void secuencia1(void)//programa de secuenacia 1

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(1)//ciclo infinito
{

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

OUTPUT_B(0b11111111);//todo el puerto d encendido

delay_ms(500);// retardo de 300 milisegundos

OUTPUT_B(0b00000000);//todo el puerto d apagado

delay_ms(500);//retardo de 300 milisegundos

void secuencia2(void)//programa de secuenacia 2

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(2)//ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

OUTPUT_B(0b10101010);//todo el puerto d encendido

delay_ms(500);// retardo de 300 milisegundos

OUTPUT_B(0b01010101);//todo el puerto d apagado

delay_ms(500);//retardo de 300 milisegundos

void secuencia3(void)//programa de secuenacia 3


{

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(3)//ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

OUTPUT_B(0b11110000);//todo el puerto d encendido

delay_ms(500);// retardo de 300 milisegundos

OUTPUT_B(0b00001111);//todo el puerto d apagado

delay_ms(500);//retardo de 300 milisegundos

void secuencia4(void)//programa de secuenacia 4

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(4)//ciclo infinito

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

OUTPUT_B(0b00110011);//todo el puerto d encendido

delay_ms(500);// retardo de 300 milisegundos

OUTPUT_B(0b11001100);//todo el puerto d apagado

delay_ms(500);//retardo de 300 milisegundos

}
}

void main()//programa de secuenacia 1

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(1,2,3,4)//ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

{secuencia1 ();// se usa la secuencia 1

else//si nno se cumple la condicion entonces

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

{secuencia2 ();//se usa la secuencia 2

else//si no se cumple la condicion entonces

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

{secuencia3 ();//se usa la secuancia 3

else//si no se cumple la condicion entonces

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

{secuencia4 ();//se usa la secuancia 4

}
2. Realice el siguiente montaje en Proteus del circuito antes programado

3.-Correr la simulación y observar que sea correcta.


4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
5.- Realice ahora el circuito en protoboard y verifique su funcionamiento.

Cuestionario:

6. ¿Hubo alguna diferencia entre la simulación y la construcción en el Protoboard?


7. ¿Se encontró una forma de reducir o simplificar el código del programa?
XI. Display 7 Segmentos
3. Realice un programa el cual realice los siguientes ciclos:

Entradas Número de repeticiones


000 palabra HOLA 5 veces
001 SECUENCIA 1,2,3,4 5 veces
010 SECUENCIA 4,3,2,1 5 veces
100 PALABRA SISI 5 veces
111 SECUENCIA 0,0,0,0

Nota: Cada caracter deberá de mantenerse 200 ms

Espacio para que desarrolle el programa:


//Fusibles para no borrar o desprogramar el bootlader por Error

#include "18f4550.h"

#fuses
HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB,CPB

#use delay(clock=48000000)

//----No borrar necesario para el bootloader-----------------------//

#build(reset=0x800, interrupt=0x808)

#org 0x000, 0x7ff { }

//----No borrar necesario para el bootloader-----------------------//

#include <lcd.c>

#include <kbd.c>

char k;

#use fast_io(a) //entradas y salidas rapidas del puerto b

#use fast_io(b) //entradas y salidas rapidas del puerto c

void secuencia1 (void);

void secuencia2 (void);

void secuancia3 (void);

void secuancia4 (void);

void secuencia1(void)//programa de secuenacia 1


{

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(1)//ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b11110110);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b10111111);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

OUTPUT_B(0b10111000);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b11110111);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

void secuencia2(void)//programa de secuenacia 2

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(2)//ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

int i;
for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b10000110);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b01011011);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

OUTPUT_B(0b01001111);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b01100110);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

void secuencia3(void)//programa de secuenacia 3

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(3)//ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b01100110);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b01001111);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

OUTPUT_B(0b01011011);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b00000110);//todo el puerto d apagado


delay_ms(300);//retardo de 300 milisegundos

void secuencia4(void)//programa de secuenacia 4

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(4)//ciclo infinito

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b01101101);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b00000110);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

OUTPUT_B(0b01101101);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b00000110);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

void secuencia5(void)//programa de secuenacia 4

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_A(0x03);//activar puerto b de entrada


set_tris_B(0x00);//activar puerto c de salida

while(5)//ciclo infinito

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i//ciclo for 5 veces

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b00111111);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b00000000);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

OUTPUT_B(0b00111111);//todo el puerto d encendido

delay_ms(300);// retardo de 300 milisegundos

OUTPUT_B(0b00000000);//todo el puerto d apagado

delay_ms(300);//retardo de 300 milisegundos

void main()//programa de secuenacia 1

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(1,2,3,4,5)//ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

{secuencia1 ();// se usa la secuencia 1

else//si nno se cumple la condicion entonces

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==1))//condiciones para cumplirse


{secuencia2 ();//se usa la secuencia 2

else//si no se cumple la condicion entonces

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

{secuencia3 ();//se usa la secuancia 3

else//si no se cumple la condicion entonces

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

{secuencia4 ();//se usa la secuancia 4

else//si no se cumple la condicion

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

{secuencia5 ();//se usa la secuencia 5

4. Realice el siguiente montaje en Proteus del circuito antes programado


3.-Correr la simulación y observar que sea correcta.
4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
5.- Realice ahora el circuito en protoboard y verifique su funcionamiento.
Cuestionario:
8. ¿Hubo alguna diferencia entre la simulación y la construcción en el Protoboard?
9. ¿Se encontró una forma de reducir o simplificar el código del programa?

XII. Decodificador de Matricula Escolar


1. Realice conforme al proyecto de la Unidad III la programación en él microcontrolador:

Espacio para que desarrolle el programa:


//Fusibles para no borrar o desprogramar el bootlader por Error

#include "18f4550.h"

#fuses
HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB,CPB

#use delay(clock=48000000)

//----No borrar necesario para el bootloader-----------------------//

#build(reset=0x800, interrupt=0x808)

#org 0x000, 0x7ff { }


//----No borrar necesario para el bootloader-----------------------//

#include <lcd.c>

#include <kbd.c>

char k;

#use fast_io(b) //entradas y salidas rapidas del puerto b

#use fast_io(c) //entradas y salidas rapidas del puerto c

void main()//programa de secuenacia 1

port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)

set_tris_A(0x03);//activar puerto b de entrada

set_tris_B(0x00);//activar puerto c de salida

while(1)//ciclo infinito

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b00111111);//todo el puerto d encendido num 0

delay_ms(300);// retardo de 300 milisegundos

else//si nno se cumple la condicion entonces

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b00000111);//todo el puerto d encendido num 7

delay_ms(300);// retardo de 300 milisegundos

else//si no se cumple la condicion entonces

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b01011011);//todo el puerto d encendido num 2

delay_ms(300);// retardo de 300 milisegundos

}
else//si no se cumple la condicion entonces

if ((INPUT(PIN_A0)==0)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b01101101);//todo el puerto d encendido num 5

delay_ms(300);// retardo de 300 milisegundos

else//si no se cumple la condicion

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b01110110);//todo el puerto d encendido letra H

delay_ms(300);// retardo de 300 milisegundos

else//si no se cumple la condicion

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==0)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b00111111);//todo el puerto d encendido letra O

delay_ms(300);// retardo de 300 milisegundos

else//si no se cumple la condicion

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==0))//condiciones para cumplirse

delay_ms(300);//retrado de 300 milisegundos

OUTPUT_B(0b00111000);//todo el puerto d encendido letra L

delay_ms(300);// retardo de 300 milisegundos

else//si no se cumple la condicion

if ((INPUT(PIN_A0)==1)&(INPUT(PIN_A1)==1)&(INPUT(PIN_A2)==1))//condiciones para cumplirse

delay_ms(300);//retrado de 300 milisegundos


OUTPUT_B(0b01110111);//todo el puerto d encendido letra A

delay_ms(300);// retardo de 300 milisegundos

1. Realice el siguiente montaje en Proteus del circuito antes programado


Resultados:
Los resultados que se obtuvieron a lo largo de las prácticas resultaron ser muy
venefactifles en los cuales pudimos observar que al ir realizando cada uno de los
ejercicios que se encuentran en este documento nos fueron sirviendo de guía para
de esta forma lograr realizar unos ejercicios por nosotros mismos.

Discusión:
En esta práctica se trabajó con lo que se conoce como secuencias de luces con el
micro controlador y fue la practica en la que se conoció la instrucción de
porta=%00000000 que dependiendo de la posición del 0 si se cambia por un uno el
puerto en este caso “A” será activado y por lo tanto el led que vaya conectado a este
puerto será encendido a menos que esté usando una configuración de cátodo
común en ese caso el led prendera cuando los puertos estén en estado bajo es decir
en 0, se empezó encendiendo un led en el puerto B con un push botton después se
encendieron 3 leds y a continuación se iniciaron las secuencias en un principio y
para que quedara claro se hizo que todo el puerto d cambiara de alto a bajo en un
determinado tiempo para que los leds que estuvieran conectados a este puerto
prendieran y apagaran consecutivamente y automáticamente ya que en el cuarto
ejercicio se introdujo un código en el programa para que los leds hicieran la misma
acción pero sin embargo en este caso ya harían si secuencia 5 veces si el push
botton fuera presionado.

Conclusión:
El realizar estas prácticas me fueron muy útiles para lograr comprender un poco de
estos componentes debido a que en mi opinión son una maravilla porque con estos
podemos hacer infinitamente trabajos así de esta forma poder facilitarnos la forma
de vivir pero para poder realizar su funcionamiento de forma adecuada se tiene que
tener en cuenta varios aspectos debido a que se requieren algunas especificaciones
para que puedan funcionar de una manera adecuada.

Referencias:
Robert F. Coagulan. (Tomado 30 de noviembre de 2005). fpld El 11 de abril del 2015, de no existe Sitio web:
http://64.233.187.104/search?q=cache:s1qs466xMjgJ:perso.wanadoo.es/chyryes/circuitos/ecual.htm+ECU
ALIZADOR&hl=es

Microcontroladores
Pedro montero. (2015). microcontroladores. 11 de abril del 2015, de no hay Sitio web:
http://www.cva.itesm.mx/biblioteca/pagina_con_formato_version_oct/apaweb.html

Jorge reyes. (03/01/1994). 4550. 11/04/2015, de no se sabe Sitio web:


https://www.google.com.mx/?gfe_rd=cr&ei=cTApVcOvIIWn8we56ICgAg&gws_rd=ssl

Microcontroladores
Practica 3

Resumen

En esta práctica se va a observar la manera de crear un contador que tenga varias funciones, como un
contador ascendente, descendente, los dos de manera combinada e incluso se verá el código para poder
mostrar la palabra “HOLA”.

Todos estos contadores, secuencias de números y palabras se verán en un display de 7 segmentos que se
alimentara con una placa de desarrollo marca π.

Tarjeta de desarrollo marca π

A partir de esa tabla de desarrollo se podrán hacer conexiones hacia circuitos exteriores donde se tenían
instalados displays de 7 segmentos para poder observar la secuencia de los contadores y de las palabras
mostradas en este.

Microcontroladores
Marco Teórico

El contador de programa (en inglés Program Counter o PC), también llamado Puntero de instrucciones
(Instruction Pointer), parte del secuenciador de instrucciones en algunas computadoras, es un registro del
procesador de un computador que indica la posición donde está el procesador en su secuencia de
instrucciones. Dependiendo de los detalles de la máquina particular, contiene o la dirección de la
instrucción que es ejecutada, o la dirección de la próxima instrucción a ser ejecutada. El contador de
programa es incrementado automáticamente en cada ciclo de instrucción de tal manera que las
instrucciones son leídas en secuencia desde la memoria. Ciertas instrucciones, tales como las bifurcaciones
y las llamadas y retornos de subrutinas, interrumpen la secuencia al colocar un nuevo valor en el contador
de programa.

En la inmensa mayoría de los procesadores, el puntero de instrucciones es incrementado inmediatamente


después de leer (fetch) una instrucción de programa; esto significa que la dirección a la que apunta una
instrucción de bifurcación es obtenida agregando el operando de la instrucción de bifurcación a la dirección
de la instrucción siguiente (byte o word, dependiendo del tipo de la computadora) después de la
instrucción de bifurcación. La dirección de la siguiente instrucción a ser ejecutada siempre se encuentra en
el contador de instrucción.

Es una variable que está en ambos miembros de una asignación interna, a la que se le suma un valor
constante. Es necesario haber inicializado en un momento previo a esta variable, ya que va a ser leído su
contenido.

Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante, cada vez
que se produce un determinado suceso, acción o iteración. Los contadores se utilizan con la finalidad de
contar
sucesos, acciones o iteraciones internas en un bucle, proceso, subrutina o donde se requiera cuantificar;
deben ser inicializados antes del ciclo o proceso, e incrementados o decrementados dentro del ciclo.
La inicialización consiste en asignarle al contador un valor inicial, es decir el número desde el cual
necesitamos se inicie el conteo. El contador contara (valga la redundancia) las iteraciones dentro del
algoritmo o contara el número de registro q desees.Ejemplo

c <-- 0;
REPITA
Escribir (' hola amigos')

c <-- c + 1
Hasta que c=100

Microcontroladores
Este ejemplo escribirá 100 veces "hola amigos" por pantalla

Información extraída el día 10/08/15 de:

https://sites.google.com/site/algoritmicai/contadores-y-sumadores

https://es.wikipedia.org/wiki/Contador_de_programa

Objetivos

Generales.

1.-Desarrollar una serie de contadores que cumplan con la función designada a cada uno

2.-Aprender el funcionamiento de un código en Pic C de cómo funcionan estos

Particulares.

Experimentar con diferentes secuencias y palabras para comprender mejor lo que son y cómo funcionan

Microcontroladores
MATERIAL Y EQUIPO

• 18F4550

• 7805

• 8 Led

• 3 R220Ω o R330Ω

• 1 R10KΩ

• 1 Cristal 20MHZ

• 2 Capacitores Cerámicos 22pF

• Protoboard

• Fuente de voltaje

• Display de 7 Segmentos.

DESARROLLO
La entrada de voltaje del microcontrolador deberá de ser suministrada con un regulador 7805 para
evitar algún daño posible

Circuito de fuente de +5v para TTL

I. Contador Ascendente

Microcontroladores
1.- Realizar el siguiente ejercicio en el PIC C Compiler en un proyecto nuevo y en una carpeta
exclusiva para este ejercicio, el cual consta de realizar un contador Ascendente utilizando la
estructura de almacenamiento de datos por medio de tablas.

Microcontroladores
2.- Compile el programa y verifique si existe algún error
3.- Realice el siguiente montaje en Proteus del circuito antes programado.

Montaje del Microcontrolador 18f4550

Microcontroladores
II. Contador Descendente

1. Realice un programa con el cual Realice un Contador Descendente de 9 a 0. (Incluya


aquí el programa utilizado).

Programa utilizado

char i=1;
int tab7seg[10]={0x3F,0XD6,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67}; //7seg hex

//PROGRAMA
void main (void)

{
set_tris_b(0x00); //PORT D COMO SALIDA
disable_interrupts(GLOBAL); //todas las interrupciones desactivadas
{
do{
output_b(tab7seg[ i ]); //muestra por portd digito 7 segmentos
delay_ms(900);
i--; //incremento contador para visualizar siguiente digito
if(i==0) //ya se motro el 9?
{
i=9; //si -> vuelve a empezar(digito 0
}
}while(true);

}
}

Microcontroladores
Microcontroladores
III. Contador Reversible
1. Realice un Programa el cual con un Switch cuando se encuentre en bajo podamos visualizar
un contador Ascendente y en estado Alto un contador Descendente.(El contador mo debe
de ser Interrumpido hasta que termine su cuenta).

Espacio para que desarrolle el programa:


#include <lcd.c>
char k;
#use fast_io(b) //entradas y salidas rapidas del puerto b
#use fast_io(d) //entradas y salidas rapidas del puerto d

void main() // inicio del programa principal


{
port_b_pullups(TRUE);//activar pullup el la entrada (puerto b)
set_tris_c(0x03);//activar puerto b de entrada
set_tris_B(0x00);//activar puerto c de salida

while(1) //ciclo infinito


{
if (INPUT(PIN_c0)==1) //si el valor en la entrada b0 es igual a 1
{
delay_ms(300);//retrado de 300 milisegundos
OUTPUT_B(0b00111111);// se muestra el numero 0
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b00000110);//se muestra el numero 1
delay_ms(300);//retardo de 300 milisegundos
OUTPUT_B(0b01011011);//se muestra el numero 2
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b01001111);//se muestra el numero 3
delay_ms(300);//retardo de 300 milisegundos
OUTPUT_B(0b01100110);//se muestra el numero 4
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b01101101);//se muestra el nnumero 5
delay_ms(300);//retardo de 300 milisegundos
OUTPUT_B(0b01111101);//se muestra el numero 6
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b00000111);//se muestra el numero 7
delay_ms(300);//retardo de 300 milisegundos
OUTPUT_B(0b01111111);//se muestra el numero 8
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b01101111);//se muestra el numero 9
delay_ms(300);//retardo de 300 milisegundos
}
else // si no se cumple la condicion
{
delay_ms(300);//retrado de 300 milisegundos
OUTPUT_B(0b01100111);// se muestra el numero 9
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b01111111);//se muestra el numero 8
delay_ms(300);//retardo de 300 milisegundos
OUTPUT_B(0b00000111);//se muestra el numero 7
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b01111101);//se muestra el numero 6
delay_ms(300);//retardo de 300 milisegundos
OUTPUT_B(0b01101101);//se muestra el numero 5
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b01100110);//se muestra el nnumero 4
delay_ms(300);//retardo de 300 milisegundos
OUTPUT_B(0b01001111);//se muestra el numero 3
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b01011011);//se muestra el numero 2
delay_ms(300);//retardo de 300 milisegundos
OUTPUT_B(0b00000110);//se muestra el numero 1
delay_ms(300);// retardo de 300 milisegundos
OUTPUT_B(0b00111111);//se muestra el numero 0
delay_ms(300);//retardo de 300 milisegundos
}
}
}

2. Realice el siguiente montaje en Proteus del circuito antes programado


IV. Parpadear Hola
1. Realice un programa el cual realice lo siguiente cuente con 1 display de 7
segmentos y aparezca la palabra hola la cual debe de encender cada letra con un
retardo de 500 ms :

Espacio para que desarrolle el programa:

#include <lcd.c>

char k;

#use fast_io(b) //entradas y salidas rapidas del puerto b

void main() // inicio del programa principal

set_tris_B(0x00);//activar puerto c de salida

while(1) //ciclo infinito

output_c(0b1111111);

if ((INPUT(PIN_A0)==1)) //si B0 esta en 0 y B1 esta en unp

int i;

for(i=0;i<5;i++) //i=0; se repite asta que sea cinco veces incremento i

delay_ms(400);//retrado de 300 milisegundos

OUTPUT_B(0b01110110);// se muestra el numero H

delay_ms(400);// retardo de 300 milisegundos

OUTPUT_B(0b00111111);//se muestra el numero O


delay_ms(400);//retardo de 300 milisegundos

OUTPUT_B(0b00111000);//se muestra el numero L

delay_ms(400);// retardo de 300 milisegundos

OUTPUT_B(0b01110111);//se muestra el numero A

delay_ms(400);//retardo de 300 milisegundos

Realice el siguiente montaje en Proteus del circuito antes programado


Resultados

Definitivamente los resultados fueron los esperados en esta práctica, ya que se realizó lo que las
instrucciones decían que se hiciera, e incluso se hizo más, en los displays de 7 segmentos se pudo
observar las secuencias de números y de letras en el orden esperado, incluso con el retardo designado a
cada una de estas.

Discusión
El desarrollo de esta práctica fue muy sencilla, ya que solo en una parte de ellas fue donde se tuvo la
necesidad de implementar un botón, ya que cuando se alimentaba el circuito encargado de correr el
programa cargado en el microcontrolador 18F4550, el programa corría automáticamente, solo fue en la
del contador reversible que se necesitó el botón para poder cambiar la dirección del contador, incluso se
refleja en la extensión de los programas, son muy cortos y de pocas líneas.

Conclusiones
Al momento de realizar estas prácticas, nos dimos una idea de cómo es que funciona un contador siendo
utilizado por un microcontrolador 18F4550, este tipo de contadores se pueden utilizar en muchísimas
aplicaciones, desde un detalle para alguien hasta para poder realizar un circuito donde sea necesario
llevar la cuenta de algo, como un taxímetro o una barra de las que les ponen a los camiones para contar
la cantidad de pasajeros que ingresan y salen de la unida
Practica 4

Resumen

En todos lados encontré el famoso circuito del Puente H para invertir la polaridad en los bornes del motor
y lograr el cambio de dirección de giro en un motor de CC.

Este puente se puede implementar de muchas maneras diferentes, puede ser con transistores o inclusive
con integrados que traen ya la implementación de dos puentes inversores como el L293.

La otra posibilidad consiste en utilizar un relé doble inversor por cada rueda, usando 2 puertos de la placa
de control por cada una.

El esquema interno del relé doble inversor es algo así:

El relé tiene por defecto dos contactos cerrados y dos abiertos. Entonces, con un puerto de la placa de
control manejamos la tensión del motor, encendiendo o apagando.

Con el otro puerto manejamos el sentido de giro al energizar la bobina del relé.
Marco teórico

Las técnicas de control de motores DC son herramientas que se utilizan para controlar la velocidad, el par
y el suministro de potencia de los motores de corriente continua. El control de motores puede llevarse a
cabo mediante tiristores y un conocimiento básico de electrónica de potencia.

La mayoría de motores utilizados en la industria se conectan directamente a las líneas de distribución


eléctrica, y se alimentan con corriente alterna o corriente directa. Las terminales de los devanados del
motor se conectan directamente a las líneas de suministro eléctrico, y sus características de operación se
mantienen inalterables, al tener una tensión de entrada constante. El motor trabaja en condiciones
nominales cuando se alimenta con la tensión indicada en la placa de operación, entregando potencia
constante a la carga conectada en el eje.

La naturaleza de la carga que se acopla al eje del motor define el comportamiento de esta máquina. Para
el caso de una carga liviana, el motor desarrollara una velocidad relativamente alta y un par de giro bajo.
Por el contrario, si se dispone de una carga pesada o difícil de mover, el motor se moverá a una velocidad
menor y entregara más par, pues una mayor carga lo exige. Sin embargo, si la carga se mantiene constante,
la operación del motor también se mantendrá constante, sin posibilidades de controlar la velocidad debido
a que la tensión de suministro no se ve modificada.

Existen casos en la industria que requieren el manejo de las características de operación de los motores.
Este control se suele hacer mediante tiristores. La combinación del motor, los tiristores de control y demás
componentes electrónicos asociados son conocidos como el sistema de control de velocidad, sistema de
accionamiento o sistema de excitación de motor.

Objetivos:
 Programar el microcontrolador para activar entradas hacia las salidas del microcontrolador.
 Identificar e implementar el uso del microcontrolador.

Materiales:

 18F4550
 7805
 8 Led
 3 R220Ω o R330Ω
 1 R10KΩ
 1 Cristal 20MHZ
 2 Capacitores Cerámicos 22pF
 Protoboard
 Fuente de voltaje
 Motor DC, Bipolar, Unipoar

Desarrollo:
Realizar el siguiente ejercicio en el PIC C Compiler en un proyecto nuevo y en una carpeta exclusiva para
este ejercicio, el cual consta de tener tres botones uno de START uno de Izquierda y un de Derecha, el cual
la lógica de funcionamiento del programa es que al lado que se quiera hacer girar el motor es apretarle
una vez y después accionar el botón de START para observar el cambio de giro.
Codificar el siguiente programa en Pic C, simular en Proteus solamente el circuito correspondiente al motor
que posea (unipolar o bipolar, elija entre cualquiera de los dos), posteriormente armar el circuito en
Protoboard y comprobar su funcionamiento, el cual realizará una vuelta completa a la derecha y una vuelta
completa a la Izquierda.
Resultados:
Discusión:
En esta práctica se observa que de manera muy fácil se puede controlar un motor de corriente continua,
empleando un puente h, resulto muy fácil a comparación de utilizar transistores en el cambio de giro de
dicho motor

Conclusión:
Es muy fácil emplear un control en un motor de cd utilizando un microcontrolador con un puente h
integrado como en este caso fue el ls293 para dicho control en los motores que se emplearon en la
práctica.
Referencias:
NED MOHAN, TORE M. UNDELAND y WILLIAM P. ROBBINS. Power Electronics: Converters, Applications
and Design. ↑ # # TIMOTHY J. MALONEY. Electrónica Industrial Moderna.

B. W. WILLIAMS Power Electronics, Devices, Drivers, Applications and Passive Components.Macmillan


Press LTD, 1987.
Practica 5

PRÁCTICA 2: LCD
OBJETIVO El alumno al final de la práctica:
Programará el Microcontrolador para activar entradas hacia las salidas del microcontrolador.
Identificará e implementará el uso del Microcontrolador.
MATERIAL Y EQUIPO
18F4550
7805
8 Led
3 R220Ω o R330Ω
1 R10KΩ
1 Cristal 20MHZ
2 Capacitores Cerámicos 22pF
Protoboard
Fuente de voltaje
LCD

MARCO TEÓRICO
Microcontrolador
Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz de ejecutar
las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen
una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales
de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.

Algunos microcontroladores pueden utilizar palabras de cuatro bits y funcionan a velocidad de reloj con
frecuencias tan bajas como 4 kHz, con un consumo de baja potencia (mW o micro vatios). Por lo general,
tendrá la capacidad de mantenerse a la espera de un evento como pulsar un botón o de otra interrupción;
así, el consumo de energía durante el estado de reposo (reloj de la CPU y los periféricos de la mayoría)
puede ser sólo de nano vatios, lo que hace que muchos de ellos sean muy adecuados para aplicaciones
con batería de larga duración. Otros microcontroladores pueden servir para roles de rendimiento crítico,
donde sea necesario actuar más como un procesador digital de señal (DSP), con velocidades de reloj y
consumo de energía más altos.

Cuando es fabricado el microcontrolador, no contiene datos en la memoria ROM. Para que pueda
controlar algún proceso es necesario generar o crear y luego grabar en la EEPROM o equivalente del
microcontrolador algún programa, el cual puede ser escrito en lenguaje ensamblador u otro lenguaje para
microcontroladores; sin embargo, para que el programa pueda ser grabado en la memoria del
microcontrolador, debe ser codificado en sistema numérico hexadecimal que es finalmente el sistema que
hace trabajar al microcontrolador cuando éste es alimentado con el voltaje adecuado y asociado a
dispositivos analógicos y discretos para su funcionamiento.
Características
Los microcontroladores están diseñados para reducir el costo económico y el consumo de energía de un
sistema en particular. Por eso el tamaño de la unidad central de procesamiento, la cantidad de memoria
y los periféricos incluidos dependerán de la aplicación. El control de un electrodoméstico sencillo como
una batidora utilizará un procesador muy pequeño (4 u 8 bits) porque sustituirá a un autómata finito. En
cambio, un reproductor de música y/o vídeo digital (MP3 oMP4) requerirá de un procesador de 32 bits o
de 64 bits y de uno o más códecs de señal digital (audio y/o vídeo). El control de un sistema de frenos ABS
(Antilock Brake System) se basa normalmente en un microcontrolador de 16 bits, al igual que el sistema
de control electrónico del motor en un automóvil.

Los microcontroladores representan la inmensa mayoría de los chips de computadoras vendidos, sobre un
50% son controladores "simples" y el restante corresponde a DSP más especializados. Mientras se pueden
tener uno o dos microprocesadores de propósito general en casa (Ud. está usando uno para esto), usted
tiene distribuidos seguramente entre los electrodomésticos de su hogar una o dos docenas de
microcontroladores. Pueden encontrarse en casi cualquier dispositivo electrónico
como automóviles, lavadoras, hornos microondas, teléfonos, etc.

Un microcontrolador difiere de una unidad central de procesamiento normal, debido a que es más fácil
convertirla en una computadora en funcionamiento, con un mínimo de circuitos integrados externos de
apoyo. La idea es que el circuito integrado se coloque en el dispositivo, enganchado a la fuente de energía
y de información que necesite, y eso es todo. Un microprocesador tradicional no le permitirá hacer esto,
ya que espera que todas estas tareas sean manejadas por otros chips. Hay que agregarle los módulos de
entrada y salida (puertos) y la memoria para almacenamiento de información.

Un microcontrolador típico tendrá un generador de reloj integrado y una pequeña cantidad de memoria
de acceso aleatorio y/o ROM/EPROM/EEPROM/flash, con lo que para hacerlo funcionar todo lo que se
necesita son unos pocos programas de control y un cristal de sincronización. Los microcontroladores
disponen generalmente también de una gran variedad de dispositivos de entrada/salida,
como convertidor analógico digital, temporizadores, UARTs y buses de interfaz serie especializados,
como I2C y CAN. Frecuentemente, estos dispositivos integrados pueden ser controlados por instrucciones
de procesadores especializados. Los modernos microcontroladores frecuentemente incluyen un lenguaje
de programación integrado, como el lenguaje de programación BASIC que se utiliza bastante con este
propósito.

Los microcontroladores negocian la velocidad y la flexibilidad para facilitar su uso. Debido a que se utiliza
bastante sitio en el chip para incluir funcionalidad, como los dispositivos de entrada/salida o
la memoria que incluye el microcontrolador, se ha de prescindir de cualquier otra circuitería.
Periféricos

Cuando observamos la organización básica de un microcontrolador, señalamos que dentro de este se


ubican un conjunto de periféricos. A continuación describiremos algunos de los periféricos que con mayor
frecuencia encontraremos en los microcontroladores.

Entradas y salidas de propósito general

También conocidos como puertos de E/S, generalmente agrupadas en puertos de 8 bits de longitud,
permiten leer datos del exterior o escribir en ellos desde el interior del microcontrolador, el destino
habitual es el trabajo con dispositivos simples como relés, LED, o cualquier otra cosa que se le ocurra al
programador.

Algunos puertos de E/S tienen características especiales que le permiten manejar salidas con
determinados requerimientos de corriente, o incorporan mecanismos especiales de interrupción para el
procesador.

Típicamente cualquier pin de E/S puede ser considerada E/S de propósito general, pero como los
microcontroladores no pueden tener infinitos pines, ni siquiera todos los pines que queramos, las E/S de
propósito general comparten los pines con otros periféricos. Para usar un pin con cualquiera de las
características a él asignadas debemos configurarlo mediante los registros destinados a ellos.

Temporizadores y contadores

Son circuitos sincrónicos para el conteo de los pulsos que llegan a su poder para conseguir la entrada de
reloj. Si la fuente de un gran conteo es el oscilador interno del microcontrolador es común que no tengan
un pin asociado, y en este caso trabajan como temporizadores. Por otra parte, cuando la fuente de conteo
es externa, entonces tienen asociado un pin configurado como entrada, este es el modo contador.

Los temporizadores son uno de los periféricos más habituales en los microcontroladores y se utilizan para
muchas tareas, como por ejemplo, la medición de frecuencia, implementación de relojes, para el trabajo
de conjunto con otros periféricos que requieren una base estable de tiempo entre otras funcionalidades.
Es frecuente que un microcontrolador típico incorpore más de un temporizador/contador e incluso
algunos tienen arreglos de contadores. Como veremos más adelante este periférico es un elemento casi
imprescindible y es habitual que tengan asociada alguna interrupción. Los tamaños típicos de los registros
de conteo son 8 y 16 bits, pudiendo encontrar dispositivos que solo tienen temporizadores de un tamaño
o con más frecuencia con ambos tipos de registro de conteo.

Conversor analógico/digital

Como es muy frecuente el trabajo con señales analógicas, éstas deben ser convertidas a digital y por ello
muchos microcontroladores incorporan un conversor analógico-digital, el cual se utiliza para tomar datos
de varias entradas diferentes que se seleccionan mediante un multiplexor.

Las resoluciones más frecuentes son 8 y 10 bits, que son suficientes para aplicaciones sencillas. Para
aplicaciones en control e instrumentación están disponibles resoluciones de 12bit, 16bit y 24bit.6 También
es posible conectar un convertidor externo, en caso de necesidad

Puertos de comunicación

Puerto serie
Este periférico está presente en casi cualquier microcontrolador, normalmente en forma
de UART (Universal Asynchronous Receiver Transmitter) o USART (Universal Synchronous Asynchronous
Receiver Transmitter) dependiendo de si permiten o no el modo sincrónico de comunicación.

El destino común de este periférico es la comunicación con otro microcontrolador o con una PC y en la
mayoría de los casos hay que agregar circuitos externos para completar la interfaz de comunicación. La
forma más común de completar el puerto serie es para comunicarlo con una PC mediante la interfaz EIA-
232 (más conocida como RS-232), es por ello que muchas personas se refieren a la UART o USART como
puerto serie RS-232, pero esto constituye un error, puesto que este periférico se puede utilizar para
interconectar dispositivos mediante otros estándares de comunicación. En aplicaciones industriales se
utiliza preferiblemente RS-485 por sus superior alcance en distancia, velocidad y resistencia al ruido.

SPI

Este tipo de periférico se utiliza para comunicar al microcontrolador con otros microcontroladores o con
periféricos externos conectados a él, por medio de una interfaz muy sencilla. Hay solo un nodo controlador
que permite iniciar cualquier transacción, lo cual es una desventaja en sistemas complejos, pero su
sencillez permite el aislamiento galvánico de forma directa por medio de optoacopladores.

I2C

Cumple las mismas funciones que el SPI, pero requiere menos señales de comunicación y cualquier nodo
puede iniciar una transacción. Es muy utilizado para conectar las tarjetas gráficas de las computadoras
personales con los monitores, para que estos últimos informen de sus prestaciones y permitir la
autoconfiguración del sistema de vídeo.

USB

Los microcontroladores son los que han permitido la existencia de este sistema de comunicación. Es un
sistema que trabaja por polling (monitorización) de un conjunto de periféricos inteligentes por parte de
un amo, que es normalmente un computador personal. Cada modo inteligente está gobernado
inevitablemente por un microcontrolador.

Ethernet

Es el sistema más extendido en el mundo para redes de área local cableadas. Los microcontroladores más
poderosos de 32 bits se usan para implementar periféricos lo suficientemente poderosos como para que
puedan ser accesados directamente por la red. Muchos de los enrutadores caseros de pequeñas empresas
están construidos en base a un microcontrolador que hace del cerebro del sistema.

Can

Este protocolo es del tipo CSMA/CD con tolerancia a elevados voltajes de modo común y orientado al
tiempo real. Este protocolo es el estándar más importante en la industria automotriz (OBD). También se
usa como capa física del "field bus"para el control industrial.

Otros puertos de comunicación

Hay una enorme cantidad de otros buses disponibles para la industria automotriz (linbus) o de medios
audiovisuales como el i2s, IEEE 1394. Es usuario se los encontrará cuando trabaje en algún área
especializada.
Comparadores

Son circuitos analógicos basados en amplificadores operacionales que tienen la característica de comparar
dos señales analógicas y dar como salida los niveles lógicos ‘0’ o ‘1’ en dependencia del resultado de la
comparación. Es un periférico muy útil para detectar cambios en señales de entrada de las que solamente
nos interesa conocer cuando está en un rango determinado de voltaje.

Modulador de ancho de pulsos

Los PWM (Pulse Width Modulator) son periféricos muy útiles sobre todo para el control de motores, sin
embargo hay un grupo de aplicaciones que pueden realizarse con este periférico, dentro de las cuales
podemos citar: inversión DC/AC paraUPS,conversión digital analógica D/A, control regulado de luz
(dimming) entre otras.

Memoria de datos no volátil

Muchos microcontroladores han incorporado estos tipos de memoria como un periférico más, para el
almacenamiento de datos de configuración o de los procesos que se controlan. Esta memoria es
independiente de la memoria de datos tipo RAM o la memoria de programas, en la que se almacena el
código del programa a ejecutar por el procesador del microcontrolador.

Muchos de los microcontroladores PIC incluyen este tipo de memoria, típicamente en forma de
memoria EEPROM, incluso algunos de ellos permiten utilizar parte de la memoria de programas como
memoria de datos no volátil, por lo que el procesador tiene la capacidad de escribir en la memoria de
programas como si ésta fuese un periférico más.

Pantalla LCD 2x16 - HD44780

El manejo de una pantalla LCD útil a la hora de mostrar datos realizados por el microcontrolador o también
para poder interactuar con este de una manera más fácil.

El principio de funcionamiento es el siguiente:


-Se envía los datos por un puerto hacia la pantalla LCD.
- Luego se controlan estos datos mediante E, RS, RW de nuestra pantalla LCD.

Esta pantalla LCD permite una interfase de 4 o 8 bits, la diferencia entre ambos es la velocidad de
transmisión ya que para una interfase de 4 bits se tiene que primero enviar el nible alto del byte y luego
el nible bajo.

Hay que mencionar que los caracteres que se envían deben estar en código ASCII.

DESARROLLO
La entrada de voltaje del microcontrolador deberá de ser suministrada con un regulador 7805 para evitar
algún daño posible
Mostrar Carácter

I. Mostrar en LCD "HOLA MUNDO"


1.- Realizar el siguiente ejercicio en el Mikrobasic en un proyecto nuevo y en una carpeta exclusiva para
este ejercicio, el cual consta de mostrar en una pantalla de cristal liquido la frase Hola mundo y deberá
parpadear cada 500 milisegundos.
2.- Compile el programa y verifique si existe algún error
3.- Realice el siguiente montaje en Proteus del circuito antes programado.

4.- Correr la simulación y observar que sea correcta.


5.- En la misma carpeta donde se guardo el programa guardar la simulación.
6.- Grabe el programa dentro del microcontrolador
7.- Realice ahora el circuito en protoboard y verifique su funcionamiento.
II. Mostrar "Nombre y Apellido"
Realice un programa con el cual pueda visualizar en la pantalla LCD de 2 x 16 en la parte superior
su nombre completo y su apellido, se mantenga este dato 500 milisegundos, se limpie la pantalla y
muestre su domicilio en la primer fila y su número telefónico en la segunda, dure 500 mili segundos
y se reinicie.

3.-Correr la simulación y observar que sea correcta.


4.- En la misma carpeta donde se guardo el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
6.- Realice ahora el circuito en protoboard y verifique su funcionamiento.
Microcontroladores
III. Selector de Mensajes.
Realice un programa que al apretar un boton muestre un mensaje en las 2 filas y al no encontrarse
apretado muestre otro mensaje en las 2 filas.
2. Realice el siguiente montaje en Proteus del circuito antes programado

3.-Correr la simulación y observar que sea correcta.


4.- En la misma carpeta donde se guardó el programa guardar la simulación.
5.- Grabe el programa dentro del microcontrolador
5.- Realice ahora el circuito en protoboard y verifique su funcionamiento.
Discusión
Al inicio de esta práctica se me complico realizar el primer código, después de analizarlo logre
observar que tenía una mala conexión. Al lograr corregir este programa, los demás programas se
me hicieron más sencillos y logre realizarlos sin ningún problema.

Resultados
Al terminar esta práctica se lograron cumplir satisfactoriamente los objetivos propuestos al inicio
del documento, además de que pude aprender cosas nuevas que antes desconocía y reforcé mis
conocimientos sobre programación en el software MikroBasic

Conclusión
Las pantallas LCD son muy útiles para mostrar de una manera más fácil letras, números o diferentes
caracteres. En un display normal sería muy tardado realizar todas las conexiones para poder
visualizar caracteres, que se pueden visualizar fácilmente en un lcd.

En esta práctica utilizamos un lcd muy común que es el lcd 2x16, pero en el mercado existen
muchísimos más modelos, en los cuales podemos realizar textos más extensos o más complejos.

Esta práctica me sirvió mucho ya que con ella pude realizar mi proyecto final de una manera más
sencilla, evitando el uso de display de siete segmentos, y de esta manera todas las conexiones
fueron más sencillas.

BIBLIOGRAFIA
Programming and Customizing the Basic Stamp
Scott Edwards
McGraw Hill Professional

Programming the PIC Microcontroller with MBASIC


By Jack R. Smith

PIC Programming for the Impatient: The MikroBasic Edition


Robodyssey Systems, 2005 - BASIC (Computer program language)

Microcontroladores PIC: sistema integrado para el autoaprendizaje


By Enrique Mandado Pérez

Mikro-Basic, Amstrad CP6128: método autodidacta


Centro de Estudios Informáticos Mikros, 1986

Microcontroladores: fundamentos y aplicaciones con PIC


By Fernando E. Valdés Pérez, Ramón Pallàs Areny
Practica 6

Resumen

En todos lados encontré el famoso circuito del Puente H para invertir la polaridad en los bornes del
motor y lograr el cambio de dirección de giro en un motor de CC.

Este puente se puede implementar de muchas maneras diferentes, puede ser con transistores o
inclusive con integrados que traen ya la implementación de dos puentes inversores como el L293.

La otra posibilidad consiste en utilizar un relé doble inversor por cada rueda, usando 2 puertos de
la placa de control por cada una.

El esquema interno del relé doble inversor es algo así:

El relé tiene por defecto dos contactos cerrados y dos abiertos. Entonces, con un puerto de la placa
de control manejamos la tensión del motor, encendiendo o apagando.

Con el otro puerto manejamos el sentido de giro al energizar la bobina del relé.
Marco teórico
Vamos a explicar como conectar un teclado matricial tipo membrana a un
microcontrolador PIC mediante un sencillo ejemplo. El método que proponemos permite
conectar a nuestro microcontrolador 16 teclas usando solamente 8 pines. El código debería
ser válido para cualquier microcontrolador, incluso de otras marcas, aunque siempre habrá
que revisarlo y posiblemente realizar algunas adaptaciones si se migra a otra plataforma, sin
embargo, el algoritmo permanece igual con cualquier microcontrolador.
El ejemplo se realizó para un PIC16F88, aunque como ya hemos mencionado, es compatible
básicamente con cualquier microcontrolador PIC. Debido a que el programa utiliza todos los
bits del puerto B en nuestro microcontrolador, pensamos que tal vez sea buena idea utilizar
un PIC con buena cantidad de pines como unPIC16F877 o un PIC18F4550, por mencionar un
par de ejemplos de micros populares. Para este ejemplo, utilizamos XC8 y MPLAB X como
entorno de desarrollo.
En nuestra portada mostramos el equipo que hemos utilizado para probar el teclado
matricial, incluido el PIC16F88 en una tarjeta entrenadora y el PICKit 3 como
programador/depurador.

¿Como funciona un teclado matricial?


El principio de funcionamiento es sencillo y es similar a lo que haríamos para multiplexar leds
o dipslays de 7 segmentos. El programa configura el puerto B del PIC de la siguiente
forma: RB4 a RB7 funcionan como salidas y la otra mitad (RB0-RB3) como entradas. Las
filas (horizontal) del teclado matricial se conectan a los bits más significativos que funcionan
como salidas, mientras que las columnas (vertical) se conectan a los bits menos significativos
del puerto que funcionan como entradas con resistencias pull-down. Cualquier tecla que se
oprima en una columna causará que uno de los bits menos significativos del puerto
(RB0 – RB3) cambie de un estado lógico bajo a un estado alto.
La siguiente imágen muestra las conexiones del teclado al puerto B del microcontrolador. La
imagen muestra el teclado en reposo (sin teclas oprimidas).
¿Que pasa cuando se oprime una tecla en un teclado matricial?… la corriente puede fluir
a través del switch y el voltaje de los pines conectados a las filas del teclado (5 V o nivel alto)
aparece ahora también en alguno de los pines RB0 a RB3 según la columna en la que se
encuentra la tecla oprimida. La siguiente imagen ilustra lo que sucede al oprimir una tecla: al
oprimir el botón 6 provocamos un cambio en el PIN RB2 que ahora recibe un 1 o estado alto.
Sabemos entonces que se ha pulsado un botón en la segunda columna y se muestra como un
nivel lógico alto aparece en los bits menos significativos del puerto B, especificamente en RB2.
De esta manera el microcontrolador sabe que se ha oprimido una tecla al detectar un
cambio de nivel en los bits menos significativos. Hasta el momento, se sabe que se ha
oprimido una tecla en alguna columna (dependiendo del bit activo RB3 a RB0), sin embargo,
no sabemos en cual fila. Para resolver en que fila se oprimió una tecla, hay que realizar
un proceso de escaneo del teclado. En este proceso, colocaremos en secuencia un 1 lógico
(estado alto) en los 4 bits más significativos del puerto y leeremos el estado de los 4 bits
menos significativos. Sigamos con el ejemplo en el que se ha oprimido la tecla 6 pero ahora
viéndolo gráficamente en una animación:
El microcontrolador escanea en forma sucesiva los pines de salida, mientras lee las entradas
en la parte baja del puerto, de manera que puede detectar que teclas están oprimidas en cada
fila. Ahora solo falta escribir nuestro codigo en C que implemente los procedimientos
mencionados anteriormente y nos devuelva un valor de la tecla oprimida, por ejemplo,
mediante un número binario.

Programa en C para teclado matricial


El programa es bastante sencillo e implementa todos los procesos que describimos en la
teoría vista anteriormente. El código se ha mantenido simple intencionalmente para que se
pueda apreciar el funcionamiento de la manera más obvia posible. La
función keypad_read() es la encargada de realizar la mayor parte de las tareas para
determinar que tecla ha sido pulsada. El valor que retorna es una palabra de 16 bits en la cual,
cada uno de los bits representa una tecla, en donde un bit en estado alto representa una tecla
oprimida. Como la función no retorna como tal la tecla pulsada, sino una cadena de bits que
representan las teclas, es posible detectar cuando se presiona más de una tecla de forma
simultanea. El código de esta función es el siguiente:

1 /**

2 * Procesa las entradas del teclado matricial y determina la tecla que esta

3 * siendo oprimida. Retorna una palabra binaria de 16 bits en la cual los bits

4 * que se encuentran en estado alto representan teclas oprimidas.

5 *

6 * Esta función esta diseñada para poder detectar cuando se oprimen varias

7 * teclas sin embargo, debido a limitantes de la forma de conexión del teclado

8 * matricial, no se deben esperar resultados correctos al oprimir varias teclas

9 *

10 * @return Retorna una palabra de 16 bits, cada bit representa una tecla.

11 */

12 uint16_t keypad_read()

13 {

14 unsigned char count = 0;

15 unsigned char bitmask = 0x10;

16

17 // Valor de retorno de la funcion keypad_read() entero de 16 bits

18 uint16_t keys =0;

19

20 // Revisamos si alguna de las lineas en la parte baja esta en estado alto

21 // debido a que se ha cerrado un switch en el teclado.

22 if( PORTB & 0x0F )


23 {

24 // Escaneamos las filas una por una para determinar la tecla oprimida

25 do

26 {

27 // Apagamos todas las filas (parte alta)

28 PORTB &= 0x0F;

29 // Seleccionamos solo una como salida (bit del registro tris = 0)

30 TRISB &= ~bitmask;

31 // Y colocamos el pin en estado alto

32 PORTB |= bitmask;

33 // Esperamos unos cuantos milisegundos y leemos las columnas

34 delay_ms(100);

35 // Guardamos las columnas en una variable de 16 bits

36 keys |= (PORTB & 0x0F);

37 // Si ya hemos leido 4 columnas, las siguientes instrucciones no son

38 // necesarias, por lo que salimos del ciclo

39 if( count == 3 )

40 break;

41 // Recorremos la lectura a la izquierda para hacer espacio

42 keys = keys<<4;

43 // Recorremos el bitmask de la fila a leer

44 bitmask = bitmask<<1;

45 // Incrementar el contador de filas

46 count ++;

47 } while(1);

48

49 // Mantenemos parte alta = salidas y parte baja = entradas

50 TRISB = 0x0F;

51 // Mantenemos los bits mas significativos del puerto en estado alto

52 PORTB = 0xF0;

53 return keys;

54 }
55 return 0;

56 }

Detalles de la implementación
En nuestra implementación del hardware, todos los pines tienen conectada una resistencia
“pull-down”, por lo que se mantienen en estado bajo (0) cuandoel teclado esta en reposo.
Cuando se presiona un botón, el estado del pin cambia a estado alto (1). Esto puede hacerse
de manera inversa, utilizando las resistencias “pull-up” incluidas internamente en el puerto B
de muchos PIC que están diseñadas para este tipo de aplicaciones. En nuestro caso, la
tarjeta que utilizamos tiene resistencias pull-down previamente conectadas en los
pines, por lo que decidimos aprovecharlas.
Es un buen ejercicio invertir la lógica del código para permitir que este funcione con
resistencias “pull-up”, por lo que te recomendamos que realices al menos este ejercicio.

Objetivos:
 Programar el microcontrolador para activar entradas hacia las salidas del microcontrolador.
 Identificar e implementar el uso del microcontrolador.

Materiales:

 18F4550
 7805
 8 Led
 3 R220Ω o R330Ω
 1 R10KΩ
 1 Cristal 20MHZ
 2 Capacitores Cerámicos 22pF
 Protoboard
Desarrollo

Ejercicio 1
Ejercicio 2

program tcdmtl2

'Perez Rodriguez Alejandro

dim kp, curX, curY as byte

dim keypadPORT as byte at portb

dim lcd_rs as sbit at rd4_bit

lcd_en as sbit at rd5_bit

lcd_d4 as sbit at rd0_bit

lcd_d5 as sbit at rd1_bit

lcd_d6 as sbit at rd2_bit

lcd_d7 as sbit at rd3_bit

lcd_rs_direction as sbit at trisd4_bit

lcd_en_direction as sbit at trisd5_bit

lcd_d4_direction as sbit at trisd0_bit


lcd_d5_direction as sbit at trisd1_bit

lcd_d6_direction as sbit at trisd2_bit

lcd_d7_direction as sbit at trisd3_bit

dim m as kp= [3]

case 3 kp= [3]

case 4 kp= [4]

case 6 kp= [6]

case 7 kp= [5]

case 8 kp= [4]

case 10 kp= [5]

case 11 kp= [4]

case 12 kp= [5]

case 14 kp= [8]

case 15 kp= [4]

case 16 kp= [4]

main:

curX= 1

curY= 1

adcon0.adon= 0

adcon1= 0x07

trisd= 0

portd= 0xFF

keypad_init() 'inicia el teclado en el puerto PORTC

lcd_init() 'iniciar el lcd en el puerto PORTB

lcd_cmd(_lcd_clear) 'borrar el visualizador

while true 'esperar que se presione una tecla

kp= 0

while kp= 0

kp= keypad_key_click ()
delay_ms (10)

select case kp

case 2 kp= "uno"

case 3 kp= "dos"

case 4 kp= "tres"

case 6 kp= "cuatro"

case 7 kp= "cinco"

case 8 kp= "seis"

case 10 kp= "siete"

case 11 kp= "ocho"

case 12 kp= "nueve"

case 14 kp= "estrella"

case 15 kp= "cero"

case 16 kp= "gato"

end select

if (curY > 12) then

if (curX > 1) then

lcd_cmd(_lcd_second_row)

curX= 2

curY= 1

else

lcd_cmd (_lcd_first_row)

curX= 2

curY= 1

end if

end if

lcd_chr_cp (kp)

inc (curY)

delay_ms (1000)
lcd_cmd(_lcd_clear)

wend

end.

LCD1
LM016L

U1

VDD
VSS

VEE

RW
2 15

RS

D0
D1
D2
D3
D4
D5
D6
D7
RA0/AN0 RC0/T1OSO/T1CKI

E
3 16
RA1/AN1 RC1/T1OSI/CCP2/UOE
4 17
RA2/AN2/VREF-/CVREF RC2/CCP1/P1A

1
2
3

4
5
6

7
8
9
10
11
12
13
14
5 23
RA3/AN3/VREF+ RC4/D-/VM
6 24
RA4/T0CKI/C1OUT/RCV RC5/D+/VP
7 25
RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK
X1 14 26 R2
RA6/OSC2/CLKO RC7/RX/DT/SDO
13
OSC1/CLKI
5k
33 19
RB0/AN12/INT0/FLT0/SDI/SDA RD0/SPP0
34 20
CRYSTAL RB1/AN10/INT1/SCK/SCL RD1/SPP1
35 21
RB2/AN8/INT2/VMO RD2/SPP2
36 22
RB3/AN9/CCP2/VPO RD3/SPP3
37 27
RB4/AN11/KBI0/CSSPP RD4/SPP4
38 28
RB5/KBI1/PGM RD5/SPP5/P1B
39 29
RB6/KBI2/PGC RD6/SPP6/P1C
C1 C2 40
RB7/KBI3/PGD RD7/SPP7/P1D
30
22pF 22pF
8
RE0/AN5/CK1SPP
9
RE1/AN6/CK2SPP
10 R1
RE2/AN7/OESPP
18 1
VUSB RE3/MCLR/VPP
10k
PIC18F4550
1

A 1 2 3
B 4 5 6
C 7 8 9
D 0 #

Resultados:
Los resultados que se obtuvieron a lo largo de las prácticas resultaron ser
muy venefactifles en los cuales pudimos observar que al ir realizando cada
uno de los ejercicios que se encuentran en este documento nos fueron
sirviendo de guía para de esta forma lograr realizar unos ejercicios por
nosotros mismos.

Discusión:
En esta práctica se trabajó con lo que se conoce como secuencias de luces
con el micro controlador y fue la practica en la que se conoció la instrucción
de porta=%00000000 que dependiendo de la posición del 0 si se cambia por
un uno el puerto en este caso “A” será activado y por lo tanto el led que vaya
conectado a este puerto será encendido a menos que esté usando una
configuración de cátodo común en ese caso el led prendera cuando los
puertos estén en estado bajo es decir en 0, se empezó encendiendo un led en
el puerto B con un push botton después se encendieron 3 leds y a
continuación se iniciaron las secuencias en un principio y para que quedara
claro se hizo que todo el puerto d cambiara de alto a bajo en un determinado
tiempo para que los leds que estuvieran conectados a este puerto prendieran
y apagaran consecutivamente y automáticamente ya que en el cuarto
ejercicio se introdujo un código en el programa para que los leds hicieran la
misma acción pero sin embargo en este caso ya harían si secuencia 5 veces si
el push botton fuera presionado.

Conclusión

Con la información que tenemos hasta este momento, ya podemos darnos una
idea de como funciona un teclado matricial y podemos comenzar a incluirlo en
nuestros proyectos. Nos queda de tarea estudiar más a fondo el
funcionamiento del puerto B de los PIC, que incluye varias funciones
opcionales como resistencias pull-up internas e interrupción por cambio de
estado en los pines, ideales para facilitar la conexión de teclados matriciales.

Bibliografía

http://www.geekfactory.mx/tutoriales/tutoriales-pic/teclado-matricial-con-pic/

https://www.google.com.mx/search?q=teclado+matricial&biw=1366&bih=643&tbm=isch&tbo=u
&source=univ&sa=X&sqi=2&ved=0CBsQsARqFQoTCLTXi9Oto8cCFUM8PgodBCEOQg&dpr=1

http://www.circuitoselectronicos.org/2011/03/teclado-matricial-4x4.html

Você também pode gostar