restaurante-pic+c#

March 26, 2018 | Author: IgnacioF.FernandezPaba | Category: Microcontroller, Computer Memory, Read Only Memory, Computer Program, Central Processing Unit


Comments



Description

UNIVERSIDAD POLITÉCNICA SALESIANASEDE GUAYAQUI L FACULTAD DE I NGENI ERÍ AS CARRERA: I NGENI ERÍ A ELECTRÓNI CA Proyect o f i nal previ a a l a obt enci ón del Tí t ul o de: INGENIERO EN ELECTRÓNICA TEMA: SISTEMA DE TOMA DE PEDIDOS EN RESTAURANTES CONTROLADO POR PIC AUTORES: Ronal d Al f redo Dí az Peñaf i el Ri cardo Al f redo Mora Bocca Lui s Davi d Reyes Zambrano DIRECTOR: I ng. Lui s Córdova Ri vadenei ra Guayaqui l , 30 de Juni o del 2007 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 J unio 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 J unio 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 J unio 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. J avier 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 OBJ ETIVOS J USTIFICACIÓN 1) MICROCONTROLADORES 2) COMUNICACIÓN SERIAL 3) MONTAJ E 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 OBJ ETIVOS…………………………………………………………………... XVIII J USTIFICACIÓ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. J erarquí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 – MONTAJ E……………………………………………………. 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) LENGUAJ E 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 I 2 C. 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 I 2 C. • 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 I 2 C, 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 I 2 C 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 I 2 C 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 I 2 C, 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 J 185O. 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 RJ 45 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 I 2 C 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 MENSAJ ES1 subwf POINTLCD,1 decf POINTLCD,1 CHAR movf POINTLCD,W call MENSAJ ES1 ; 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 J OIN 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 J OIN 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 paraelaboració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 seencuentraentre el rango de 0,80 y 1,20 dólares americanos, valores que son normalmente cobrados por concepto detrabajo 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 senecesitaron 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 demateriales (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 seria135,25 (valor de un maestro y un esclavo) +99,25 (valor deun esclavo) =234,50. Debemos resaltar queen este listado existen elementos queno 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 detarjetas necesitaremos tomar en cuentados valores, el costo por el diseño de latarjeta, este se realizaen 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 tabla5.3, el costo por el diseño ya fué tomado en cuentadentro 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 detarjetas Fuente: Autores 4.2.4. Costo final del proyecto. Una vez calculado todos los costos quese 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/J oseManuelMurci 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 J uego de Instrucciones del PIC Fuente: Pagina Web http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf
Copyright © 2024 DOKUMEN.SITE Inc.