restaurante-pic+c#
TRANSCRIPT
UNIVERSIDAD POLITÉCNICA SALESIANA
SE DE GUA Y AQ UIL
FA C U LT A D DE IN GE NI ER ÍA S
C A R RE R A: I N GE NI ER ÍA EL ECTR Ó NI C A
Pr o y e c t o f in a l p rev ia a l a ob te nc ión d e l T í tu lo d e:
INGENIERO EN ELECTRÓNICA
TEMA:
SISTEMA DE TOMA DE PEDIDOS EN RESTAURANTES CONTROLADO
POR PIC
AUTORES:
R on a ld A l f r ed o Día z Peñ af i e l
R i ca rd o Al f r ed o M o r a Bo c ca
Lu i s D av id R ey e s Za mb r an o
DIRECTOR:
I ng . Lu i s C ó rdo va R iv ad en e i ra
Gu ay aqu i l , 3 0 d e J un i o d e l 2 00 7
A U T O R Í A
Las ideas y contenidos expuestos en el presente proyecto, son de exclusiva
responsabilidad de los autores, y el patrimonio intelectual le pertenece a la
Universidad Politécnica Salesiana.
f.......................................................
Ronald Alfredo Díaz Peñafiel
f.......................................................
Ricardo Alfredo Mora Bocca
f.......................................................
Luis David Reyes Zambrano
Guayaquil, 30 de Junio del 2007
C E R T I F I C O :
Haber revisado el Proyecto Final de Titulación, De los Sres. Ronald Alfredo Díaz
Peñafiel, Ricardo Alfredo Mora Bocca y Luis David Reyes Zambrano, que se ajusta
a las normas establecidas por la Universidad Politécnica Salesiana Sede Guayaquil,
por tanto, autorizo su presentación para los fines legales pertinentes.
………………………………….
Ing. Luís Córdova Rivadeneira
DIRECTOR DEL PROYECTO
Guayaquil, 30 de Junio del 2007
ACTA DE CESIÓN DE DERECHOS DEL PROYECTO FINAL Conste por el presente documento la cesión de los derechos del Proyecto Final de Titulación, de conformidad con las siguientes cláusulas:
PRIMERA.- El Ing. Luís Córdova R. por sus propios derechos, en calidad de Director de Proyecto Final, Ronald Alfredo Díaz Peñafiel, Ricardo Alfredo Mora Bocca y Luis David Reyes Zambrano., por sus propios derechos, en calidad de autores de Proyecto Final.
SEGUNDA.- UNO.- Los Sres. Ronald Alfredo Díaz Peñafiel, Ricardo Alfredo Mora Bocca y Luis David Reyes Zambrano., realizaron El Proyecto Final titulado “Sistema de toma de pedidos en restaurantes controlado por pic”, para optar por los Títulos de Ingenieros en Electrónica, especialidades en Sistemas Computacionales y Sistemas Industriales en la Universidad Politécnica Salesiana Sede Guayaquil. DOS.- Es política de la Universidad que el Proyecto Final se aplique y materialice en beneficio de la comunidad. TERCERA.- Los comparecientes Ing. Luis Córdova R., en calidad de Director de Proyecto Final, los Sres. Ronald Alfredo Díaz Peñafiel, Ricardo Alfredo Mora Bocca y Luis David Reyes Zambrano., como autores, por medio del presente instrumento, tiene a bien ceder en forma gratuita sus derechos en el Proyecto Final titulado “Sistema de toma de pedidos en restaurantes controlado por pic”, a favor de la Universidad Politécnica Salesiana y, conceden autorización para que la Universidad pueda utilizar el proyecto en su beneficio y/o de la comunidad, sin reserva alguna. CUARTA.- Aceptación.- Las partes declaran que aceptan expresamente todo lo estipulado en la presente cesión de derecho. Para constancia suscriben la presente cesión de derechos, en la ciudad de Guayaquil, a los treinta días de mes de Junio del año dos mil siete.
---------------------------------------- Ing. Luís Córdova Rivadeneira
DIRECTOR DE PROYECTO FINAL
---------------------------------------- ---------------------------------------
Ronald Alfredo Díaz Peñafiel Ricardo Alfredo Mora Bocca AUTOR AUTOR
-------------------------------------- Luis David Reyes Zambrano
AUTOR
D E D I C A T O R I A
Este trabajo está dedicado con mucho cariño a mis
padres, los cuales siempre me han apoyado a lo largo de
mi vida dándome la oportunidad de superarme no sólo a
nivel personal sino también profesional, a mi hermano,
que siempre me a brindado su apoyo moral, a aquellas
personas importantes (amigos, compañeros y conocidos),
que me han apoyado en su momento y principalmente a
Dios que me a dado la sabiduría y la fuerza necesaria
para poder culminar este importante proyecto.
Ronald
D E D I C A T O R I A
Dedico este trabajo a mi Madre Martha, a mi Padre
Alfredo y a mi Hermano David, quiénes siempre me
han apoyado en el transcurso de mi vida.
Ricardo
D E D I C A T O R I A
Dedico este trabajo a mi Madre y a mi Padre, quienes con
su amor, ayuda y ejemplo, supieron guiarme durante mi
formación humana y profesional; a mi hermano por
brindarme su apoyo; a mis amigos quienes tuve la suerte
y dicha de conocer; y a todos de quienes en su momento
pude aprender algo nuevo, ayudándome a crecer como
persona.
Luis David
A G R A D E C I M I E N T O
A la Universidad Politécnica Salesiana sede Guayaquil,
que nos permitió formarnos como profesionales, crecer
como personas, y obtener un Título Académico. De
manera muy especial al Ingeniero Luis Córdova y al
Ms. Javier Ortiz R., por su total y desinteresada
colaboración en el transcurso de este trabajo. Además
nuestra gratitud sincera para aquellas personas que de
una u otra manera ayudaron en el desarrollo del
presente trabajo.
Ronald Alfredo Díaz P.
Ricardo Alfredo Mora B.
Luis David Reyes Z.
CONTENIDO
PORTADA
AUTORÍA
CERTIFICACIÓN
ACTA DE SESIÓN DE DERECHOS
DEDICATORIA
AGRADECIMIENTO
ÍNDICE GENERAL
ÍNDICE DE TABLAS
ÍNDICE DE FIGURAS
INTRODUCCIÓN
RESÚMEN
OBJETIVOS
JUSTIFICACIÓN
1) MICROCONTROLADORES
2) COMUNICACIÓN SERIAL
3) MONTAJE Y PROGRAMACIÓN
4) ANÁLISIS DE COSTOS
CONCLUSIONES Y RECOMENDACIONES
ANÉXOS
ÍNDICE
AUTORÍA……………………………………………………………………… II
CERTIFICO…………………………………………………………………… III
ACTA DE SESIÓN DE DERECHOS DEL PROYECTO FINAL……………. IV
DEDICATORIA……………………………………………………………….. V
AGRADECIMIENTO…………………………………………………………. VIII
CONTENIDO………………………………………………………………….. IX
INTRODUCCIÓN……………………………………………………………... XV
RESUMEN…………………………………………………………………….. XVI
OBJETIVOS…………………………………………………………………... XVIII
JUSTIFICACIÓN……………………………………………………………… XIX
CAPÍTULO I - MICROCONTROLADORES…………………………………. 1
1.1 Introducción a los Microcontroladores…………………………………….. 1
1.2 Controlador y Microcontrolador…………………………………………… 1
1.3 Aplicaciones de los microcontroladores…………………………………… 3
1.4 El Mercado de los Microcontroladores…………………………………….. 3
1.5 ¿Qué Microcontrolador emplear? ………………………………………….. 4
1.5.1 Aplicación………………………………………………………………… 5
1.6. Recursos comunes en todos los Microcontroladores………………………. 6
1.7. Arquitectura Básica de los Microcontroladores …………………………… 7
1.8. El Procesador o CPU………………………………………………………. 8
1.9. Memoria……………………………………………………………………. 8
1.9.1. ROM……………………………………………………………… 9
1.9.2. OTP………………………………………………………………. 9
1.9.3. EPROM…………………………………………………………… 9
1.9.4. EEPROM…………………………………………………………. 9
1.9.5. Flash………………………………………………………………. 10
1.10. Puertas de Entrada y Salida………………………………………………... 11
1.11. Reloj Principal…………………………………………………………….. 11
1.12. Recursos Especiales……………………………………………………….. 11
1.12.1. Temporizadores o “Timers”……………………………………… 12
1.12.2. Perro Guardián o “Watchdog”…………………………………… 13
1.12.3. Protección ante fallo de alimentación o “Brownout”.…………… 13
1.12.4. Estado de reposo o de bajo consumo…………………………….. 13
1.12.5. Convertidor A/D (CAD)…………………………………………. 14
1.12.6 Convertidor D/A (CDA)………………………………………….. 14
1.12.7. Comparador analógico…………………………………………… 14
1.12.8. Modulador de anchura de impulsos o PWM……………………... 14
1.12.9. Puertos de E/S digitales…………………………………………... 15
1.12.10. Puertos de comunicación……………………………………….. 15
1.13. Herramientas para el desarrollo de aplicaciones…………………………… 15
1.13.1. Ensamblador……………………………………………………… 16
1.13.2. Compilador………………………………………………………. 16
1.13.3. Depuración……………………………………………………….. 17
1.13.4. Simulación………………………………………………………... 17
1.13.5. Placas de evaluación……………………………………………… 17
1.13.6. Emuladores en circuito…………………………………………… 18
CAPÍTULO II – COMUNICACIÓN SERIAL…………………………………... 19
2.1 Conceptos básicos de comunicación serial…………………………………… 19
2.1.1. Velocidad de transmisión………………………………………….. 20
2.1.2. Bits de Datos………………………………………………………. 20
2.1.3 Bits de Parada……………………………………………………… 21
2.1.4 Paridad……………………………………………………………... 21
2.2. Comunicación Serial Asíncrona RS232…………………………………….. 22
2.2.1. Características Principales del RS232…………………………….. 23
2.2.2. Limitaciones de la RS232…………………………………………. 26
2.3. Comunicación Serial I²C……………………………………………………. 27
2.3.1. Características Principales del I²C………………………………… 27
2.3.2. Jerarquía Maestro-Esclavo………………………………………… 29
2.3.3. Dispositivos Múltiples…………………………………………….. 29
2.3.4. Soporte Multi-Maestro…………………………………………….. 29
2.3.5. Velocidad………………………………………………………….. 33
2.3.6. Direccionamiento del Dispositivo I²C……………………………... 33
CAPÍTULO III – MONTAJE……………………………………………………. 35
3.1. Montaje……………………………………………………………………… 35
3.1.1. Módulo Maestro…………………………………………………… 35
3.1.2. Modulo Esclavo…………………………………………………… 38
3.2. Programación en ASM……………………………………………………… 45
3.3. Programación en C#........................................................................................ 61
3.3.1. Pantalla Principal (Formulario Principal)…………………………. 61
3.3.1.1. Programación del Formulario Principal…………………. 62
3.3.2. Pantalla de Ayuda (Formulario Acerca de...)……………………... 64
3.3.3. Pantalla de Menú (Formulario Ingreso de Menú)………………… 64
3.3.3.1. Programación del Formulario Ingreso de Menú………… 65
3.3.4. Pantalla de Combos (Formulario Ingreso de Combos)…………… 68
3.3.4.1. Programación del Formulario Ingreso de Combo………. 69
CAPÍTULO IV – ANÁLISIS DE COSTOS…………………………………….. 72
4.1. Preliminares…………………………………………………………………. 72
4.2. Determinación del Costo del Proyecto……………………………………… 72
4.2.1. Cálculo de Costo de Mano de Obra……………………………….. 72
4.2.2. Cálculo de Costo de elementos y materiales………………………. 73
4.2.3. Cálculo de Costo de fabricación de tarjetas……………………….. 74
4.2.4. Costo final del proyecto……………………………………………. 74
CONCLUSIONES Y RECOMENDACIONES………………………………….. 76
Conclusiones……………………………………………………………………… 76
Recomendaciones…………………………………………………………………. 77
ANEXOS………………………………………………………………………… 78
A) PIC16F870/871…………………………………………………………... 78
B) MAX 232………………………………………………………………… 82
C) MPLAB…………………………………………………………………... 86
D) LENGUAJE ENSAMBLADOR…………………………………………. 89
E) SIGLAS…………………………………………………………………... 92
F) Bibliografía y Direcciones Electrónicas………………………………….. 96
ÍNDICE DE TABLAS
Tabla 2.1. Distribución de los pines del conector DB9………………………….. 23
Tabla 2.2. Distribución de pines conector DB-25……………………………….. 24
Tabla 2.3 Valores convencionales de voltaje para los niveles lógicos…………… 25
Tabla 5.1 Costo de mano de obra………………………………………………… 72
Tabla 5.2.a. Costo de materiales (módulo maestro)……………………………… 73
Tabla 5.2.b. Costo de materiales (módulo esclavo)……………………………… 73
Tabla 5.3. Costo por fabricación de tarjetas……………………………………... 74
ÍNDICE DE FIGURAS
Figura 1.1. Microcontroladores………………………………………………….. 1
Figura 1.2. Arquitectura Harvard……………………………………………….... 7
Figura 2.1 Conectores DB9 macho y hembra……………………………………. 19
Figura 2.2. Diagrama de tiempo para comunicación serial……………………… 22
Figura 2.3. Diagrama de conexión mínima para comunicación serial…………… 22
Figura 2.4. Ubicación de pines en conectores DB-25 y DB-9………………….. 25
Figura 2.5. Interface paralela…………………………………………………….. 27
Figura 2.6. Interface I²C…………………………………………………………. 28
Figura 2.7. Conexión de un maestro con varios esclavos……………………….. 29
Figura 2.8. Soporte multi-maestro……………………………………………….. 30
Figura 2.9. Diagrama de pulsos del proceso de comunicación maestro-esclavo… 31
Figura 2.10. Comparación de SDA y SCL en el tiempo…………………………. 32
Figura 2.11. Conexión de las resistencias de Pull-up…………………………….. 32
Figura 2.12. Forma de transmisión de los datos SDA……………………………. 33
Figura 2.13. Orden de los bits de dirección del SDA…………………………….. 34
Figura 3.1 Esquema general del proyecto………………………………………… 35
Figura 3.2. Esquema general módulo…………………………………………….. 35
Figura 3.3. Esquema de conexión del PIC para módulo Maestro………………... 36
Figura 3.4.a. Vista frontal módulo maestro………………………………………. 37
Figura 3.4.b. Vista trasera del módulo maestro…………………………………... 37
Figura 3.5 Esquema general modulo esclavo…………………………………….. 38
Figura 3.6. Esquema de conexión del PIC para módulo Esclavo………………… 39
Figura 3.7. Tarjeta individual pulsante-display (vista frontal)…………………… 39
Figura 3.8. Tarjeta individual pulsante-display (vista posterior)………………… 40
Figura 3.9. Diagrama de conexión de las tarjetas pulsante-display……………… 40
Figura 3.10. Vista superior de las placas………………………………………… 41
Figura 3.11. Vista del panel frontal del módulo…………………………………. 41
Figura 3.12. Mensaje en LCD para confirmar el pedido………………………… 42
Figura 3.13. Mensaje en LCD para indicar que la orden fué enviada…………… 42
Figura 3.14. Vista en 3-D del módulo…………………………………………… 43
Figura 3.15. Vista en 3-D de los módulos en montados en las mesas (1)……….. 43
Figura 3.16. Vista en 3-D de los módulos en montados en las mesas (2)……….. 44
Figura 3.5. Propiedades del formulario principal………………………………… 61
Figura 3.6. Formulario principal…………………………………………………. 62
Figura 3.7. Formulario Acerca de………………………………………………… 64
Figura 3.8. Formulario Ingreso de Menú…………………………………………. 64
Figura 3.9. Formulario Ingreso de Combo y asignación…………………………. 69
Figura 3.10. Visualización de Orden……………………………………………... 69
RESUMEN
El desarrollo de nuestro proyecto final esta enfocado en plantear de una forma
innovadora y tecnológica un sistema de pedido de ordenes en restaurantes, con el fin
de mejorar el servicio que se ofrece al cliente, la idea principal es la de simplificar y
optimizar este servicio implementando módulos interactivos en cada una de las
mesas para poder permitir que el cliente pueda realizar su propia orden sin la
necesidad de la intervención de un mesero, el módulo esta desarrollado con el fin de
que el cliente pueda manipularlo de una forma rápida e intuitiva.
Para la implementación de este proyecto nos basamos en el lenguaje ensamblador o
también conocido como lenguaje de máquina el cual nos sirve para poder manejar
los microcontroladores, el lenguaje de programación Visual C# 2005 de Microsoft
para el desarrollo del software de control que se encuentra en el ordenador,
utilizamos también base de datos en SQL Server 2005 para respaldar la información
y poder gestionarla posteriormente de una forma óptima.
Desarrollamos dos módulos interactivos (touch panel) que constan cada uno de un
circuito hecho a base del PIC 16f871 y un LCD para la visualización, además de
contar con interfaces de comunicación serial RS232 e I2C. La programación de los
PICs consta básicamente de los siguientes puntos:
• Programa para el procesamiento de señales.
• Programa para configuración maestro-esclavo e interfaces RS232 e I2C.
• Programa para visualización del LCD.
El proyecto cuenta con los siguientes módulos:
• Los módulos esclavos se encuentran ubicados en cada una de las mesas y son
los encargados de permitir tomar los pedidos de las mismas, cada módulo
está conformado por dos PIC 16f871 (esclavo primario y esclavo secundario),
mientras que el primer PIC (esclavo primario) se encarga de comunicarse con
el maestro por medio del Bus I2C, el segundo PIC (esclavo secundario) sólo
realiza la multiplexión entre los displays de siete segmentos que se
encuentran en el Módulo (Touch Panel); éstos PICs esclavos de comunican
por medio de la interfaz de comunicación RS232.
• El módulo maestro se comunica con los esclavos por medio del Bus I2C y a
su vez con la computadora enviando los datos por medio de la interfaz de
comunicación RS232 (puerto serial).
El proceso principal de comunicación se realiza entre el PIC maestro y los esclavos
(esclavos principales), el PIC maestro es el único que dispone de una señal de reloj y
solicita de forma constante información a los esclavos acerca de su estado, los
esclavos, responden de acuerdo a la actividad que en ese momento tengan. A su vez
el maestro también puede enviar información a los esclavos con el fin de que estos
ejecuten algún tipo de proceso.
El ordenador interactúa directamente con el PIC maestro el cual le envía la
información para que éste la procese por medio de un software desarrollado en
Visual C# 2005 y a su vez esta misma información se guarda en una base de datos
desarrollada en SQL Server 2005 para poder realizar una posterior gestión. El
programa desarrollado en Visual C# 2005 muestra tanto la información de la orden
del cliente como la mesa de donde proviene dicha orden, el mismo programa envía la
información adecuada para que el cliente tenga la constancia de que su pedido está
en proceso.
- 1 -
INTRODUCCIÓN
¿En cuántos restaurantes de los que frecuentemente visitamos nos hemos podido
percatar que disponen de por lo menos una computadora, o un servicio automatizado
de pedidos? Seguramente la respuesta seria pocos o ninguno dado que la gran
mayoría todavía siguen basándose en pedidos hechos por medio de papel y lápiz.
Cuando un mesero se acerca a tomar nota de nuestro pedido, generalmente escribe
nuestra orden en papel y es muy común que esta orden sea mal entendida causando
confusión en el momento de realizar el despacho. En locales donde las órdenes se
ingresan en una computadora, el paso de la información del papel a la máquina
provoca una pérdida de tiempo, ocasionando problemas. La idea principal de nuestro
proyecto se basa en que la captura de la orden que se realiza sea desde la misma
mesa, y se envíe a la computadora.
Gracias a las tecnologías en microcontroladores hemos desarrollado un sistema
automatizado de pedidos en restaurantes, básicamente se trata de un menú de fácil
manejo para los clientes, el cual se encuentra ubicado en cada una de las mesas para
que ellos mismos puedan tomar la orden sin necesidad de la intervención de los
meseros; dicha información se almacena en una base de datos, para que sea
procesada y gestionada posteriormente.
Esto agilita de forma sustancial el proceso desde que el cliente pide su orden hasta
que es entregada a su mesa.
- 2 -
OBJETIVOS
Objetivo General.
• Desarrollar un sistema que permita mejorar el servicio de pedido de órdenes
en restaurantes optimizando el tiempo que se toma desde el momento en que
ingresa la orden hasta que se entregue el pedido.
Objetivos específicos.
• Diseñar un sistema de control utilizando las propiedades de comunicación
existentes actualmente entre el ordenador y los microcontroladores.
• Utilizar el lenguaje ensamblador para crear un programa que realice la
interacción entre los diferentes dispositivos utilizando el bus I2C y la interfaz
de comunicación RS232.
• Diseñar y crear las tarjetas electrónicas para el montaje de los circuitos
necesarios para el correcto funcionamiento del proyecto.
• Diseñar e implementar un módulo interactivo “touch panel” que permita al
cliente realizar él mismo el pedido de una forma más ágil y confiable.
• Diseñar un sistema en base a la programación C# que permita visualizar y
administrar los pedidos en conjunto con una base de datos que almacenará
esta información para obtener una mejor gestión.
- 3 -
JUSTIFICACIÓN
En la actualidad es muy común encontrar en los restaurantes, meseros que tomen
ordenes por medio de papel y lápiz, este sistema aunque justificado en la mayoría de
los casos, no deja de ocasionar problemas provocando comúnmente confusiones o
malos entendidos al momento de despachar los pedidos, lo que conlleva a dar un mal
servicio por parte del establecimiento. En muy pocos casos podemos encontrar que
establecimientos de comidas ofrezcan sistemas automatizados que agiliten el
proceso de pedido de órdenes.
Este proyecto está enfocado en proponer un mejoramiento en el sistema de pedidos
en estos establecimientos para que no sólo optimicen la calidad de su servicio y
consecuentemente sus ganancias, sino también para que ofrezcan un cambio radical y
automatizado en el sistema de gestión de la información haciendo mas fácil la
obtención de la misma generada en el transcurso del día.
A su vez este proyecto permite utilizar los conocimientos adquiridos tanto en
microcontroladores, lenguaje de programación y bases de datos aplicándolos en un
sistema que puede tener grandes oportunidades de comercialización en nuestro
medio por su innovación.
- 4 -
CAPÍTULO I
MICROCONTROLADORES
1.1. Introducción a los microcontroladores.
Los microcontroladores están conquistando el mundo. Están presentes en nuestro
trabajo, en nuestra casa y en nuestra vida, en general. Se pueden encontrar
controlando el funcionamiento de los ratones y teclados de los computadores, en los
teléfonos, en los hornos microondas y los televisores de nuestro hogar. Pero la
invasión acaba de comenzar y el nacimiento del siglo XXI será testigo de la
conquista masiva de estos diminutos computadores, que gobernarán la mayor parte
de los aparatos que fabricaremos y usamos los humanos. Figura1.1
Figura 1.1. Microcontroladores
1.2. Controlador y microcontrolador.
Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de
uno o varios procesos, aunque el concepto de controlador ha permanecido invariable
a través del tiempo, su implementación física ha variado frecuentemente. Hace tres
décadas, los controladores se construían exclusivamente con componentes de lógica
discreta, posteriormente se emplearon los microprocesadores, que se rodeaban con
chips de memoria y E/S sobre una tarjeta de circuito impreso. En la actualidad, todos
los elementos del controlador se han podido incluir en un chip, el cuál recibe el
- 5 -
nombre de microcontrolador. Realmente consiste en un sencillo pero completo
computador contenido en el corazón (chip) de un circuito integrado.
Un microcontrolador es un circuito integrado de alta escala de integración que
incorpora la mayor parte de los elementos que configuran un controlador.
Un microcontrolador dispone normalmente de los siguientes componentes:
• Procesador o CPU (Unidad Central de Proceso).
• Memoria RAM para Contener los datos.
• Memoria para el programa tipo ROM/PROM/EPROM.
• Líneas de E/S para comunicarse con el exterior.
• Diversos módulos para el control de periféricos (temporizadores, Puertos
Serie y Paralelo, CAD: Conversores Analógico/Digital, CDA: Conversores
Digital/Analógico, etc.).
• Generador de impulsos de reloj que sincronizan el funcionamiento de todo el
sistema.
Los productos que para su regulación incorporan un microcontrolador disponen de
las siguientes ventajas:
• Aumento de prestaciones: un mayor control sobre un determinado elemento
representa una mejora considerable en el mismo.
• Aumento de la fiabilidad: al reemplazar el microcontrolador por un elevado
número de elementos disminuye el riesgo de averías y se precisan menos
ajustes.
• Reducción del tamaño en el producto acabado: La integración del
microcontrolador en un chip disminuye el volumen, la mano de obra y los
stocks.
• Mayor flexibilidad: las características de control están programadas por lo
que su modificación sólo necesita cambios en el programa de instrucciones.
El microcontrolador es en definitiva un circuito integrado que incluye todos los
componentes de un computador. Debido a su reducido tamaño es posible montar el
- 6 -
controlador en el propio dispositivo al que gobierna. En este caso el controlador
recibe el nombre de controlador empotrado (embedded controller).
1.3. Aplicaciones de los microcontroladores.
Cada vez existen más productos que incorporan un microcontrolador con el fin de
aumentar sustancialmente sus prestaciones, reducir su tamaño y coste, mejorar su
fiabilidad y disminuir el consumo.
Algunos fabricantes de microcontroladores superan el millón de unidades de un
modelo determinado producidas en una semana. Este dato puede dar una idea de la
masiva utilización de estos componentes.
Los microcontroladores están siendo empleados en multitud de sistemas presentes en
nuestra vida diaria, como pueden ser juguetes, horno microondas, frigoríficos,
televisores, computadoras, impresoras, módems, el sistema de arranque de
automóviles, etc. Y otras aplicaciones como instrumentación electrónica, control de
sistemas industriales, etc. Una aplicación típica podría emplear varios
microcontroladores para controlar pequeñas partes del sistema. Estos pequeños
controladores podrían comunicarse entre ellos y con un procesador central,
probablemente más potente, para compartir la información y coordinar sus acciones,
como, de hecho, ocurre ya habitualmente en cualquier PC.
1.4. El mercado de los microcontroladores.
Aunque en el mercado de la microinformática la mayor atención la acaparan los
desarrollos de los microprocesadores, lo cierto es que se venden cientos de
microcontroladores por cada uno de aquéllos.
Existe una gran diversidad de microcontroladores. Quizá la clasificación más
importante sea entre microcontroladores de 4, 8, 16 ó 32 bits. Aunque las
prestaciones de los microcontroladores de 16 y 32 bits son superiores a los de 4 y 8
bits, la realidad es que los microcontroladores de 8 bits dominan el mercado y los de
4 bits se resisten a desaparecer. La razón de esta tendencia es que los
microcontroladores de 4 y 8 bits son apropiados para la gran mayoría de las
- 7 -
aplicaciones, lo que hace absurdo emplear micros más potentes y consecuentemente
más caros.
En cuanto a las técnicas de fabricación, cabe decir que prácticamente la totalidad de
los microcontroladores actuales se fabrican con tecnología CMOS 4 (Complementary
Metal Oxide Semiconductor). Esta tecnología supera a las técnicas anteriores por su
bajo consumo y alta inmunidad al ruido.
La distribución de las ventas según su aplicación es la siguiente:
• Una tercera parte se absorbe en las aplicaciones relacionadas con los
computadores y sus periféricos.
• La cuarta parte se utiliza en las aplicaciones de consumo (electrodomésticos,
juegos, TV, vídeo, etc.)
• El 16% de las ventas mundiales se destinó al área de las comunicaciones.
• Otro 16% fué empleado en aplicaciones industriales.
• El resto de los microcontroladores vendidos en el mundo, aproximadamente
un 10% fueron adquiridos por las industrias de automoción.
También los modernos microcontroladores de 32 bits van afianzando sus posiciones
en el mercado, siendo las áreas de más interés el procesamiento de imágenes, las
comunicaciones, las aplicaciones militares, los procesos industriales y el control de
los dispositivos de almacenamiento masivo de datos.
1.5. ¿Qué microcontrolador emplear?
A la hora de escoger el microcontrolador a emplear en un diseño concreto hay que
tener en cuenta multitud de factores, como la documentación y herramientas de
desarrollo disponibles y su precio, la cantidad de fabricantes que lo producen y por
supuesto las características del microcontrolador (tipo de memoria de programa,
número de temporizadores, interrupciones, etc.):
Costes. Como es lógico, los fabricantes de microcontroladores compiten duramente
para vender sus productos. Y no les va demasiado mal ya que sin hacer demasiado
ruido venden 10 veces más microcontroladores que microprocesadores.
- 8 -
Para que nos hagamos una idea, para el fabricante que usa el microcontrolador en su
producto una diferencia de precio en el microcontrolador es importante (el
consumidor deberá pagar además el coste del empaquetado, el de los otros
componentes, el diseño del hardware y el desarrollo del software). Si el fabricante
desea reducir costes debe tener en cuenta las herramientas de apoyo con que va a
contar: emuladores, simuladores, ensambladores, compiladores, etc. Es habitual que
muchos de ellos siempre se decanten por microcontroladores pertenecientes a una
única familia.
1.5.1. Aplicación.
Antes de seleccionar un microcontrolador es imprescindible analizar los requisitos de
la aplicación:
• Procesamiento de datos: puede ser necesario que el microcontrolador realice
cálculos críticos en un tiempo limitado. En ese caso debemos asegurarnos de
seleccionar un dispositivo suficientemente rápido para ello. Por otro lado, habrá que
tener en cuenta la precisión de los datos a manejar: si no es suficiente con un
microcontrolador de 8 bits, puede ser necesario acudir a microcontroladores de 16 ó
32 bits, o incluso a hardware de coma flotante. Una alternativa más barata y quizá
suficiente es usar librerías para manejar los datos de alta precisión.
• Entrada Salida: para determinar las necesidades de Entrada/Salida del sistema es
conveniente dibujar un diagrama de bloques del mismo, de tal forma que sea sencillo
identificar la cantidad y tipo de señales a controlar. Una vez realizado este análisis
puede ser necesario añadir periféricos hardware externos o cambiar a otro
microcontrolador más adecuado a ese sistema.
• Consumo: algunos productos que incorporan microcontroladores están alimentados
con baterías y su funcionamiento puede ser tan vital como activar una alarma anti-
robo. Lo más conveniente en un caso como éste puede ser que el microcontrolador
esté en estado de bajo consumo pero que despierte ante la activación de una señal
(una interrupción) y ejecute el programa adecuado para procesarla.
- 9 -
• Memoria: para detectar las necesidades de memoria de nuestra aplicación debemos
separarla en memoria volátil (RAM), memoria no volátil (ROM, EPROM, etc.) y
memoria no volátil modificable (EEPROM). Este último tipo de memoria puede ser
útil para incluir información específica de la aplicación como un número de serie o
parámetros de calibración.
El tipo de memoria a emplear vendrá determinado por el volumen de ventas previsto
del producto: de menor a mayor volumen será conveniente emplear EPROM, OTP y
ROM. En cuanto a la cantidad de memoria necesaria puede ser imprescindible
realizar una versión preliminar, aunque sea en pseudo-código, de la aplicación y a
partir de ella hacer una estimación de cuánta memoria volátil y no volátil es
necesaria y si es conveniente disponer de memoria no volátil modificable.
• Ancho de palabra: el criterio de diseño debe ser seleccionar el microcontrolador
de menor ancho de palabra que satisfaga los requerimientos de la aplicación. Usar un
microcontrolador de 4 bits supondrá una reducción en los costes importante, mientras
que uno de 8 bits puede ser el más adecuado si el ancho de los datos es de un byte.
Los microcontroladores de 16 y 32 bits, debido a su elevado coste, deben reservarse
para aplicaciones que requieran sus altas prestaciones (Entrada/Salida potente o
espacio de direccionamiento muy elevado).
• Diseño de la placa: la selección de un microcontrolador concreto condicionará el
diseño de la placa de circuitos. Debe tenerse en cuenta que quizá usar un
microcontrolador barato encarezca el resto de componentes del diseño.
1.6. Recursos comunes en todos los microcontroladores.
Al estar todos los microcontroladores integrados en un chip, su estructura
fundamental y sus características básicas son muy parecidas. Todos deben disponer
de los bloques esenciales Procesador, memoria de datos y de instrucciones, líneas de
E/S, oscilador de reloj y módulos controladores de periféricos. Sin embargo, cada
fabricante intenta enfatizar los recursos más idóneos para las aplicaciones a las que
se destinan preferentemente.
- 10 -
En este apartado se hace un recorrido de todos los recursos que se hallan en todos los
microcontroladores describiendo las diversas alternativas y opciones que pueden
encontrarse según el modelo seleccionado.
1.7. Arquitectura básica de los microcontroladores.
Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clásica
de Von Neumann, en el momento presente se impone la arquitectura Harvard. La
arquitectura de Von Neumann se caracteriza por disponer de una sola memoria
principal donde se almacenan datos e instrucciones de forma indistinta. A dicha
memoria se accede a través de un sistema de buses único (direcciones, datos y
control).
La arquitectura Harvard dispone de dos memorias independientes, una que contiene
sólo instrucciones y otra, sólo datos. Ambas disponen de sus respectivos sistemas de
buses de acceso y es posible realizar operaciones de acceso (lectura o escritura)
simultáneamente en ambas memorias. Figura 1.2.
Figura 1.2. Arquitectura Harvard.
Los microcontroladores PIC responden a la arquitectura Harvard que dispone de dos
memorias independientes para datos y para instrucciones, permitiendo accesos
simultáneos.
- 11 -
1.8. El procesador o CPU.
Es el elemento más importante del microcontrolador y determina sus principales
características, tanto a nivel hardware como software.
Se encarga de direccionar la memoria de instrucciones, recibir el código OP de la
instrucción en curso, su decodificación y la ejecución de la operación que implica la
instrucción, así como la búsqueda de los operandos y el almacenamiento del
resultado.
1.9. Memoria.
En los microcontroladores la memoria de instrucciones y datos está integrada en el
propio chip. Una parte debe ser no volátil, tipo ROM, y se destina a contener el
programa de instrucciones que gobierna la aplicación. Otra parte de memoria será
tipo RAM, volátil, y se destina a guardar las variables y los datos.
Hay dos peculiaridades que diferencian a los microcontroladores de los
computadores personales:
• No existen sistemas de almacenamiento masivo como disco duro o disquetes.
• Como el microcontrolador sólo se destina a una tarea en la memoria ROM,
sólo hay que almacenar un único programa de trabajo.
La RAM en estos dispositivos es de poca capacidad pues sólo debe contener las
variables y los cambios de información que se produzcan en el transcurso del
programa. Por otra parte, como sólo existe un programa activo, no se requiere
guardar una copia del mismo en la RAM pues se ejecuta directamente desde la ROM.
Los usuarios de computadores personales están habituados a manejar Megabytes de
memoria, pero, los diseñadores con microcontroladores trabajan con capacidades de
ROM comprendidas entre 512 bytes y 8 k bytes y de RAM comprendidas entre 20 y
512 bytes.
Según el tipo de memoria ROM que dispongan los microcontroladores, la aplicación
y utilización de los mismos es diferente. Se describen las cinco versiones de memoria
no volátil que se pueden encontrar en los microcontroladores del mercado.
- 12 -
1.9.1. ROM.
Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la
fabricación del chip. El elevado coste del diseño de la máscara sólo hace aconsejable
el empleo de los microcontroladores con este tipo de memoria cuando se precisan
cantidades superiores a varios miles de unidades.
1.9.2. OTP.
El microcontrolador contiene una memoria no volátil de sólo lectura "programable
una sola vez" por el usuario. OTP (One Time Programmable). Es el usuario quien
puede escribir el programa en el chip mediante un sencillo grabador controlado por
un programa desde un PC.
La versión OTP es recomendable cuando es muy corto el ciclo de diseño del
producto, o bien, en la construcción de prototipos y series muy pequeñas.
Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptación
mediante fusibles para proteger el código contenido.
1.9.3. EPROM.
Los microcontroladores que disponen de memoria EPROM (Erasable
Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La
grabación se realiza, como en el caso de los OTP, con un grabador gobernado desde
un PC. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de
cristal en su superficie por la que se somete a la EPROM a rayos ultravioleta durante
varios minutos. Las cápsulas son de material cerámico y son más caros que los
microcontroladores con memoria OTP que están hechos con material plástico.
1.9.4. EEPROM.
Se trata de memorias de sólo lectura, programables y re-grabables eléctricamente
EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la
programación como el borrado, se realizan eléctricamente desde el propio grabador y
- 13 -
bajo el control programado de un PC. Es muy cómoda y rápida la operación de
grabado y la de borrado. No disponen de ventana de cristal en la superficie.
Los microcontroladores dotados de memoria EEPROM una vez instalados en el
circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho
circuito. Para ello se usan "grabadores en circuito" que confieren una gran
flexibilidad y rapidez a la hora de realizar modificaciones en el programa de trabajo.
El número de veces que puede grabarse y borrarse una memoria EEPROM es finito,
por lo que no es recomendable una reprogramación continúa. Son muy idóneos para
la enseñanza y la Ingeniería de diseño.
Se va extendiendo en los fabricantes la tendencia de incluir una pequeña zona de
memoria EEPROM en los circuitos programables para guardar y modificar
cómodamente una serie de parámetros que adecuan el dispositivo a las condiciones
del entorno.
Este tipo de memoria es relativamente lenta.
1.9.5. Flash.
Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar.
Funciona como una ROM y una RAM pero consume menos y es más pequeña.
A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es más
rápida y de mayor densidad que la EEPROM.
La alternativa FLASH está recomendada frente a la EEPROM cuando se precisa gran
cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos de
escritura/borrado.
Las memorias EEPROM y FLASH son muy útiles al permitir que los
microcontroladores que las incorporan puedan ser reprogramados "en circuito", es
decir, sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con
este tipo de memoria incorporado al control del motor de un automóvil permite que
pueda modificarse el programa durante la rutina de mantenimiento periódico,
compensando los desgastes y otros factores tales como la compresión, la instalación
- 14 -
de nuevas piezas, etc. La reprogramación del microcontrolador puede convertirse en
una labor rutinaria dentro de la puesta a punto.
1.10. Puertos de Entrada y Salida.
La principal utilidad de los pines que posee la cápsula que contiene un
microcontrolador es soportar las líneas de E/S que comunican al computador interno
con los periféricos exteriores.
Según los controladores de periféricos que posea cada modelo de microcontrolador,
las líneas de E/S se destinan a proporcionar el soporte a las señales de entrada, salida
y control.
1.11. Reloj principal.
Todos los microcontroladores disponen de un circuito oscilador que genera una onda
cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la
sincronización de todas las operaciones del sistema.
Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo se
necesitan unos pocos componentes exteriores para seleccionar y estabilizar la
frecuencia de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo
junto a elementos pasivos o bien un capacitor cerámico o una red R-C.
Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las
instrucciones pero lleva aparejado un incremento del consumo de energía.
1.12. Recursos Especiales.
Cada fabricante oferta numerosas versiones de una arquitectura básica de
microcontrolador. En algunas amplía las capacidades de las memorias, en otras
incorpora nuevos recursos, en otras reduce las prestaciones al mínimo para
aplicaciones muy simples, etc. La labor del diseñador es encontrar el modelo mínimo
que satisfaga todos los requerimientos de su aplicación. De esta forma, minimizará el
coste, el hardware y el software.
- 15 -
Los principales recursos específicos que incorporan los microcontroladores son:
• Temporizadores o "Timers".
• Perro guardián o "Watchdog".
• Protección ante fallo de alimentación o "Brownout".
• Estado de reposo o de bajo consumo.
• Conversor A/D.
• Conversor D/A.
• Comparador analógico.
• Modulador de anchura de impulsos o PWM.
• Puertas de E/S digitales.
• Puertas de comunicación.
1.12.1. Temporizadores o "Timers".
Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la
cuenta de acontecimientos que suceden en el exterior (contadores).
Para la medida de tiempos se carga un registro con el valor adecuado y a
continuación dicho valor se va incrementando o decrementando al ritmo de los
impulsos de reloj o algún múltiplo hasta que se desborde y llegue a 0, momento en el
que se produce un aviso.
Cuando se desean contar acontecimientos que se materializan por cambios de nivel o
flancos en alguna de los pines del microcontrolador, el mencionado registro se va
incrementando o decrementando al ritmo de dichos impulsos.
- 16 -
1.12.2. Perro guardián o "Watchdog".
Cuando el computador personal se bloquea por un fallo del software u otra causa, se
pulsa el botón del reset y se reinicializa el sistema. Pero un microcontrolador
funciona sin el control de un supervisor y de forma continuada las 24 horas del día.
El Perro guardián consiste en un temporizador que, cuando se desborda y pasa por 0,
provoca un reset automáticamente en el sistema.
Se debe diseñar el programa de trabajo que controla la tarea de forma que refresque o
inicialice al Perro guardián antes de que provoque el reset. Si falla el programa o se
bloquea, no se refrescará al Perro guardián y, al completar su temporización,
provocará el reset.
1.12.3. Protección ante fallo de alimentación o "Brownout".
Se trata de un circuito que resetea al microcontrolador cuando el voltaje de
alimentación (VDD) es inferior a un voltaje mínimo ("brownout"). Mientras el
voltaje de alimentación sea inferior al de brownout el dispositivo se mantiene
reseteado, comenzando a funcionar normalmente cuando sobrepasa dicho valor.
1.12.4. Estado de reposo ó de bajo consumo.
Son abundantes las situaciones reales de trabajo en que el microcontrolador debe
esperar, sin hacer nada, a que se produzca algún acontecimiento externo que le ponga
de nuevo en funcionamiento. Para ahorrar energía, (factor clave en los aparatos
portátiles), los microcontroladores disponen de una instrucción especial (SLEEP en
los PIC), que les pasa al estado de reposo o de bajo consumo, en el cual los
requerimientos de potencia son mínimos. En dicho estado se detiene el reloj principal
y se "congelan" sus circuitos asociados, quedando sumido en un profundo "sueño" el
microcontrolador. Al activarse una interrupción ocasionada por el acontecimiento
esperado, el microcontrolador se despierta y reanuda su trabajo.
- 17 -
1.12.5. Convertidor A/D (CAD).
Los microcontroladores que incorporan un Conversor A/D (Analógico/Digital)
pueden procesar señales analógicas, tan abundantes en las aplicaciones. Suelen
disponer de un multiplexor que permite aplicar a la entrada del CAD diversas señales
analógicas desde las patitas del circuito integrado.
1.12.6. Convertidor D/A (CDA).
Transforma los datos digitales obtenidos del procesamiento del computador en su
correspondiente señal analógica que saca al exterior por una de las patitas de la
cápsula. Existen muchos efectores que trabajan con señales analógicas.
1.12.7. Comparador analógico.
Algunos modelos de microcontroladores disponen internamente de un Amplificador
Operacional que actúa como comparador entre una señal fija de referencia y otra
variable que se aplica por una de las patitas de la cápsula. La salida del comparador
proporciona un nivel lógico 1 ó 0 según una señal sea mayor o menor que la otra.
También hay modelos de microcontroladores con un módulo de tensión de referencia
que proporciona diversas tensiones de referencia que se pueden aplicar en los
comparadores.
1.12.8. Modulador de anchura de impulsos o PWM.
Son circuitos que proporcionan en su salida impulsos de anchura variable, que se
ofrecen al exterior a través de las patitas del encapsulado.
- 18 -
1.12.9. Puertos de E/S digitales.
Todos los microcontroladores destinan algunos de sus pines a soportar líneas de E/S
digitales. Por lo general, estas líneas se agrupan de ocho en ocho formando Puertos.
Las líneas digitales de los Puertos pueden configurarse como Entrada o como Salida
cargando un 1 ó un 0 en el bit correspondiente de un registro destinado a su
configuración.
1.12.10. Puertos de comunicación.
Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros
dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de
redes y poder adaptarlos con otros elementos bajo otras normas y protocolos.
Algunos modelos disponen de recursos que permiten directamente esta tarea, entre
los que destacan:
• UART, adaptador de comunicación serie asíncrona.
• USART, adaptador de comunicación serie síncrona y asíncrona
• Puerta paralela esclava para poder conectarse con los buses de otros
microprocesadores.
• USB (Universal Serial Bus), que es un moderno bus serie para los PC.
• Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips.
• CAN (Controller Area Network), para permitir la adaptación con redes de
conexionado multiplexado desarrollado conjuntamente por Bosch e Intel para
el cableado de dispositivos en automóviles. En EE.UU. se usa el J185O.
1.13. Herramientas para el desarrollo de aplicaciones.
Uno de los factores que más importancia tiene a la hora de seleccionar un
microcontrolador entre todos los demás es el soporte tanto software como hardware
de que dispone. Un buen conjunto de herramientas de desarrollo puede ser decisivo
- 19 -
en la elección, ya que pueden suponer una ayuda inestimable en el desarrollo del
proyecto.
Las principales herramientas de ayuda al desarrollo de software de sistemas basados
en microcontroladores son:
• Ensamblador.
• Compilador.
• Depuración.
• Simulador.
• Placas de evaluación.
• Emuladores en circuito.
1.13.1. Ensamblador.
La programación en lenguaje ensamblador puede resultar un tanto ardua para el
principiante, pero permite desarrollar programas muy eficientes, ya que otorga al
programador el dominio absoluto del sistema. Los fabricantes suelen proporcionar el
programa ensamblador de forma gratuita y en cualquier caso siempre se puede
encontrar una versión gratuita para los microcontroladores más populares.
1.13.2. Compilador.
La programación en un lenguaje de alto nivel (como el C ó el Basic) permite
disminuir el tiempo de desarrollo de un producto. No obstante, si no se programa con
cuidado, el código resultante puede ser mucho más ineficiente que el programado en
ensamblador. Las versiones más potentes suelen ser muy caras, aunque para los
microcontroladores más populares pueden encontrarse versiones demo limitadas e
incluso compiladores gratuitos.
- 20 -
1.13.3. Depuración.
Debido a que los microcontroladores van a controlar dispositivos físicos, los
desarrolladores necesitan herramientas que les permitan comprobar el buen
funcionamiento del microcontrolador cuando es conectado al resto de circuitos.
1.13.4. Simulador.
Son capaces de ejecutar en un PC programas realizados para el microcontrolador.
Los simuladores permiten tener un control absoluto sobre la ejecución de un
programa, siendo ideales para la depuración de los mismos. Su gran inconveniente es
que es difícil simular la entrada y salida de datos del microcontrolador. Tampoco
cuentan con los posibles ruidos en las entradas, pero, al menos, permiten el paso
físico de la implementación de un modo más seguro y menos costoso, puesto que
ahorraremos en grabaciones de chips para la prueba in-situ.
1.13.5. Placas de evaluación.
Se trata de pequeños sistemas con un microcontrolador ya montado y que suelen
conectarse a un PC desde el que se cargan los programas que se ejecutan en el
microcontrolador. Las placas suelen incluir visualizadores LCD, teclados, LEDs,
fácil acceso a los pines de E/S, etc. El sistema operativo de la placa recibe el nombre
de programa monitor. El programa monitor de algunas placas de evaluación, aparte
de permitir cargar programas y datos en la memoria del microcontrolador, puede
permitir en cualquier momento realizar ejecución paso a paso, monitorizar el estado
del microcontrolador o modificar los valores almacenados los registros o en la
memoria.
- 21 -
1.13.6. Emuladores en circuito.
Se trata de un instrumento que se coloca entre el PC anfitrión y el zócalo de la
tarjeta de circuito impreso donde se alojará el microcontrolador definitivo. El
programa es ejecutado desde el PC, pero para la tarjeta de aplicación es como si lo
hiciese el mismo microcontrolador que luego irá en el zócalo. Presenta en pantalla
toda la información tal y como luego sucederá cuando se coloque la cápsula.
CAPÍTULO II
COMUNICACIÓN SERIAL
2.1. Conceptos básicos de comunicación serial.
La comunicación serial es un protocolo muy común para comunicación entre
dispositivos que se incluye de manera estándar en prácticamente cualquier
computadora. La mayoría de las computadoras incluyen dos puertos seriales RS232.
La comunicación serial es también un protocolo común utilizado por varios
dispositivos para instrumentación. Además, la comunicación serial puede ser
utilizada para adquisición de datos si se usa en conjunto con un dispositivo remoto de
muestreo.
El concepto de comunicación serial es sencillo. El puerto serial envía y recibe bytes
de información un bit a la vez. Aún y cuando esto es más lento que la comunicación
en paralelo, que permite la transmisión de un byte completo por vez, este método de
comunicación es más sencillo y puede alcanzar mayores distancias. Por ejemplo, la
especificación IEEE 488 para la comunicación en paralelo determina que el largo del
cable para el equipo no puede ser mayor a 20 metros, con no más de 2 metros entre
cualquiera de los dos dispositivos; por el otro lado, utilizando comunicación serial el
largo del cable puede llegar a los 1200 metros.
Figura 2.1 Conectores DB9 macho y hembra
Típicamente, la comunicación serial se utiliza para transmitir datos en formato
ASCII. Para realizar la comunicación se utilizan 3 líneas de transmisión: (1) Tierra (o
referencia), (2) Transmitir, (3) Recibir. Debido a que la transmisión es asincrónica,
es posible enviar datos por una línea mientras se reciben datos por otra. Las
características más importantes de la comunicación serial son la velocidad de
transmisión, los bits de datos, los bits de parada, y la paridad. Para que dos puertos se
puedan comunicar, es necesario que las características sean iguales.
2.1.1. Velocidad de transmisión (baud rate).
Indica el número de bits por segundo que se transfieren, y se mide en baudios
(bauds). Por ejemplo, 300 baudios representan 300 bits por segundo. Cuando se hace
referencia a los ciclos de reloj se está hablando de la velocidad de transmisión. Por
ejemplo, si el protocolo hace una llamada a 4800 ciclos de reloj, entonces el reloj
está corriendo a 4800 Hz, lo que significa que el puerto serial está muestreando las
líneas de transmisión a 4800 Hz. Las velocidades de transmisión más comunes para
las líneas telefónicas son de 14400, 28800, y 33600. Es posible tener velocidades
más altas, pero se reduciría la distancia máxima posible entre los dispositivos.
2.1.2. Bits de datos.
Se refiere a la cantidad de bits en la transmisión. Cuando la computadora envía un
paquete de información, el tamaño de ese paquete no necesariamente será de 8 bits.
Las cantidades más comunes de bits por paquete son 5, 7 y 8 bits. El número de bits
que se envía depende en el tipo de información que se transfiere. Por ejemplo, el
ASCII estándar tiene un rango de 0 a 127, es decir, utiliza 7 bits; para ASCII
extendido es de 0 a 255, lo que utiliza 8 bits. Si el tipo de datos que se está
transfiriendo es texto simple (ASCII estándar), entonces es suficiente con utilizar 7
bits por paquete para la comunicación. Un paquete se refiere a una transferencia de
byte, incluyendo los bits de inicio/parada, bits de datos, y paridad. Debido a que el
número actual de bits depende en el protocolo que se seleccione, el término paquete
se usar para referirse a todos los casos.
2.1.3. Bits de parada.
Usado para indicar el fin de la comunicación de un sólo paquete. Los valores típicos
son 1, 1.5 o 2 bits. Debido a la manera como se transfiere la información a través de
las líneas de comunicación y que cada dispositivo tiene su propio reloj, es posible
que los dos dispositivos no estén sincronizados. Por lo tanto, los bits de parada no
sólo indican el fin de la transmisión sino además dan un margen de tolerancia para
esa diferencia de los relojes. Mientras más bits de parada se usen, mayor será la
tolerancia a la sincronía de los relojes, sin embargo la transmisión será más lenta.
2.1.4. Paridad.
Es una forma sencilla de verificar si hay errores en la transmisión serial. Existen
cuatro tipos de paridad: par, impar, marcada y espaciada. La opción de no usar
paridad alguna también está disponible. Para paridad par e impar, el puerto serial
fijará el bit de paridad (el último bit después de los bits de datos) a un valor para
asegurarse que la transmisión tenga un número par o impar de bits en estado alto
lógico. Por ejemplo, si la información a transmitir es 011 y la paridad es par, el bit de
paridad sería 0 para mantener el número de bits en estado alto lógico como par. Si la
paridad seleccionada fuera impar, entonces el bit de paridad sería 1, para tener 3 bits
en estado alto lógico. La paridad marcada y espaciada en realidad no verifican el
estado de los bits de datos; simplemente fija el bit de paridad en estado lógico alto
para la marcada, y en estado lógico bajo para la espaciada. Esto permite al
dispositivo receptor conocer de antemano el estado de un bit, lo que serviría para
determinar si hay ruido que esté afectando de manera negativa la transmisión de los
datos, o si los relojes de los dispositivos no están sincronizados.
Figura 2.2. Diagrama de tiempo para comunicación serial
2.2. Comunicación Serial Asíncrona RS-232.
RS-232 (también conocido como Electronic Industries Alliance RS-232C) es una
interfaz que designa una norma para el intercambio serie de datos binarios entre un
DTE (Equipo Terminal de datos) y un DCE (Data Communication Equipment,
Equipo de terminación del circuito de datos), aunque existen otras situaciones en las
que también se utiliza la interfaz RS-232. Gracias a las mejoras que se han ido
desarrollando en las líneas de transmisión y en los cables, existen aplicaciones en las
que se aumenta el desempeño de RS-232 en lo que respecta a la distancia y velocidad
del estándar. RS-232 está limitado a comunicaciones de punto a punto entre los
dispositivos y el puerto serial de la computadora. El hardware de RS-232 se puede
utilizar para comunicaciones seriales en distancias de hasta 50 pies.
Figura 2.3. Diagrama de conexión mínima para comunicación serial.
2.2.1. Características Principales del RS232
El RS232 consiste en un conector tipo DB-25 (de 25 pines), aunque es normal
encontrar la versión de 9 pines (DB-9), más barato e incluso más extendido para
cierto tipo de periféricos (como el ratón serie del PC).
Tabla 2.1. Distribución de los pines del conector DB9
Fuente: Pagina Web http://pinouts.ws/db9-rs232-pinout.html
Para los propósitos de la RS232 estándar, una conexión es definida por un cable
desde un dispositivo al otro. Hay 25 conexiones en la especificación completa, pero
es muy probable que se encuentren menos de la mitad de éstas en una interfaz
determinada. La causa es simple, una interfaz full dúplex puede obtenerse con
solamente 3 cables.
Existe una cierta confusión asociada a los nombres de las señales utilizadas,
principalmente porque hay tres convenios diferentes de denominación (nombre
común, nombre asignado por la EIA, y nombre asignado por el CCITT).
En la siguiente tabla (tabla 2.2) se muestran los tres nombres junto al número de pin
del conector al que está asignado.
Pin Señal In/Out Descripción
1 DCD In Detección de Portadora
2 RxD In Recibir Datos
3 TxD Out Transmitir Datos
4 DTR Out Terminal de Datos Listo
5 GND - Tierra
6 DSR In Equipo de Datos Listo
7 RTS Out Solicitud de Envío
8 CTS In Libre para Envío
9 RI In Ring Indicator
PIN EIA E/S Función DTE-DCE 1 CG - Masa de chasis 2 TxD S Transmitir Datos 3 RxD E Recibir Datos 4 RTS S Solicitud de Envío 5 CTS E Libre para Envío 6 DSR E Equipo de Datos Listo 7 SG - Tierra 8 DCD E Detección de Portadora 9* E Prueba de Voltaje Positivo 10* E Prueba de Voltaje Negativo 11 S (no tiene uso) 12+ SCDC E Detección de Portadora Secundario 13+ SCTS E Libre para Envío Secundario 14+ SBA 118 S Transmitir Datos Secundario 15# TC S Transmite el Reloj 16+ SRD E Recibir Datos Secundario 17# RC E Recibir Reloj 18 (no tiene uso) 19+ SRTS S Solicitud de Envío Secundario 20 DTR S Terminal de Datos Listo 21* SQ E Calidad de Señal 22 RI E Ring Indicator 23* DSR S Selector de Rango de Datos S Selector de Rango de Datos 24* RTxC S Transmitir/Recibir Reloj 25* S Busy
Tabla 2.2. Distribución de pines conector DB-25
Fuente: Pagina Web http://pinouts.ws/db9-rs232-pinout.html
Los valores de voltaje se invierten desde los valores lógicos. Por ejemplo, el valor
lógico más positivo corresponde al voltaje más negativo. También un 0 lógico
corresponde a la señal de valor verdadero o activado. Por ejemplo si la línea DTR
está al valor 0 lógico, se encuentra en la gama de voltaje que va desde +3 a +25 V,
entonces DTR está listo (ready).
Sobre los circuitos, todos los voltajes están con respecto a la señal de tierra.
Las convenciones que se usan son las siguientes:
Voltaje Señal Nivel Lógico Control
+3 a +25 Espacio 0 On
-3 a –25 Marca 1 Off
Tabla 2.3 Valores convencionales de voltaje para los niveles lógicos.
El canal secundario a veces se usa para proveer un camino de retorno de información
más lento, de unos 5 a 10 bits por segundo, para funciones como el envío de
caracteres ACK o NAK, en principio sobre un canal half duplex. Si el módem usado
acepta esta característica, es posible para el receptor aceptar o rechazar un mensaje
sin tener que esperar el tiempo de conmutación, un proceso que usualmente toma
entre 100 y 200 milisegundos.
Las señales TXD, DTR y RTS son de salida, mientras que RXD, DSR, CTS y DCD
son de entrada. La masa de referencia para todas las señales es SG (Tierra de Señal).
DB-25 DB-9
Figura 2.4. Ubicación de pines en conectores DB-25 y DB-9.
2.2.2. Limitaciones de la RS232 C.
La RS232 C tiene una limitación de distancia máxima de 15 metros. Si bien no es
una desventaja considerable cuando los equipos a conectar se encuentran cerca, sí es
un inconveniente cuando la RS232 se utiliza para conectar directamente terminales o
impresoras que puedan estar lejanas.
Cuando una señal cambia de una condición a otra, la especificación limita el tiempo
que puede permanecer en la región de transición. Este requerimiento determina el
máximo de capacidad distribuida admisible en el cable, porque la capacidad limita el
tiempo de transición de la señal. La norma RS232 especifica que la capacidad en la
línea no debe superar los 2.500 picos faradios. Los cables que se suelen utilizar
tienen una capacidad de 120 a 150 pico faradios por metro de longitud, por lo que la
RS232 tiene como límite de 15 m de distancia, como se vió anteriormente.
Una segunda limitación de la RS232 es su método de toma de tierra o retorno común.
Este método, llamado transmisión no balanceada, funciona bien la mayor parte del
tiempo. Sin embargo, si hay diferencia de potencial entre los dos extremos del cable
(lo cual es bastante probable en recorridos largos), se reduce la región de transición
entre marca y espacio. Cuando ocurre esto, existe la posibilidad que no se interpreten
bien los distintos estados de la señal.
Otra dificultad es su máximo de 20 KB/s para la velocidad de transmisión. Si bien en
el momento de aparición del estándar era suficiente, en la actualidad, comparando
con las velocidades alcanzadas por las redes de área local, 10 y 100 MB/s y las
exigencias de ancho de banda que las aplicaciones requieren, la RS-232 C en algunos
casos está disminuyendo su aplicación.
A partir de la RS232 se desarrollaron nuevas interfaces que pretenden transmitir a
mayor velocidad alcanzando mayor distancia. Estas nuevas interfaces como la RS422
y la RS423 eliminan algunas de las restricciones de la RS232, por ejemplo, la de
poseer un retorno común para todas las señales.
2.3. Comunicación Serial I²C.
El bus I²C (Circuito Inter-Integrado) es un bus de comunicación (camino de señales
electrónicas) compuesto de dos cables, que trabaja a baja y media velocidad,
desarrollado por Semiconductores Phillips al principio de los ochentas. Es muy
usado en la industria, principalmente para comunicar microcontroladores y sus
periféricos en sistemas empotrados (Embedded Systems) y generalizando más para
comunicar circuitos integrados entre si que normalmente residen en un mismo
circuito impreso .El I²C fué creado para reducir los costos de manufactura de
productos electrónicos. Este provee un poderoso link de comunicación de chip a chip
con un bajo costo entre estos productos. Las aplicaciones iniciales para I²C incluyen
control de volumen y contraste en radios y televisores. Durante la última década, el
I²C ha expandido su rol de comunicaciones para incluir un rango amplio de
aplicaciones.
2.3.1. Características principales del I²C
Hoy en día, el I²C puede ser encontrado en una gran variedad de aplicaciones
electrónicas, con un potencial de crecimiento casi ilimitado.
Las comunicaciones de chip a chip suelen utilizar muchos cables en una interfaz
paralela (figura2.5), y usualmente requieren que los ICs (circuitos integrados) tengan
24, 28, o mas pines. Muchos de estos pines son utilizados para direccionamiento,
selección, control, y transferencia de datos. En una interface paralela, 8 bits de datos
son típicamente transferidos desde un IC transmisor a un IC receptor en una simple
operación.
Figura 2.5. Interface paralela
El I²C realiza la comunicación de chip a chip utilizando únicamente dos alambres en
una interface serial (figura 2.5), permitiendo a los circuitos integrados comunicarse
con pocos pines. Los dos alambres en el Bus I²C son llamados Reloj (SCL) y Data
(SDA). Estos dos alambres llevan el direccionamiento, la selección, el control y los
datos, un bit a la vez. El alambre SDA lleva la data, mientras que el alambre SCL
sincroniza el transmisor y el receptor durante la transferencia. Los circuitos
integrados que usan el Bus I²C pueden realizar la misma función que sus contrapartes
las largas interfaces paralelas, pero con mucho menos pines. Esto reduce
enormemente el tamaño y el costo de los ICs basados en el Bus I2C.
Figura 2.6. Interface I²C
Otro segundo ahorro del diseño de dos alambres del Bus I²C está en el tamaño y el
costo del circuito impreso (PCB). Con circuitos integrados basados en el Bus I2C
que necesiten menos alambres (pistas de cobre) para las comunicaciones entre chips,
los circuitos impresos que utilizan integrados con I2C reducen en gran parte su
tamaño, complejidad y costo.
Aunque el ahorro en costos por sí sólo sería suficiente para hacer del Bus I²C un
éxito, sus desarrolladores también crearon un poderoso link de comunicación el cual
permite conectar muchos microcontroladores esclavos a un maestro. (figura2.7).
Figura 2.7. Conexión de un maestro con varios esclavos.
2.3.2. Jerarquía Maestro-Esclavo.
Los dispositivos I²C están clasificados en maestro o esclavo. Un dispositivo que
inicia un mensaje es llamado maestro, mientras que un dispositivo que responde a un
mensaje es llamado esclavo. Un dispositivo puede ser sólo maestro, sólo esclavo, o
cambiar entre maestro o esclavo, como lo requiera la aplicación.
2.3.4. Dispositivos múltiples.
El I²C puede conectar muchos circuitos integrados en sólo dos alambres. Cada
dispositivo esclavo I²C tiene su propio dirección de esclavo única. Cuando un
maestro envía un mensaje, éste incluye la dirección del esclavo al principio del
mensaje. Todos los dispositivos en el bus escuchan el mensaje, pero sólo el esclavo
que reconoce su propia dirección participa en la transferencia.
2.3.5 Soporte Multi-Maestro.
I²C también soporta múltiples dispositivos maestro en el bus al mismo tiempo, una
característica poderosa que optimiza el uso del bus manteniendo el tráfico por
mensajes en el bus al mínimo. Para soportar múltiples maestros, el I2C debe resolver
conflictos de señal, para que dos o más maestros traten de hablar por el bus al mismo
tiempo. Ésta característica, llamada detección de pérdida de arbitraje del bus, permite
a un maestro detectar cuando sus señales del bus están en conflicto con algún otro
maestro. Un maestro que detecta la pérdida del arbitraje termina su uso del bus,
permitiendo que el mensaje generado por otro maestro cruce el bus ileso.
Figura 2.8. Soporte multi-maestro.
El bus esta libre cuando SDA y SCL están en estado lógico alto.
En estado bus libre, cualquier dispositivo puede ocupar el bus I²C como maestro.
El maestro comienza la comunicación enviando un patrón llamado “start condition”.
Esto alerta a los dispositivos esclavos, poniéndolos a la espera de una transacción.
El maestro se dirige al dispositivo con el que quiere hablar, enviando un byte que
contiene los siete bits (A7-A1) que componen la dirección del dispositivo esclavo
con el que se quiere comunicar, y el octavo bit (A0) de menor peso se corresponde
con la operación deseada (L/E), lectura=0 (recibir del esclavo) y escritura=1 (enviar
al esclavo).
La dirección enviada es comparada por cada esclavo del bus con su propia dirección,
si ambas coinciden, el esclavo se considera direccionado como esclavo-transmisor o
esclavo-receptor dependiendo del bit R/W.
El esclavo responde enviando un bit de ACK que le indica al dispositivo maestro que
el esclavo reconoce la solicitud y está en condiciones de comunicarse.
Seguidamente comienza el intercambio de información entre los dispositivos.
El maestro envía la dirección del registro interno del dispositivo que se desea leer o
escribir.
El esclavo responde con otro bit de ACK
Ahora el maestro puede empezar a leer o escribir bytes de datos. Todos los bytes de
datos deben constar de 8 bits, el número máximo de bytes que pueden ser enviados
en una transmisión no está restringido, siendo el esclavo quien fija esta cantidad de
acuerdo a sus características.
Cada byte leído/escrito por el maestro debe ser obligatoriamente reconocido por un
bit de ACK por el dispositivo maestro/esclavo.
Se repiten los 2 pasos anteriores hasta finalizar la comunicación entre maestro y
esclavo.
Figura 2.9. Diagrama de pulsos del proceso de comunicación maestro-esclavo.
Aún cuando el maestro siempre controla el estado de la línea del reloj, un esclavo de
baja velocidad o que deba detener la transferencia de datos mientras efectúa otra
función, puede forzar la línea SCL a nivel bajo. Esto hace que el maestro entre en un
estado de espera, durante el cual, no transmite información esperando a que el
esclavo esté listo para continuar la transferencia en el punto donde había sido
detenida.
Cuando la comunicación finaliza, el maestro transmite una "stop condition" para
dejar libre el bus.
Después de la "stop condition", es obligatorio para el bus estar idle durante unos
microsegundos.
Figura 2.10. Comparación de SDA y SCL en el tiempo.
Ambas líneas, la SCL y la SDA pueden manejar sus salidas bajas, pero no pueden
manejar sus salidas altas. Para que la línea pueda estar en alto, se debe poner
resistencias de pull-up hacia la fuente de 5V. Debe existir una resistencia desde el
SCL hacia la línea de 5V y otra desde la línea SDA hacia la línea de 5V. Sólo se
necesita un set de resistencias para todo el Bus I²C, no para cada dispositivo, como se
muestra en la figura.
Figura 2.11. Conexión de las resistencias de Pull-up
El valor de las resistencias no es crítico.
Los datos son transferidos en secuencia de 8 bits. Los bits son puestos al principio de
la línea SDA con el MSB (Bit más significativo). La línea SCL es entonces pulsada a
alto, y luego a bajo. Recordemos que el chip realmente no puede manejar la línea en
alto, es la resistencia quien realmente la pone en alto. Por cada 8 bits transferidos, el
dispositivo que recibe los datos envía de regreso el bit de reconocimiento, así que
realmente hay 9 pulsos de reloj SCL para transferir cada byte de 8 bits de dato.
Si el dispositivo receptor envía de regreso un bit ACK, entonces éste ha recibido el
dato y está listo para recibir otro byte. Si éste envía de regreso un alto entonces está
indicando que no puede aceptar más datos y el maestro debe terminar la transferencia
enviando una secuencia de stop.
Figura 2.12. Forma de transmisión de los datos SDA
2.3.6. Velocidad.
La velocidad del reloj estándar (SCL) para el I²C es hasta 100KHz. Philips define
velocidades más rápidas: modo Rápido, que es hasta de 400KHz, y modo Velocidad
Alta que es de hasta 3.4MHz.
2.3.7. Direccionamiento del dispositivo I²C.
Todas las direcciones I²C tienen 7 bits o 10 bits. El uso de direcciones de 10 bits es
poco común. Cuando se envía una dirección de 7 bits, en realidad siempre se envía 8
bits. El bit extra se utiliza para informar al esclavo si el maestro está escribiendo en
él o leyendo de él. Si el bit es cero, el maestro está escribiendo en el esclavo. Si el bit
es uno, el maestro está leyendo desde el esclavo.
La dirección de 7 bits está situada en las 7 bits más altos de el byte, y el bit de
Lectura/escritura (R/W) está en el LSB (bit menos significativo).
Figura 2.13. Orden de los bits de dirección del SDA
CAPÍTULO III
MONTAJE Y PROGRAMACIÓN
3.1. Montaje.
Para el montaje del proyecto diseñamos e implementamos 3 módulos, un maestro y
dos esclavos. A continuación describiremos sobre cada uno de ellos
Figura 3.1 Esquema general del proyecto.
3.1.1. Módulo Maestro.
Este módulo consta de una tarjeta integrada que contiene el PIC maestro el cual
recibe la información de los PIC esclavos por medio de una comunicación I²C y
además se comunica con la PC por medio de la comunicación RS232, también consta
de una fuente de voltaje la cual además de alimentar al módulo maestro también
alimenta a los módulos esclavos, consta con un conector DB9 en la parte trasera para
conectarse a la PC y un conector jack en la parte frontal el cual por medio de un
cable UTP y conectores RJ45 se comunican con los esclavos.
Figura 3.2. Esquema general módulo
Figura 3.3. Esquema de conexión del PIC para módulo Maestro.
Figura 3.4.a. Vista frontal módulo maestro.
Figura 3.4.b. Vista trasera del módulo maestro.
3.1.2. Módulo Esclavo.
Este módulo consta de una tarjeta integrada que contiene dos PIC uno de los PIC se
encarga de procesar la información proveniente del teclado (para nuestro caso
usaremos un teclado de 12 pulsantes conectados de forma matricial) y el otro para
comunicación con el módulo maestro. El teclado posee 12 pulsantes, 10 de ellos
tienen su propio display de siete segmentos cátodo común que indica la cantidad de
pedidos; los otros dos pulsantes son para ordenar y cancelar pedido. El LCD indica
los procesos del pedido y en la parte posterior lleva un conector jack para
comunicación y alimentación.
Figura 3.5 Esquema general módulo esclavo.
Figura 3.6. Esquema de conexión del PIC para módulo Esclavo.
Para el desarrollo del teclado se crea tarjetas individuales las cuales llevan un
pulsante y un display y se conectan todas a través de un bus de datos para que de esta
forma los diaplays queden en paralelo y los pulsantes formen la matriz.
Figura 3.7. Tarjeta individual pulsante-display (vista frontal)
Figura 3.8. Tarjeta individual pulsante-display (vista posterior)
Figura 3.9. Diagrama de conexión de las tarjetas pulsante-display.
Figura 3.10. Vista superior de las placas.
Mediante el teclado se puede ingresar la cantidad de unidades del combo a elegir,
mientras en los displays se muestra la cantidad ingresada
Figura 3.11. Vista del panel frontal del módulo
Luego de ingresar las cantidades se pulsa el botón de “ordenar pedido”, y luego
aparece un mensaje en el LCD que pide la confirmación del pedido.
Figura 3.12. Mensaje en LCD para confirmar el pedido.
Una vez confirmado el pedido, el LCD nos indica que la orden está siendo
procesada, es decir, que los datos han sido enviados para su respectivo
procesamiento.
Figura 3.13. Mensaje en LCD para indicar que la orden fue enviada.
Figura 3.14. Vista en 3-D del módulo.
Se ha desarrollado una vista en 3-D de cómo se verían los módulos en un
restaurante.
Figura 3.15. Vista en 3-D de los módulos en montados en las mesas (1).
Figura 3.16. Vista en 3-D de los módulos en montados en las mesas (2).
3.2. Programación en ASM.
A continuación se coloca el código fuente de alguno de los principales módulos
(subrutinas), que se necesitan para desarrollar este proyecto, entre éstos tendemos los
encargados de manejar la comunicación I2C y RS232, también encontramos los
módulos que permiten interactuar con el usuario LCD, TECLADO.
Programa “BUS_I2C.INC”
Estas subrutinas permiten realizar las tareas básicas de control del bus serie I2C, por
parte de un sólo microcontrolador maestro.
CBLOCK
I2C_ContadorBits ; Cuenta los bits a transmitir o a recibir.
I2C_DATO ; Dato a transmitir o recibido.
I2C_Flags ; Guarda la información del estado del bus I2C.
ENDC
#DEFINE I2C_UltimoByteLeer I2C_Flags,0
; - (I2C_UltimoByteLeer)=0, NO es el último byte a leer por el maestro.
; - (I2C_UltimoByteLeer)=1, SÍ es el último byte a leer por el maestro.
La definición de las líneas SCL y SDA del bus I2C se puede cambiar según las
necesidades del hardware.
#DEFINE SCL PTOA,3 ; Línea SCL del bus I2C.
#DEFINE SDA PTOA,4 ; Línea SDA del bus I2C.
Subrutina "SDA_Bajo"
SDA_Bajo
bsf STATUS,RP0 ; Configura la línea SDA como salida.
bcf SDA
bcf STATUS,RP0
bcf SDA ; SDA en bajo.
return
Subrutina "SDA_AltaImpedancia"
SDA_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SDA entrada.
bsf SDA ; Lo pone en alta impedancia y, gracias a la
bcf STATUS,RP0 ; Rp de esta línea, se mantiene a nivel alto.
return
Subrutina "SCL_Bajo"
SCL_Bajo
bsf STATUS,RP0
bcf SCL ; Configura la línea SCL como salida.
bcf STATUS,RP0
bcf SCL ; La línea de reloj SCL en bajo.
return
Subrutina "SCL_AltaImpedancia"
SCL_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SCL entrada.
bsf SCL ; Lo pone en alta impedancia y, gracias a la Rp
bcf STATUS,RP0 ; de esta línea, se mantiene a nivel alto.
SCL_EsperaNivelAlto
btfss SCL ; Si algún esclavo mantiene esta línea en bajo
goto SCL_EsperaNivelAlto ; hay que esperar.
return
Subrutina "I2C_EnviaStart"
Esta subrutina envía una condición de Start o inicio.
ENVIASTART
call SDA_AltaImpedancia ; Línea SDA en alto.
call SCL_AltaImpedancia ; Línea SCL en alto.
call Retardo_4micros ; Tiempo tBUF del protocolo.
call SDA_Bajo ; Flanco de bajada de SDA mientras SCL está alto.
call Retardo_4micros ; Tiempo tHD;STA del protocolo.
call SCL_Bajo ; Flanco de bajada del reloj SCL.
call Retardo_4micros
return
Subrutina "I2C_EnviaStop"
; Esta subrutina envía una condición de Stop o parada.
ENVIASTOP
call SDA_Bajo
call SCL_AltaImpedancia ; Flanco de subida de SCL.
call Retardo_4micros ; Tiempo tSU;STO del protocolo.
call SDA_AltaImpedancia ; Flanco de subida de SDA.
call Retardo_4micros ; Tiempo tBUF del protocolo.
return
Subrutina "I2C_EnviaByte"
El microcontrolador maestro transmite un byte por el bus I2C, comenzando por el bit
MSB. El byte a transmitir está cargado previamente en el registro de trabajo W. De la
subrutina ejecutada anteriormente I2C_EnviaStart o esta misma I2C_EnviaByte, la
línea SCL se debe encontrar a nivel bajo al menos durante 5 µs.
I2CENVIA_BYTE
movwf I2C_DATO ; Almacena el byte a transmitir.
movlw 0x08 ; A transmitir 8 bits.
movwf I2C_ContadorBits
I2C_EnviaBit
rlf I2C_DATO,F ; Chequea el bit, y lo lleva al Carry.
btfsc STATUS,C
goto I2C_EnviaUno
I2C_EnviaCero
call SDA_Bajo ; Si es "0" envía un nivel bajo.
goto I2C_FlancoSCL
I2C_EnviaUno
call SDA_AltaImpedancia ; Si es "1" lo activará a alto.
I2C_FlancoSCL
call SCL_AltaImpedancia ; Flanco de subida del SCL.
call Retardo_4micros ; Tiempo tHIGH del protocolo.
call SCL_Bajo ; Termina el semiperiodo positivo del reloj.
call Retardo_4micros ; Tiempo tHD;DAT del protocolo.
decfsz I2C_ContadorBits,F ; Lazo para los ocho bits.
goto I2C_EnviaBit
call SDA_AltaImpedancia ; Libera la línea de datos.
call SCL_AltaImpedancia ; Pulso en alto de reloj para que el esclavo
call Retardo_4micros ; pueda enviar el bit ACK.
call SCL_Bajo
call Retardo_4micros
return
Subrutina "I2C_LeeByte"
El microcontrolador maestro lee un byte desde el esclavo conectado al bus I2C. El
dato recibido se carga en el registro I2C_DATO y lo envía a la subrutina superior a
través del registro W. Se empieza a leer por el bit de mayor peso MSB. De alguna de
las subrutinas ejecutadas anteriormente I2C_EnviaStart, I2C_EnviaByte o esta
misma I2C_LeeByte, la línea SCL lleva en bajo al menos 5 µs.
I2C_LEEBYTE
movlw 0x08 ; A recibir 8 bits.
movwf I2C_ContadorBits
call SDA_AltaImpedancia ; Deja libre la línea de datos.
I2C_LeeBit
call SCL_AltaImpedancia ; Flanco de subida del reloj.
bcf STATUS,C ; En principio supone que es "0".
btfsc SDA ; Lee el bit
bsf STATUS,C ; Si es "1" carga 1 en el Carry.
rlf I2C_DATO,F ; Lo introduce en el registro.
call SCL_Bajo ; Termina el semiperiodo positivo del reloj.
CALL RETARSEG
call Retardo_4micros ; Tiempo tHD;DAT del protocolo.
decfsz I2C_ContadorBits,F ; Lazo para los 8 bits.
goto I2C_LeeBit
Chequea si este es el último byte a leer para enviar o no el bit de reconocimiento
ACK en consecuencia.
btfss I2C_UltimoByteLeer ; Si es el último, no debe enviar
; el bit de reconocimiento ACK.
call SDA_Bajo ; Envía el bit de reconocimiento ACK
; porque todavía no es el último byte a leer.
call SCL_AltaImpedancia ; Pulso en alto del SCL para transmitir el
CALL RETARSEG
call Retardo_4micros ; bit ACK de reconocimiento. Este es HIGH.
call SCL_Bajo ; Pulso de bajada del SCL.
CALL RETARSEG
call Retardo_4micros
movf I2C_DATO,W ; El resultado se manda en el registro de
return ; de trabajo W.
Programa "BUS_I2CSL.INC"
Estas subrutinas permiten realizar las tareas básicas de control del bus serie I2C, por
parte de los microcontroladores esclavos.
CBLOCK
CNTBITS ; Cuenta los bits a transmitir o a recibir.
I2C_DATO ; Dato a transmitir o recibido.
ENDC
La definición de las líneas SCL y SDA del bus I2C se puede cambiar según las
necesidades del hardware.
#DEFINE SCL PTOA,3 ; Línea SCL del bus I2C.
#DEFINE SDA PTOA,4 ; Línea SDA del bus I2C.
Subrutina "SDA_Bajo"
SDA_Bajo
bsf STATUS,RP0 ; Configura la línea SDA como salida.
bcf SDA
bcf STATUS,RP0
bcf SDA ; SDA en bajo.
return
Subrutina "SDA_AltaImpedancia"
SDA_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SDA entrada.
bsf SDA ; Lo pone en alta impedancia y, gracias a la
bcf STATUS,RP0 ; Rp de esta línea, se mantiene a nivel alto.
return
Subrutina "SCL_Bajo"
SCL_Bajo
bsf STATUS,RP0
bcf SCL ; Configura la línea SCL como salida.
bcf STATUS,RP0
bcf SCL ; La línea de reloj SCL en bajo.
return
Subrutina "SCL_AltaImpedancia"
SCL_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SCL entrada.
bsf SCL ; Lo pone en alta impedancia y, gracias a la Rp
bcf STATUS,RP0 ; de esta línea, se mantiene a nivel alto.
SCL_EsperaNivelAlto
btfss SCL ; Si algún esclavo mantiene esta línea en bajo
goto SCL_EsperaNivelAlto ; hay que esperar.
return
Subrutina "I2C_EnviaByte"
El microcontrolador maestro transmite un byte por el bus I2C, comenzando por el bit
MSB. El byte a transmitir debe estar cargado previamente en el registro de trabajo
W. De la subrutina ejecutada anteriormente I2C_EnviaStart o esta misma
I2C_EnviaByte, la línea SCL se debe encontrar a nivel bajo al menos durante 5 µs.
ENVIO_BYTESL
movwf I2C_DATO ; Almacena el byte a transmitir.
movlw 0x08 ; A transmitir 8 bits.
movwf CNTBITS
I2C_EnviaBitS
rlf I2C_DATO,F ; Chequea el bit, y lo lleva al Carry.
btfsc STATUS,C
goto I2C_EnviaUnoS
I2C_EnviaCeroS
call SDA_Bajo ; Si es "0" envía un nivel bajo.
goto I2C_FlancoSCLS
I2C_EnviaUnoS
call SDA_AltaImpedancia ; Si es "1" lo activa en alto.
I2C_FlancoSCLS
btfss SCL
goto I2C_FlancoSCLS
FLANCODOWN
btfsc SCL
goto FLANCODOWN
decfsz CNTBITS,1
goto I2C_EnviaBitS
call SDA_AltaImpedancia
call SCL_AltaImpedancia
return
Subrutina "I2C_LeeByte"
El microcontrolador maestro lee un byte desde el esclavo conectado al bus I2C. El
dato recibido se carga en el registro I2C_DATO y lo envía a la subrutina superior a
través del registro W. Se empieza a leer por el bit de mayor peso MSB. De alguna de
las subrutinas ejecutadas anteriormente I2C_EnviaStart, I2C_EnviaByte o esta
misma I2C_LeeByte, la línea SCL lleva en bajo al menos 5 µs.
LEE_BYTESL
movlw 0x08 ; A recibir 8 bits.
movwf CNTBITS
call SDA_AltaImpedancia ; Deja libre la línea de datos.
I2C_LeeBitS
call SCL_AltaImpedancia ; Flanco de subida del reloj.
bcf STATUS,C ; En principio supone que es "0".
btfsc SDA ; Lee el bit
bsf STATUS,C ; Si es "1" carga 1 en el Carry.
rlf I2C_DATO,F ; Lo introduce en el registro.
WAIT1
btfsc SCL ; Termina el semiperiodo positivo del reloj.
GOTO WAIT1
decfsz CNTBITS,1 ; Lazo para los 8 bits.
goto I2C_LeeBitS
return ; de trabajo W.
Programa "RS232.INC"
Estas subrutinas permiten realizar las tareas básicas de control de la transmisión serie
asíncrona según normas RS-232.
Los parámetros adoptados para la comunicación son los siguientes:
- Velocidad de transmisión de 9600 baudios. La duración de cada bit será 104 µs.
- Un bit de inicio o Start a nivel bajo.
- Dato de 8 bits.
- Sin paridad.
- Dos bits de final o Stop a nivel alto.
El tiempo entre bit y bit debe coincidir con el periodo de la señal leída o enviada.
Como la velocidad de transmisión o recepción es de 9600 baudios, el periodo será:
1/9600 Baudios = 104 µs. Se utilizará pues la subrutina Retardos_100micros.
CBLOCK
RS232_ContadorBits
RS232_DATO
ENDC
#DEFINE RS232_Entrada PTOA,3 ; Línea por la que se reciben los datos.
#DEFINE RS232_Salida PTOA,4 ; Línea por la que se envían los datos.
Subrutina "RS232_Inicializa"
Configura las líneas de salida y entrada del microcontrolador.
INIRS232
bsf STATUS,RP0
bsf RS232_Entrada ; Esta línea se configura como entrada.
bcf RS232_Salida ; Esta línea se configura como salida.
bcf STATUS,RP0
return
Subrutina "RS232_LeeDato”
El microcontrolador lee el dato por la línea de entrada comenzando por el bit de
menor peso. El dato leído se envía finalmente en el registro de trabajo W. El
ordenador parte siempre de un nivel alto, que es el estado que tiene cuando no envía
información. La secuencia utilizada es:
1. Espera que se ejecute el pulso negativo del bit Start o flanco de bajada.
2. Deja pasar un tiempo una y media veces mayor que el periodo de transmisión para
saltarse el bit de Start y lee el primer bit en su mitad.
3. Lee el resto de los bits de datos, esperando un tiempo igual a la duración del
periodo entre lectura y lectura para testearlos en mitad del bit.
Salida: En el registro de trabajo W el byte leído.
RS232_LEEDATO
movlw d'8' ; Número de bits a recibir.
movwf RS232_ContadorBits
RS232_EsperaBitStart
btfsc RS232_Entrada ; Lee la entrada y espera a que sea "0".
goto RS232_EsperaBitStart ; No, pues espera el nivel bajo.
call Retardo_100micros ; El primer bit debe leerlo un tiempo igual a una
call Retardo_50micros ; vez y media el periodo de transmisión.
RS232_LeeBit
bcf STATUS,C ; Ahora lee el pin. En principio supone que es 0.
btfsc RS232_Entrada ; ¿Realmente es cero?
bsf STATUS,C ; No, pues cambia a "1".
rrf RS232_DATO,F ; Introduce el bit en el registro de lectura.
call Retardo_100micros ; Los siguientes bits los lee un periodo más tarde.
decfsz RS232_ContadorBits,F ; Comprueba que es el último bit.
goto RS232_LeeBit ; Si no es el último bit pasa a leer el siguiente.
call Retardo_200micros ; Espera un tiempo igual al los 2 bits de Stop.
movf RS232_DATO,W ; El resultado en el registro W.
return
Subrutinas "RS232_EnviaDato" y "RS232_EnviaNúmero"
El microcontrolador envía un dato por la línea de salida comenzando por el bit de
menor peso. En dato enviado será el que le llegue a través del registro de trabajo W.
1. Envía un "0" durante un tiempo igual al periodo de la velocidad de transmisión.
Este es el bit de "Start".
2. Envía el bit correspondiente:
- Si va a enviar un "0" permanece en bajo durante el periodo correspondiente.
- Si va a escribir un "1" permanece en alto durante el periodo correspondiente.
3. Envía dos bits "1" durante un tiempo igual al período de la velocidad de
transmisión cada uno. Estos son los dos bits de Stop.
Entrada: En (W) el dato a enviar.
RS232_ENVIONUMERO ; Envía el código ASCII de un número.
addlw "0" ; Lo pasa a código ASCII sumándole el
; ASCII del 0.
RS232_ENVIODATO
movwf RS232_DATO ; Guarda el contenido del byte a transmitir.
movlw d'8' ; Este es el número de bits a transmitir.
movwf RS232_ContadorBits
bcf RS232_Salida ; Bit de Start.
call Retardo_100micros
RS232_EnviaBit ; Comienza a enviar datos.
rrf RS232_DATO,F ; Lleva el bit que se quiere enviar al Carry para
btfss STATUS,C ; deducir su valor. ¿Es un "1" el bit a transmitir?
goto RS232_EnviaCero ; No, pues envía un "0".
RS232_EnviaUno
bsf RS232_Salida ; Transmite un "1".
goto RS232_FinEnviaBit
RS232_EnviaCero
bcf RS232_Salida ; Transmite un "0".
RS232_FinEnviaBit
call Retardo_100micros ; Este es el tiempo que estará en alto o bajo.
decfsz RS232_ContadorBits,F ; Comprueba que es el último bit.
goto RS232_EnviaBit ; Como no es el último bit repite la operación.
bsf RS232_Salida ; Envía dos bits de Stop.
call Retardo_200micros
return
Programa "LCD.INC"
Estas subrutinas permiten visualizar los datos enviados a través del
microcontrolador.
CBLOCK
R0E
R13
POINTLCD
VALLCD
ENDC
#DEFINE PINRS PTOB,0
#DEFINE ENABLE PTOB,1
#DEFINE BUSDATOS PTOB ; 4 bits más significativos (b4-b7)
INILCD
movlw 02h
call CONTROL
movlw 28h ; inicio display a 4 bits 2 línea
call CONTROL
movlw 0ch ; sin desplazamiento mensaje fijo (000100<=s)
call CONTROL
movlw 06h ; activo display
call CONTROL
return
Control del lcd para 4 bits de datos
CONTROL
bcf PINRS ; esta rutina genera las señales de control
goto DATO2 ; y entrega el dato correspondiente al módulo
dato BSF PINRS ; utiliza interfaces a 4 bits 2 líneas
DATO2
bsf ENABLE ; Dato A0-A3 b0 y b1 control
movwf R0E
movlw 0FH
andwf BUSDATOS,1
movf R0E,0
andlw 0F0H
iorwf BUSDATOS,1
CALL RETARLCD
bcf ENABLE
CALL RETARLCD
bsf ENABLE
movlw 0FH
andwf BUSDATOS,1
swapf R0E,0
andlw 0F0H
iorwf BUSDATOS,1
CALL RETARLCD
bcf ENABLE
CALL RETARLCD
return
Retardo de cada nibble en el bus de datos
RETARLCD
movlw 0FFH
movwf R13
decre DECFSZ R13,1
goto DECRE
return
Subrutina de visualización de mensajes empleando la directiva "dt" de la tabla de
mensajes1 equivalentes a los primeros 15 mensajes
LCDMEN1
movwf POINTLCD
movlw MENSAJES1
subwf POINTLCD,1
decf POINTLCD,1
CHAR
movf POINTLCD,W
call MENSAJES1 ; nombre del primer bloque de mensajes
movwf VALLCD
movf VALLCD,1
btfsc STATUS,Z
goto FINLCD
call DATO
incf POINTLCD,1
goto CHAR
FINLCD
return
Programa "TECLADO.INC"
Estas subrutinas permiten comandar un teclado matricial por medio del
microcontrolador.
CBLOCK
TECLA
NOTECLA
ENDC
Definición de puertos y bits de dato y control
#DEFINE COL1 PTOB,0
#DEFINE COL2 PTOB,1
#DEFINE COL3 PTOB,2
#DEFINE COL4 PTOB,3 ;sino se utilizase debe mandarse a vcc x hardware
#DEFINE COLUMNAS PTOB
Inicialización del lcd, 4 bits 2 líneas estáticas.
TECLADO
clrf TECLA
incf TECLA,R
movlw 0E0h
movwf COLUMNAS
CH_COL
btfss COL1
goto ANTI
incf TECLA,r
btfss COL2
goto anti
incf TECLA,r
btfss COL3
goto anti
incf TECLA,1
btfss COL4
goto ANTI
incf TECLA,1
ULTIMA
movlw d'17' ; ya verifique las 16 teclas?
subwf TECLA,0
btfsc STATUS,Z
goto NTECLA
bsf STATUS,C
rlf COLUMNAS,1
goto CH_COL
NTECLA
clrf TECLA
goto TECLADO
ANTI
WAIT1
btfss COL1
goto WAIT1
WAIT2
btfss COL2
goto WAIT2
WAIT3
btfss COL3
goto WAIT3
movf TECLA,W
call T_CONV
movwf TECLA
return
3.3. Programación en C#.
Como se ha estado indicando en el transcurso de este proyecto, la programación fué
desarrollada por medio del lenguaje de alto nivel Visual C# 2005 de Microsoft. Esta
versión es la continuación del tan comúnmente conocido “lenguaje C++” que en la
actualidad todavía sigue siendo muy utilizado por su versatilidad. La versión C#
2005 es sólo uno de los componentes de que dispone la suite de Visual Studio 2005
de Microsoft, otros componentes de esta suite como lo son Visual Basic, Visual
Web Developer, Visual C++ o Visual J# son muy utilizados en la actualidad por
permitir desarrollar sistemas enfocados a diseños en la Web (Internet).
A continuación indicaremos alguno de los módulos desarrollados en Visual C# para
la implementación de nuestro proyecto, para un mejor entendimiento primero
explicaremos en breves rasgos su función y luego colocaremos la programación de
los mismos módulos
3.3.1. Pantalla Principal (Formulario Principal).
Básicamente en esta pantalla sólo realizamos llamadas al resto de formularios o
pantallas que son los encargados de hacer los procesos, este formulario ha sido
programado de tal forma que contenga cualquier otro formulario que sea indexado en
el proyecto.
Figura 3.5. Propiedades del formulario principal.
A continuación se puede observar la pantalla principal de nuestro sistema, en esta
podemos abrir múltiples formularios si deseamos realizar más de un proceso a la vez.
Figura 3.6. Formulario principal.
3.3.1.1. Programación del Formulario Principal.
namespace CAFE { public partial class Principal : Form { public Principal() { InitializeComponent(); } private void salirToolStripMenuItem_Click(object sender, EventArgs e) { Close(); } private void acercaDeToolStripMenuItem_Click(object sender, EventArgs e) { Ayuda a = new Ayuda(); a.MdiParent = this; a.Show();
} private void toolStripMenuItem3_Click(object sender, EventArgs e) { Combos c = new Combos(); c.MdiParent = this; c.Show(); } private void toolStripMenuItem1_Click(object sender, EventArgs e) { Menu a = new Menu(); a.MdiParent = this; a.Show(); } private void ordenesToolStripMenuItem_Click(object sender, EventArgs e) { Orden o = new Orden(); o.MdiParent = this; o.Show(); } private void toolStripButton1_Click(object sender, EventArgs e) { Menu a = new Menu(); a.MdiParent = this; a.Show(); } private void toolStripButton2_Click(object sender, EventArgs e) { Orden o= new Orden(); o.MdiParent = this; o.Show(); } private void toolStripButton3_Click(object sender, EventArgs e) { Combos c = new Combos(); c.MdiParent = this; c.Show(); } } }
3.3.2. Pantalla de Ayuda (Formulario Acerca de...).
Este formulario no cumple ninguna función especifica dentro del proceso más que la
de indicar cierta información, no existe ningún tipo de programación en este a
excepción de una instrucción que cierra el mismo por medio de un botón.
Figura 3.7. Formulario (Acerca de)
3.3.3. Pantalla de Menú (Formulario Ingreso de Menú).
En este formulario realizamos el ingreso de los diferentes alimentos (taco,
hamburguesa, pizza, cola, etc.), que conforman nuestro menú, podemos realizar
ingresos, modificaciones y a su vez podemos dar de alta o dar de baja a un
determinado alimento, si en cierto momento decidiéramos ya no incluirlo en nuestro
menú.
Figura 3.8. Formulario Ingreso de Menú.
3.3.3.1. Programación del Formulario Ingreso de Menú
public partial class Menu : Form { public Menu() { InitializeComponent(); } private static DataTable Consulta(string Sql) { string cadenaconexion = "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=CAFEUPS;Data Source=localhost"; SqlConnection Base = new SqlConnection(cadenaconexion); SqlCommand Consulta_tabla = new SqlCommand(Sql, Base); SqlDataAdapter tabla = new SqlDataAdapter(); tabla.SelectCommand = Consulta_tabla; DataTable dataTable1 = new DataTable(); dataTable1.Locale = System.Globalization.CultureInfo.InvariantCulture; tabla.Fill(dataTable1); Base.Close(); return dataTable1; } private void button4_Click(object sender, EventArgs e) { try { if ((textBox5.Text == "")) { MessageBox.Show("Ingrese todos los datos", "Ingreso de Menu"); } else { if (comboBox1.Text =="ACTIVO") { textBox1.Text = "A"; } else if (comboBox1.Text == "INACTIVO") { textBox1.Text = "I"; } string Sql = "INSERT INTO MENU " + "([NOMBRE],[STATUS]) VALUES " + "('" + textBox5.Text.ToUpper() + "','" + textBox1.Text.ToUpper () + "')";
int r = Actualizar(Sql); MessageBox.Show("Se ingresaron " + r.ToString() + "Registros", "Ingreso de Menu");
textBox4.Text = ""; textBox5.Text = ""; dataGridView1.AutoGenerateColumns = true; bindingSource1.DataSource = Consulta("SELECT IDMENU [
Codigo], NOMBRE [ Nombre] " + ",STATUS [Status] FROM dbo.MENU"); dataGridView1.DataSource = bindingSource1; } } catch (System.Exception ex) { MessageBox.Show("No se puede ingresar:" + ex.Message, "Ingreso de Menu"); } } private static int Actualizar(string Sql) { string cadenaconexion = "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=CAFEUPS;Data Source=localhost"; SqlConnection Base = new SqlConnection(cadenaconexion); Base.Open(); SqlCommand Ejecutar = new SqlCommand(Sql, Base); int x = Ejecutar.ExecuteNonQuery(); Base.Close(); return x; } private void button5_Click(object sender, EventArgs e) { try { if (comboBox1.Text == "ACTIVO") { textBox1.Text = "A"; } else if (comboBox1.Text == "INACTIVO") { textBox1.Text = "I"; }
string Sql = "UPDATE MENU SET NOMBRE ='" + textBox5.Text.ToUpper() + "',STATUS='" + textBox1.Text + "' WHERE IDMENU = " + textBox4.Text;
int r = Actualizar(Sql);
if (r > 0) { MessageBox.Show("Se actualizaron " + r.ToString() + "Registros",
"Ingreso de Menu"); textBox4.Text = ""; textBox5.Text = ""; textBox5.Enabled =false; comboBox1.Enabled = false; button5.Enabled = false; dataGridView1.AutoGenerateColumns = true; bindingSource1.DataSource = Consulta("SELECT IDMENU [
Codigo], NOMBRE [ Nombre] " + ",STATUS [Status] FROM dbo.MENU"); dataGridView1.DataSource = bindingSource1; } else MessageBox.Show("No se encontro registro para actualizar", "Ingreso
de Menu"); } catch (System.Exception ex) { MessageBox.Show("No se puede actualizar:" + ex.Message, "Ingreso de
Menu"); } } private void button1_Click_1(object sender, EventArgs e) { Close(); } private void button2_Click(object sender, EventArgs e) { comboBox1.Text = "Escoja Opcion..."; textBox5.Enabled = true; textBox4.Text = ""; button4.Enabled = true; button5.Enabled = false; textBox5.Text = ""; comboBox1.Enabled = true; } private void Menu_Load(object sender, EventArgs e) { dataGridView1.AutoGenerateColumns = true; bindingSource1.DataSource = Consulta("SELECT IDMENU [ Codigo],
NOMBRE [ Nombre] " +
",STATUS [Status] FROM dbo.MENU"); dataGridView1.DataSource = bindingSource1; button4.Enabled = false; button5.Enabled = false; textBox4.Enabled = false; textBox5.Enabled = false; comboBox1.Enabled = false; } private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { textBox4.Text = dataGridView1[0, e.RowIndex].Value.ToString(); textBox5.Text = dataGridView1[1, e.RowIndex].Value.ToString(); textBox1.Text = dataGridView1[2, e.RowIndex].Value.ToString(); if (textBox1.Text == "A") { comboBox1.Text = "Activo"; } else if (textBox1.Text == "I") { comboBox1.Text = "Inactivo"; } textBox4.Enabled = false; textBox5.Enabled = true; button5.Enabled = true; comboBox1.Enabled = true; button4.Enabled = false; } } }
3.3.4. Pantalla de Combos (Formulario Ingreso de Combos).
En este formulario realizamos el ingreso de los diferentes combos, una vez que ya
hayan sido ingresado en nuestro menú (taco, hamburguesa, pizza, cola, etc.),
podemos realizar un sinnúmero de combinaciones posibles para poder poseer una
diversidad en la selección de los combos, también podemos dar de baja a dichos
combos si deseamos cambiarlos por otras combinaciones, sólo podremos tener 10
combos activos a las vez, dado al limitante que existe en la parte física de nuestro
proyecto (módulo que se encuentra en las mesas).
Figura 3.9. Formulario Ingreso de Combo y asignación.
Figura 3.10. Visualización de Orden.
3.3.4.1. Programación del Formulario Ingreso de Combo. public partial class Combos : Form { public Combos() { InitializeComponent(); } private static DataTable Consulta(string Sql) { string cadenaconexion = "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=CAFEUPS;Data Source=localhost";
SqlConnection Base = new SqlConnection(cadenaconexion); SqlCommand Consulta_tabla = new SqlCommand(Sql, Base); SqlDataAdapter tabla = new SqlDataAdapter(); tabla.SelectCommand = Consulta_tabla; DataTable dataTable1 = new DataTable(); dataTable1.Locale =
System.Globalization.CultureInfo.InvariantCulture; tabla.Fill(dataTable1); Base.Close(); return dataTable1; } private void button4_Click(object sender, EventArgs e) { dataGridView1.AutoGenerateColumns = true; bindingSource1.DataSource = Consulta("SELECT
MENU.IDMENU, MENU.NOMBRE FROM MENU INNER JOIN COMBO ON MENU.IDMENU = COMBO.IDMENU "+
"WHERE COMBO.IDCOMBO = " + textBox4.Text); dataGridView1.DataSource = bindingSource1; } private void Combos_Load(object sender, EventArgs e) { textBox4.Enabled = false; textBox5.Enabled = false; comboBox1.Enabled = false; button2.Enabled = false; } private void button3_Click_1(object sender, EventArgs e) { dataGridView2.AutoGenerateColumns = true; bindingSource2.DataSource = Consulta("SELECT IDMENU [
Codigo], NOMBRE [ Nombre] " + "FROM dbo.MENU WHERE STATUS='A' "); dataGridView2.DataSource = bindingSource2; } private void dataGridView2_CellClick(object sender,
DataGridViewCellEventArgs e) { button4.Enabled = true; button5.Enabled = true; textBox4.Text = dataGridView2[0, e.RowIndex].Value.ToString();
textBox5.Text = dataGridView2[1, e.RowIndex].Value.ToString(); } private static int Actualizar(string Sql) { string cadenaconexion = "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=CAFEUPS;Data
Source=localhost"; SqlConnection Base = new SqlConnection(cadenaconexion); Base.Open(); SqlCommand Ejecutar = new SqlCommand(Sql, Base); int x = Ejecutar.ExecuteNonQuery(); Base.Close(); return x; } private void button4_Click_1(object sender, EventArgs e) { try { string Sql = "INSERT INTO COMBO " + "([IDCOMBO],[IDMENU],[STATUS]) VALUES " + "('" + textBox1.Text + "','" + textBox4.Text +
"','" + 'A' + "')"; int r = Actualizar(Sql); dataGridView1.AutoGenerateColumns = true; bindingSource1.DataSource = Consulta("SELECT MENU.NOMBRE [Nombre]"+ " FROM dbo.COMBO INNER JOIN dbo.MENU ON COMBO.IDMENU = "+ "MENU.IDMENU WHERE COMBO.IDCOMBO= " + textBox1.Text); dataGridView1.DataSource = bindingSource1; comboBox1.Enabled = true; button2.Enabled = true; } catch (System.Exception ex) { MessageBox.Show("No se puede ingresar:" + ex.Message, "Ingreso de Combo"); } } } }
CAPÍTULO IV
ANÁLISIS DE COSTOS
4.1. Preliminares.
Uno de los principales factores que se debe considerar en el momento del desarrollo de un proyecto,
es el costo total de producción, la mano de obra, maquinaria o materiales utilizados para elaboración
de un producto terminal, en base de estos valores podremos determinar de una forma concreta la
factibilidad de dicho producto, es decir si resulta rentable o no, si posee un valor competitivo en
relación con otros productos de similares características.
Para poder determinar el costo total del proyecto, será necesario tomar en cuenta los siguientes
costos: Costos de mano de obra, costos de elementos y materiales y costos de fabricación de las
placas (incluido el diseño).
4.2. Determinación del Costo del Proyecto.
4.2.1. Cálculo de Costo de mano de obra.
Para poder determinar el costo de la mano de obra tomaremos un valor referencial de 0,90 dólares
americanos que se encuentra entre el rango de 0,80 y 1,20 dólares americanos, valores que son
normalmente cobrados por concepto de trabajo por hora.
A continuación se determinará el costo tentativo de la mano de obra, para lo cual se realizará la una
tabla en la cual constará cada uno de los rubros de mano de obra, el numero de horas y su valor total.
COSTO DE MANO DE OBRA Rubro Tiempo (h) Valor/Hora V. Total Código para PIC 60 1,00 60,00 Código fuente C# 80 2,00 160,0 Diseño de placas 10 1,00 10,00 Armado de placas 4 0,90 3,60 Montaje y pruebas 20 0,90 18,00 TOTAL $ 251,60
Tabla 4.1 Costo de mano de obra
Fuente: Autores
El costo total de mano de obra es de 80,10 dólares americanos, este es un valor tentativo en base al
número de horas que se necesitaron para el desarrollo de este proyecto.
4.2.2. Cálculo de Costo de elementos y materiales.
A continuación se determinará el costo de los materiales y elemento utilizados, para lo cual
detallaremos de forma separada los componentes que fueron utilizados para cada uno de los
módulos (Maestro y Esclavo), se realizará una lista de materiales, su valor unitario y valor total.
COSTO DE ELEMENTOS Y MATERIALES MÓDULO MAESTRO
Elemento Cant. V. Unitario V. Total PIC 16F871 1 10,00 10,00 Cristal 4 MHZ 1 0,70 0,70 Conectores hembra DB9 3 0,60 1,80 Resistencia 1K 6 0,05 0,30 Zócalo de 40 pines 1 0,20 0,20 Capacitares 5 0,10 0,50 Max232 1 2,50 2,50 Fuente de Voltaje de 5 V 1 10,00 10,00 Otros 1 10,00 10,00 Total $ 36,00
Tabla 4.2.a. Costo de materiales (módulo maestro)
Fuente: Autores
COSTO DE ELEMENTOS Y MATERIALES MÓDULO ESCLAVO
Elemento Cant. V. Unitario V. Total PIC 16F871 2 10,00 20,00 Módulo LCD 2X20 1 17,00 17,00 Cristal 4 MHZ 2 0,70 1,40 Pulsadores 12 0,35 4,20 Displays 7 segmentos 10 0,80 8,00 Conectores hembra DB9 1 0,60 0,60 Resistencia 2,7K 10 0,05 0,50 Resistencia 1K 6 0,05 0,30 Resistencia 100 7 0,05 0,35 Zócalo de 40 pines 2 0,20 0,40 Integrado 74LS48 1 0,60 0,60 Transistores 2N3904 10 0,30 3,00 Potenciómetro 5 K 1 0,40 0,40 Fuente de Voltaje de 5 V 1 10,00 10,00 Módulo 1 40,00 40,00 Otros 1 2,50 2,50 Total $ 109,25
Tabla 4.2.b. Costo de materiales (módulo esclavo)
Fuente: Autores
El costo total entre un módulo maestro y el esclavo asciende a 135,25 dólares americanos. Para
nuestro caso debemos adicionalmente sumar el valor de otro esclavo para obtener el valor real de
nuestra implementación, por lo cual el valor seria 135,25 (valor de un maestro y un esclavo) + 99,25
(valor de un esclavo) = 234,50. Debemos resaltar que en este listado existen elementos que no se
venden en la ciudad de guayaquil como los microcontroladores, Max232 y los LCD’s, el valor
indicado de estos elementos fueron en base a una cotización obtenida por medio la empresa
“CORPOIMPEX S.A.”, la misma que tiene sus instalaciones en la ciudad de cuenca, y de donde fué
necesario traerlos, lo cual implicó un valor adicional por motivo de envió de dichos elementos,
tomado en cuenta en el ítem “otros” del módulo del maestro. Los elementos que fueron comprados
en la ciudad de Guayaquil fueron cotizados en “PARCOMEL”, ubicado en Boyaca # 903 y Junín.
4.2.3. Cálculo de Costo de fabricación de tarjetas.
Para determinar el costo total de la fabricación de tarjetas necesitaremos tomar en cuenta dos valores,
el costo por el diseño de la tarjeta, este se realiza en la computadora por medio de un software
especializado “PROTEL”, que permite desarrollar este tipo de placas. El segundo valor que tenemos
que tomar en cuenta es el costo por fabricación de la placa, es decir, es el valor que nos cobrarán por
la elaboración del diseño que hemos desarrollado. El costo por fabricación lo detallaremos en la
siguiente tabla 5.3, el costo por el diseño ya fué tomado en cuenta dentro de la tabla 5.1., que
especificaba costos por la mano de obra.
COSTO POR FABRICACIÓN DE TARJETAS Elemento Cantidad V. Unitario V. Total Tarjeta esclavo 2 17,00 34,00 Tarjeta maestro 1 15,00 15,00 TOTAL $ 49,00
Tabla 4.3. Costo por fabricación de tarjetas
Fuente: Autores
4.2.4. Costo final del proyecto.
Una vez calculado todos los costos que se han dado en el desarrollo del presente capítulo, podemos
proceder a obtener el costo final del proyecto, antes de esto necesitamos sumar el resultado que
obtuvimos de el costo por mano de obra, costo de elementos y materiales y el costo de fabricación de
tarjetas.
Costo Parcial = Costo mano obra + Costo materiales + Costo fabricación de tarjetas.
Costo Parcial = $ 251,60 + $ 254,50 + $ 49,00
Costo Parcial = $ 555,10
Costo Final = Costo Parcial + 15 % (Costo Parcial).
Costo Final = $ 555,10 + $ 83,26
Costo Final = $ 638,36
CONCLUSIONES Y RECOMENDACIONES
Conclusiones.
Durante el desarrollo del proyecto se trata de simplificar al máximo las líneas de
programación del programa del PIC, ya que al tener demasiadas líneas de código se
pierde una de sus mayores ventajas que es su simplicidad y su forma básica de
programación.
Se prefiere utilizar la comunicación serial I²C debido a que utiliza dos hilos, el
primero es utilizado tanto para enviar como para recibir datos, y el segundo hilo tiene
la función de señal de reloj, mientras que la comunicación serial asíncrona RS232,
sólo utiliza un solo hilo para transmitir los datos y el otro es sólo para recibirlos. El
problema que tiene éste tipo de comunicación (RS232), en la práctica, es que no se
puede interconectar más de dos dispositivos, dado que se podría dar el caso de que
ambos estén intentando transmitir y que cada uno posea un estado diferente (uno y
cero lógico) provocando un corto-circuito.
La flexibilidad del proyecto es muy amplia. Se puede aplicar en varios tipos de
escenarios con diferentes opciones, por ejemplo: La comunicación entre los módulos
y el CPU maestro puede ser realizada utilizando Radio-frecuencia, lo que elimina el
cableado de las mesas; se puede también editar los mensajes mostrados en el display
de acuerdo a la conveniencia del cliente; la presentación del panel frontal puede ser
reemplazado según el motivo de la decoración del establecimiento; etc.
Recomendaciones.
Durante desarrollo de nuestro proyecto pudimos recopilar ciertas dudas y a la ves
recomendación que podrían ser implementadas posteriormente para logra un mejor
desempeño en este sistemas, a continuación indicaremos las más importantes de
ellas.
Una de las desventajas que encontramos en el momento de realizar la
implementación de nuestro sistema fue la visualización en los LCD’s dado que estos
solo eran de 2 líneas, y no permitían tener un optima visualización de la información,
sería recomendable cambiar estos elementos por LCD’s de aunque sea cuatro líneas
de visualización para que se pueda tener un mejor muestreo de los mensajes.
A pesar de que el programa que se encuentra en el ordenador fue desarrollado para
realizar el control del sistema y que cumple con todas las especificaciones necesarias,
es correcto recalcar que nuestro conocimiento en este lenguaje de programación
(Visual C#), es todavía muy básico y que no lo conocemos a profundidad, si
quisiéramos mejorar este sistema sería recomendable asesorarse con un programador
que maneje este lenguaje con el fin de mejorar el desempeño del mismo, o a su
defecto necesitaríamos desarrollar el mismo programa de control en algún lenguaje
de programación que sepamos manejar mejor como por ejemplo Visual Basic.
El diseño de nuestro menú de combos esta basado en el teclado matricial de cuatro
filas y 3 columnas, si fuera necesario diseñar un menú con mas teclas necesitaríamos
realizar algunos cambios en la librería que controla el teclado, en el programa que
esta en el ordenador, el cual solo acepta hasta diez combos a la vez y lógicamente
también deberíamos realizar un cambio en el programa que comanda el pic esclavo
principal.
SIGLAS
PIC – Pheripheral Interface Controller (Controlador de Interfaz Periférico). Los PIC
son una familia de microcontroladores tipo RISC fabricados por Microchip
Technology Inc. y derivados del PIC1650, originalmente desarrollado por la división
de microelectrónica de General Instruments.
RISC – Reduced Instruction Set Computer (Computadora con Conjunto de
Instrucciones Reducido). Arquitectura computacional, tipo de microondas que se
caracteriza por tener instrucciones de tamaño fijo presentadas en un reducido número
de formatos. Sólo las instrucciones de carga y almacenamiento acceden a la memoria
por datos. Estos procesadores suelen disponer de muchos registros de propósito
general.
LCD – Liquid Crystal Display (Pantalla de Cristal Líquido). Se trata de un sistema
eléctrico de presentación de datos formado por 2 capas conductoras transparentes y
en medio un material especial cristalino (cristal líquido) que tienen la capacidad de
orientar la luz a su paso.
SQL – Structured Query Language (Lenguaje de Consulta Estructurado). Es un
lenguaje declarativo de acceso a bases de datos relacionales que permite especificar
diversos tipos de operaciones sobre las mismas. Una de sus características es el
manejo del álgebra y el cálculo relacional permitiendo lanzar consultas con el fin de
recuperar información de interés de una base de datos, de una forma sencilla. Es un
lenguaje de cuarta generación (4GL).
CPU – Central Processing Unit (Unidad Central de Proceso). También llamado
procesador, es el componente en una computadora digital que interpreta las
instrucciones y procesa los datos contenidos en los programas de computadora. Los
CPU proporcionan la característica fundamental de la computadora digital, la
programabilidad, y son uno de los componentes necesarios encontrados en los
ordenadores o computadores de cualquier tiempo, junto con el almacenamiento
primario y las facilidades de entrada/salida. Es conocido como microprocesador el
CPU que es manufacturado con circuitos integrados. Hoy en día, el término “CPU”
es aplicado usualmente a algún tipo de microprocesador.
RAM – Random Access Memory (Memoria de acceso aleatorio). Se trata de una
memoria de semiconductor en la que se puede tanto leer como escribir información.
Es una memoria volátil, es decir, pierde su contenido al desconectar la energía
eléctrica. Se utiliza normalmente como memoria temporal para almacenar resultados
intermedios y datos similares no permanentes.
ROM – Read-Only Memory (Memoria de sólo lectura). Una memoria de
semiconductor destinada a ser leída y no destructible, es decir, que no se puede
escribir sobre ella y que conserva intacta la información almacenada, incluso en el
caso de que se interrumpa la corriente (memoria no volátil). La ROM suele
almacenar la configuración del sistema o el programa de arranque de la computadora.
PROM – Programmable Read-Only Memory (ROM programable). Es una memoria
digital donde el valor de cada bit depende del estado de un fusible (o anti-fusible),
que puede ser quemado una sola vez. Por esto la memoria puede ser programada una
sola vez a través de un dispositivo especial, un programador PROM. Estas memorias
son utilizadas para grabar datos permanentes en cantidades menores a las ROMs, o
cuando los datos deben cambiar en muchos o todos los casos.
EPROM – Eraseable Programmable Read-Only Memory (ROM borrable
programable). Es un tipo de chip de memoria ROM que retiene los datos cuando la
fuente de energía se apaga. En otras palabras, es no volátil. Se programan mediante
un dispositivo electrónico que proporciona voltajes superiores a los normalmente
utilizados en los circuitos electrónicos. Una vez programada, una EPROM se puede
borrar solamente mediante exposición a una fuerte luz ultravioleta. Las EPROM se
reconocen fácilmente por una ventana transparente en la parte alta del encapsulado, a
través de la cual se puede ver el chip de silicio y que admite la luz ultravioleta
durante el borrado.
EEPROM – Electrically-Eraseable Programmable Read-Only Memory (ROM
Programable y Borrable Eléctricamente). Es un tipo de memoria ROM que puede ser
programado, borrado y reprogramado eléctricamente. Aunque una EEPROM puede
ser leída un número ilimitado de veces, sólo puede ser borrada y reprogramada entre
100.000 y 1’000.000 de veces.
CMOS – Complementary Metal Oxide Semiconductor (Metal Óxido Semiconductor
Complementario). Es una tecnología utilizada para crear circuitos integrados, como
pueden ser compuertas lógicas, contadores, etc. Consiste básicamente en dos
transistores, uno PFET y otro NFET. De esta configuración resulta el nombre.
PWM – Pulse-Width Modulation (Modulación por ancho de pulsos). Es una técnica
de modulación en la que se modifica el ciclo de trabajo de una señal periódica (por
ejemplo sinusoidal o cuadrada) para portar información.
UART – Universal Asynchronous Receiver-Transmitter (Transmisor-Receptor
Asíncrono Universal). Se trata de un componente que utiliza ciertos sistemas
digitales basados en microprocesador, para convertir los datos en paralelo, como los
manda la CPU, en serie, con el fin de comunicarse con otro sistema externo.
También realiza el proceso contrario, esto es, convierte los datos serie, recibidos de
un sistema externo, en paralelo para ser procesados por la CPU.
USB – Universal Serial Bus (Bus Serie Universal). El estándar incluye la
transmisión de energía eléctrica al dispositivo conectado. Algunos dispositivos
requieren una potencia mínima, así que se pueden conectar varios sin necesitar
fuentes de alimentación extra. La mayoría de los concentradores incluyen fuentes de
alimentación que brindan energía a los dispositivos conectados a ellos, pero algunos
dispositivos consumen tanta energía que necesitan su propia fuente de alimentación.
Los concentradores con fuente de alimentación pueden proporcionarle corriente
eléctrica a otros dispositivos sin quitarle corriente al resto de la conexión (dentro de
ciertos límites).
LED - Light-Emitting Diode (Diodo emisor de luz). Es un dispositivo semiconductor
(diodo) que emite luz policromática, es decir, con diferentes longitudes de onda,
cuando se polariza en directa y es atravesado por la corriente eléctrica. El color
depende del material semiconductor empleado en la construcción del diodo,
pudiendo variar desde el ultravioleta, pasando por el espectro de luz visible, hasta el
infrarojo, recibiendo éstos últimos la denominación de IRED (Infra-Red Emitting
Diode).
IEEE - The Institute of Electrical and Electronics Engineers (El Instituto de
Ingenieros Eléctricos y Electrónicos). Es una asociación técnico-profesional mundial
dedicada a la estandarización, entre otras cosas. Es la mayor asociación internacional
sin fines de lucro formada por profesionales de las nuevas tecnologías, como
ingenieros eléctricos, ingenieros en electrónica, científicos de la computación e
ingenieros en telecomunicación.
Su creación se remonta al año 1884, contando entre sus fundadores a personalidades
de la talla de Thomas Alva Edison, Alexander Graham Bell y Franklin Leonard
Pope. En 1963 adoptó el nombre de IEEE al fusionarse asociaciones como el AIEE
(American Institute of Electrical Engineers) y el IRE (Institute of Radio Engineers).
ASCII - American Standard Code for Information Interchange (Código
Estadounidense Estándar para el Intercambio de Información). Es un código de
caracteres basado en el alfabeto latino tal como se usa en inglés moderno y en otras
lenguas occidentales. Fue creado en 1963 por el Comité Estadounidense de
Estándares (ASA, conocido desde 1969 como el Instituto Estadounidense de
Estándares Nacionales, o ANSI) como una refundición o evolución de los conjuntos
de códigos utilizados entonces en telegrafía. Más tarde, en 1967, se incluyeron las
minúsculas, y se redefinieron algunos códigos de control para formar el código
conocido como US-ASCII.
CCITT - Consultative Committee for International Telegraphy and Telephony
(Comité Consultivo Internacional Telegráfico y Telefónico). Antiguo nombre del
comité de normalización de las telecomunicaciones dentro de la UIT (Unión
Internacional de Telecomunicaciones) ahora conocido como UIT-T.
Bibliografía y Direcciones Electrónicas.
I²C
• http://www.mcc-us.com
MCC – Micro Computer Control - Small Area Network Specialists
• http://www.comunidadelectronicos.com/articulos/i2c.htm
• http://www.robot-electronics.co.uk/htm/using_the_i2c_bus.htm
RS232
• http://www.depeca.uah.es/alcabot/seminario2006/Trabajos/JoseManuelMurci
aBarba.pdf
• http://www.euskalnet.net/shizuka/rs232.htm
• http://www.i-micro.com
Tutorial de Protocolo RS232 • http://www.iua.upf.es/~jlozano/interfaces/interfaces6.html
• http://pinouts.ws/db9-rs232-pinout.html
MAX232
• http://www.geocities.com/alva_cesar/rs232/max232.html
Comunicar la HP48 con un PIC16F84
• http://www.ortodoxism.ro/datasheets/texasinstruments/max232.pdf
• http://www.pablin.com.ar/electron/circuito/mc/ttl232/
Conversor RS232 a TTL sin MAX232
• http://robots-argentina.com.ar/Comunicacion_max232.htm
• http://www.x-robotics.com/hardware.htm
ENSAMBLADOR
• http://www.monografias.com/trabajos14/lenguensambla/lenguensambla.shtml
• http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_lenguaje_ensamblado
r/Primeros_conceptos
• http://www.electronicafacil.net/tutoriales/tutorial180.html
MPLAB
• http://micropic.wordpress.com/2007/01/22/mplab/
• http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nod
eId=1406&dDocName=en023073
ANEXOS
Anexo A
PIC16F870/871
Microcontrolador CMOS FLASH de 8 bits de 28/40 pines
Características del microcontrolador:
• RISC CPU de alto rendimiento.
• Sólo 35 instrucciones de palabras simples de aprender.
• Todas las instrucciones son de ciclos simples excepto por las ramas de
programa que son de dos ciclos.
• Velocidad de operación: DC – 20 MHz entrada de reloj.
DC – 200 ns ciclo de instrucción.
• 2K x 14 palabras de Memoria FLASH de Programa.
128 x 8 bytes de Memoria de Datos (RAM).
64 x 8 bytes of Memoria de Datos EEPROM.
• Salidas compatibles con el PIC16CXXX dispositivos de 28 y 40 pines.
• Capacidad de interrupción (hasta 11 fuentes).
• Ocho niveles de apilado de hardware.
• Modos de direccionamiento Directo, indirecto y relativo.
• Reset de Encendido (POR – Power-on Reset).
• Temporizador de Energizado (PWRT – Power-up Timer) y Temporizador de
Inicio del Oscilador (OST – Oscillator Start-up Timer).
• Temporizador de Watchdog (WDT) con su propio oscilador RC en el chip
para operación confiable.
• Protección de código programable.
• Modo SLEEP para ahorro de energía.
• Opciones de oscilador seleccionable.
• Tecnología de alta velocidad y de bajo poder de la CMOS FLASH/EEPROM.
• Diseño completamente fijo.
• Programación Serial del circuito (ICSP – In-circuit Serial Programming) vía 2
pines.
• Capacidad de programación Serial sencilla en el circuito de 5V.
• Eliminación de errores en el circuito vía dos pines.
• Acceso de lectura/escritura del procesador para programar la memoria.
• Amplio rango de voltaje de operación: 2.0V a 5.5V.
• Alta fuente de corriente: 25mA.
• Rangos de temperatura comercial e industrial.
• Bajo consumo de potencia:
- < 1.6 mA typical @ 5V, 4 MHz
- 20 µA typical @ 3V, 32 kHz
- < 1 µA typical standby current
Características generales de PIC16F870/871
Fuente: Pagina Web
http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf
Diagrama de Pines
Diagrama de los pines del PIC16F871
Fuente: Pagina Web
http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf
Mapa de archivos de registros.
Fuente: Pagina Web
http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf
Anexo B
MAX232.
El circuito integrado MAX232 cambia los niveles TTL a los del estándar RS232
cuando se hace una transmisión, y cambia los niveles RS232 a TTL cuando se tiene
una recepción. El circuito típico se muestra en la siguiente figura:
Terminales:
Observa que se indican las terminales que deben ir conectadas al PIC. Además, en el
otro extremo se tiene la conexión con un DB9-macho, el cual se conecta al cable de
la HP48G (con el que cargas tus programas).
Circuito integrado para conversión de niveles
Descripción
El Max232 es un circuito integrado que convierte los niveles de las líneas de un
puerto serie RS232 a niveles TTL y viceversa. Lo interesante es que sólo necesita
una alimentación de 5V, ya que genera internamente algunas tensiones que son
necesarias para el estándar RS232. Otros integrados que manejan las líneas RS232
requieren dos voltajes, +12V y -12V.
El MAX232 soluciona la conexión necesaria para lograr comunicación entre el
puerto serie de una PC y cualquier otro circuito con funcionamiento en base a señales
de nivel TTL/CMOS.
El MAX232 dispone internamente de 4 conversores, 2 de niveles TTL al bus
Standard rs232 y viceversa, para comunicación serie como los usados en los
ordenadores y que ahora están en desuso, el Com1 y Com2.
Funcionamiento.
El circuito integrado lleva internamente 2 conversores de nivel de TTL a rs232 y
otros 2 de RS232 a TTL con lo que en total podremos manejar 4 señales del puerto
serie del PC, por lo general las más usadas son; TX, RX, RTS, CTS, estas dos
ultimas son las usadas para el protocolo handshaking pero no es imprescindible su
uso. Para que el max232 funcione correctamente deberemos de poner unos
condensadores externos, todo esto lo podemos ver en la siguiente figura en la que
sólo se han cableado las líneas TX y RX que son las más usualmente usadas para casi
cualquier aplicación.
TX es la señal de transmisión de datos, RX es la de recepción, y RTS y CTS se
utilizan para establecer el protocolo para el envío y recepción de los datos.
Este integrado es usado para comunicar un microcontrolador o sistema digital con un
PC o sistema basado en el bus serie RS232.
Conversor RS232 a TTL sin MAX232.
El método más comúnmente usado para realizar una conexión entre un PIC y un PC
es utilizando un circuito en base del MAX232 en conjunto con cinco capacitares
más. A continuación propondremos un circuito que esta basado en base de
capacitares y resistencias que es capaz de cumplir con las mismas características del
circuito anteriormente mencionado.
El circuito de arriba utiliza la propia corriente del puerto COM de la PC para generar
los símbolos del RS232. Los pines marcados como TxD, RxD y Gnd corresponden al
conector RS232 de la PC (ver conexionado) mientras que los pines marcados como
RD y TD van directamente a microcontrolador. Podemos observar el pinout de los
transistores.
Este tipo de interface es muy vista en mouses o elementos de control de punteo en
PC. Los puntos de alimentación son de 5V (los mismos que del micro).
Anexo C
MPLAB
MLAB es una herramienta para escribir y desarrollar código en lenguaje
ensamblador para los microcontroladores PIC. MPLAB incorpora todas las
herramientas necesarias para la realización de cualquier proyecto, ya que además de
un editor de textos cuenta con un simulador en el que se puede ejecutar el código
paso a paso para ver así su evolución y el estado en el que se encuentran sus registros
en cada momento.
MPLAB es un software gratuito que se encuentra disponible en la página de
Microchip, la versión actual (al momento de escribir estas palabras) es la 7.51 la cual
puede ser descargada desde el sitio del fabricante “www.microchip.com”. Para la
realización de este proyecto se utilizó la versión 7.0.
Una vez instalado podremos comenzar a trabajar, para eso crearemos un nuevo
proyecto utilizando el Wizard de MPLAB que se encuentra en el menú Project -
> Project Wizard, al hacerlo aparecerá la siguiente pantalla.
Pantalla de Bienvenida de MPLAB
Hacemos click en Siguiente, luego se mostrará una ventana donde debemos
escoger el PIC que se vaya a usar, en la lista que aparece seleccionamos
PIC16F871A y damos click en Siguiente.
El siguiente paso es definir el programa de lenguaje que será usado. En nuestro caso
el lenguaje es Ensamblador así que seleccionamos la opción MPASM Assembler.
Luego tenemos que darle un nombre al proyecto y escoger el directorio en el que se
guardará. Es recomendable que la ruta de la carpeta donde se guarda el proyecto no
sea muy larga ya que al compilarlo MPLAB marca un error, es por eso que en
el ejemplo la ruta escogida se encuentra cerca de la raíz del disco duro, así que se
recomienda crear una carpeta directamente en el disco “C:\” o en cualquiera que se
use, pero que sea la raíz del disco.
Una vez dado el nombre al proyecto al hacer click en Siguiente se abrirá una nueva
ventana que nos pedirá agregar archivos existentes al proyecto, como aún no hemos
escrito ningún archivo simplemente damos click en Siguiente y para terminar en la
última ventana hacemos click en Finalizar.
Una vez creado el proyecto es hora de crear un archivo y empezar a escribir el
código. Lo que hacemos es crear un nuevo archivo y guardarlo con extensión .asm en
la carpeta donde tenemos nuestro proyecto, para crear un archivo damos click en File
-> New, después y antes de escribir en el archivo hacemos click en File -> Save As.
En la ventana que se abra le damos un nombre a nuestro archivo y nos aseguramos
de que el tipo de archivo seleccionado sea ensamblador.
Pantallas para crear un archivo .asm
Ahora el archivo creado tiene extensión .asm, pero para el proyecto eso no nos sirve,
tenemos que agregar el archivo al proyecto y después comenzar a trabajar en el así
que en la ventana del proyecto hacemos click derecho en Source Files y después
seleccionamos Add File.
Posteriormente se abrirá una ventana donde debemos seleccionar el archivo que
queremos agregar al proyecto. Por defecto se abrirá la carpeta del proyecto que
acabamos de crear así que seleccionamos el archivo (en este caso led.asm) y
hacemos click en Abrir. Hecho eso la ventana del proyecto debe verse así:
Ahora si podemos escribir nuestro código en el archivo led.asm y todos los cambios
que hagamos en este se verán reflejados en nuestro proyecto. Escribamos un código
sencillo. Un programa que solamente encienda un led
conectado al pin 17 del microcontrolador, lo que sería el bit 0 del
puerto A. El código sería el siguiente:
Una vez escrito el código podemos compilar el programa, con esto se genera el
archivo.hex con el que podremos grabar el PIC. Para compilar el programa
podemos usar el menú Project - Build All o usar la combinación Ctrl + F10.
El archivo HEX generado se encuentra en el mismo directorio que el proyecto y lleva
el mismo nombre que el archivo con el código, en este caso sería led.hex.
Anexo D
LENGUAJE ENSAMBLADOR
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir
programas específicos, y constituye la representación más directa del código
máquina específico para cada arquitectura de computadoras legible por un
programador.
Fué usado ampliamente en el pasado para el desarrollo de software, pero actualmente
sólo se utiliza en contadas ocasiones, especialmente cuando se requiere la
manipulación directa del hardware o se pretenden rendimientos inusuales de los
equipos.
El lenguaje ensamblador es un lenguaje de programación que es una traducción
directa del código de máquina (Éste código es interpretado por el microprocesador),
para que pueda ser entendible por los seres humanos, por lo tanto es un lenguaje de
bajo nivel. El lenguaje ensamblador permite una optimización que no se consigue
con lenguajes de medio y alto nivel. Permite la creación de programas muy rápidos y
muy pequeños, además se tiene un control que no se consigue con un lenguaje de
alto nivel.
La importancia del lenguaje ensamblador radica principalmente que se trabaja
directamente con el microprocesador; por lo cual se debe de conocer el
funcionamiento interno de éste, tiene la ventaja de que en él se puede realizar
cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar.
Otro punto sería que los programas en ensamblador ocupan menos espacio en
memoria.
Ventajas y desventajas del Lenguaje Ensamblador.
Ventajas:
• Velocidad. Como trabaja directamente con el microprocesador al ejecutar un
programa, pues como este lenguaje es el más cercano a la máquina la
computadora lo procesa más rápido.
• Eficiencia de tamaño. Un programa en ensamblador no ocupa mucho
espacio en memoria porque no tiene que cargan librerías y demás como son
los lenguajes de alto nivel.
• Flexibilidad. Es flexible porque todo lo que puede hacerse con una máquina,
puede hacerse en el lenguaje ensamblador de esta máquina; los lenguajes de
alto nivel tienen en una u otra forma limitante para explotar al máximo
recursos de la máquina. O sea que en lenguaje ensamblador se pueden hacer
tareas específicas que en un lenguaje de alto nivel no se pueden llevar acabo
porque tienen ciertas limitantes que no se lo permiten
Desventajas:
• Tiempo de Programación. Como es un lenguaje de bajo nivel requiere más
instrucciones para realizar el mismo proceso, en comparación con un lenguaje
de alto nivel. Por otro lado, requiere de más cuidado por parte del
programador, pues es propenso a que los errores de lógica se reflejen más
fuertemente en la ejecución.
• Programas (fuentes grandes). Por las mismas razones que aumenta el
tiempo, crecen los programas fuentes; simplemente requerimos más
instrucciones primitivas para describir procesos equivalentes. Esto es una
desventaja porque dificulta el mantenimiento de los programas, y nuevamente
reduce la productividad de los programadores.
• Peligro de afectar recursos inesperadamente. Que todo error que podamos
cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la
máquina, programar en este lenguaje lo más común que pueda pasar es que la
máquina se bloquee o se re-inicialice. Porque con este lenguaje es
perfectamente posible (y sencillo) realizar secuencias de instrucciones
inválidas, que normalmente no aparecen al usar un lenguaje de alto nivel.
• Falta de portabilidad. Porque para cada máquina existe un lenguaje
ensamblador; por ello, evidentemente no es una selección apropiada de
lenguaje cuando deseamos codificar en una máquina y luego llevar los
programas a otros sistemas operativos o modelos de computadoras.
Juegos instrucciones PIC.
Nemónicos Operandos Descripción Ciclos Flags ADDWF f,d Suma W y f 1 C, DC, Z ANDWF f,d AND W con f 1 Z CLRF f Borra f 1 Z CLRW --- Borra W 1 Z COMF f,d Complementa f 1 Z DECF f,d Decrementa f 1 Z DECFSZ f,d Decrementa f, si es 0 salta 1 (2) Ninguno INCF f,d Incrementa f 1 Z INCFSZ f,d Incrementa f, si es 0 salta 1 Ninguno IORWF f,d OR entre W y f 1 Z MOVF f,d Mueve f 1 Z MOVWF f Mueve W a f 1 Ninguno NOP --- No opera 1 Ninguno RLF f,d Rota f a la izqda. a través del carry 1 C RRF f,d Rota f a la dcha. a través del carry 1 C SUBWF f,d Resta a f el reg. W 1 C, DC, Z SWAPF f,d Intercambia f 1 Ninguno XORWF f,d XOR de W con f 1 Z BCF f,b Borra bit de f 1 Ninguno BSF f,b Pone a 1 el bit de f 1 Ninguno BTFSC f,b Comprueba un bit de f y salta si es 0 1 (2) Ninguno BTFSS f,b Comprueba un bit de f y salta si es 1 1 (2) Ninguno ANDLW k AND inmediato con W 1 Z CALL k Llamada a subrutina 2 Ninguno CLRWDT k Borra Watchdog 1 TO, PD GOTO k Salto incondicional 2 Ninguno IORLW k OR inmediato con W 1 Z MOVLW k Mueve a W un valor inmediato 1 Ninguno OPTION k Carga el registro OPTION 1 Ninguno RETLW k Retorno y carga de W 2 Ninguno SLEEP --- Pasa a estado de reposo 1 TO, PD TRIS f Carga el registro 1 Ninguno XORLW k OR exclusiva a W 1 Z
Juego de Instrucciones del PIC
Fuente: Pagina Web
http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf