restaurante-pic+c#

116
UNIVERSIDAD POLITÉCNICA SALESIANA SEDE GUAYAQUIL FACULTAD DE INGENIERÍAS CARRERA: INGENIERÍA ELECTRÓNICA Proyecto final previa a la obtención del Título de: INGENIERO EN ELECTRÓNICA TEMA: SISTEMA DE TOMA DE PEDIDOS EN RESTAURANTES CONTROLADO POR PIC AUTORES: Ronald Alfredo Díaz Peñafiel Ricardo Alfredo Mora Bocca Luis David Reyes Zambrano DIRECTOR: Ing. Luis Córdova Rivadeneira Guayaquil, 30 de Junio del 2007

Upload: ignacioffernandezpaba

Post on 19-Jan-2016

14 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: restaurante-pic+c#

UNIVERSIDAD POLITÉCNICA SALESIANA

SE DE GUA Y AQ UIL

FA C U LT A D DE IN GE NI ER ÍA S

C A R RE R A: I N GE NI ER ÍA EL ECTR Ó NI C A

Pr o y e c t o f in a l p rev ia a l a ob te nc ión d e l T í tu lo d e:

INGENIERO EN ELECTRÓNICA

TEMA:

SISTEMA DE TOMA DE PEDIDOS EN RESTAURANTES CONTROLADO

POR PIC

AUTORES:

R on a ld A l f r ed o Día z Peñ af i e l

R i ca rd o Al f r ed o M o r a Bo c ca

Lu i s D av id R ey e s Za mb r an o

DIRECTOR:

I ng . Lu i s C ó rdo va R iv ad en e i ra

Gu ay aqu i l , 3 0 d e J un i o d e l 2 00 7

Page 2: restaurante-pic+c#

A U T O R Í A

Las ideas y contenidos expuestos en el presente proyecto, son de exclusiva

responsabilidad de los autores, y el patrimonio intelectual le pertenece a la

Universidad Politécnica Salesiana.

f.......................................................

Ronald Alfredo Díaz Peñafiel

f.......................................................

Ricardo Alfredo Mora Bocca

f.......................................................

Luis David Reyes Zambrano

Guayaquil, 30 de Junio del 2007

Page 3: restaurante-pic+c#

C E R T I F I C O :

Haber revisado el Proyecto Final de Titulación, De los Sres. Ronald Alfredo Díaz

Peñafiel, Ricardo Alfredo Mora Bocca y Luis David Reyes Zambrano, que se ajusta

a las normas establecidas por la Universidad Politécnica Salesiana Sede Guayaquil,

por tanto, autorizo su presentación para los fines legales pertinentes.

………………………………….

Ing. Luís Córdova Rivadeneira

DIRECTOR DEL PROYECTO

Guayaquil, 30 de Junio del 2007

Page 4: restaurante-pic+c#

ACTA DE CESIÓN DE DERECHOS DEL PROYECTO FINAL Conste por el presente documento la cesión de los derechos del Proyecto Final de Titulación, de conformidad con las siguientes cláusulas:

PRIMERA.- El Ing. Luís Córdova R. por sus propios derechos, en calidad de Director de Proyecto Final, Ronald Alfredo Díaz Peñafiel, Ricardo Alfredo Mora Bocca y Luis David Reyes Zambrano., por sus propios derechos, en calidad de autores de Proyecto Final.

SEGUNDA.- UNO.- Los Sres. Ronald Alfredo Díaz Peñafiel, Ricardo Alfredo Mora Bocca y Luis David Reyes Zambrano., realizaron El Proyecto Final titulado “Sistema de toma de pedidos en restaurantes controlado por pic”, para optar por los Títulos de Ingenieros en Electrónica, especialidades en Sistemas Computacionales y Sistemas Industriales en la Universidad Politécnica Salesiana Sede Guayaquil. DOS.- Es política de la Universidad que el Proyecto Final se aplique y materialice en beneficio de la comunidad. TERCERA.- Los comparecientes Ing. Luis Córdova R., en calidad de Director de Proyecto Final, los Sres. Ronald Alfredo Díaz Peñafiel, Ricardo Alfredo Mora Bocca y Luis David Reyes Zambrano., como autores, por medio del presente instrumento, tiene a bien ceder en forma gratuita sus derechos en el Proyecto Final titulado “Sistema de toma de pedidos en restaurantes controlado por pic”, a favor de la Universidad Politécnica Salesiana y, conceden autorización para que la Universidad pueda utilizar el proyecto en su beneficio y/o de la comunidad, sin reserva alguna. CUARTA.- Aceptación.- Las partes declaran que aceptan expresamente todo lo estipulado en la presente cesión de derecho. Para constancia suscriben la presente cesión de derechos, en la ciudad de Guayaquil, a los treinta días de mes de Junio del año dos mil siete.

---------------------------------------- Ing. Luís Córdova Rivadeneira

DIRECTOR DE PROYECTO FINAL

---------------------------------------- ---------------------------------------

Ronald Alfredo Díaz Peñafiel Ricardo Alfredo Mora Bocca AUTOR AUTOR

-------------------------------------- Luis David Reyes Zambrano

AUTOR

Page 5: restaurante-pic+c#

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

Page 6: restaurante-pic+c#

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

Page 7: restaurante-pic+c#

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

Page 8: restaurante-pic+c#

A G R A D E C I M I E N T O

A la Universidad Politécnica Salesiana sede Guayaquil,

que nos permitió formarnos como profesionales, crecer

como personas, y obtener un Título Académico. De

manera muy especial al Ingeniero Luis Córdova y al

Ms. Javier Ortiz R., por su total y desinteresada

colaboración en el transcurso de este trabajo. Además

nuestra gratitud sincera para aquellas personas que de

una u otra manera ayudaron en el desarrollo del

presente trabajo.

Ronald Alfredo Díaz P.

Ricardo Alfredo Mora B.

Luis David Reyes Z.

Page 9: restaurante-pic+c#

CONTENIDO

PORTADA

AUTORÍA

CERTIFICACIÓN

ACTA DE SESIÓN DE DERECHOS

DEDICATORIA

AGRADECIMIENTO

ÍNDICE GENERAL

ÍNDICE DE TABLAS

ÍNDICE DE FIGURAS

INTRODUCCIÓN

RESÚMEN

OBJETIVOS

JUSTIFICACIÓN

1) MICROCONTROLADORES

2) COMUNICACIÓN SERIAL

3) MONTAJE Y PROGRAMACIÓN

4) ANÁLISIS DE COSTOS

CONCLUSIONES Y RECOMENDACIONES

ANÉXOS

Page 10: restaurante-pic+c#

ÍNDICE

AUTORÍA……………………………………………………………………… II

CERTIFICO…………………………………………………………………… III

ACTA DE SESIÓN DE DERECHOS DEL PROYECTO FINAL……………. IV

DEDICATORIA……………………………………………………………….. V

AGRADECIMIENTO…………………………………………………………. VIII

CONTENIDO………………………………………………………………….. IX

INTRODUCCIÓN……………………………………………………………... XV

RESUMEN…………………………………………………………………….. XVI

OBJETIVOS…………………………………………………………………... XVIII

JUSTIFICACIÓN……………………………………………………………… XIX

CAPÍTULO I - MICROCONTROLADORES…………………………………. 1

1.1 Introducción a los Microcontroladores…………………………………….. 1

1.2 Controlador y Microcontrolador…………………………………………… 1

1.3 Aplicaciones de los microcontroladores…………………………………… 3

1.4 El Mercado de los Microcontroladores…………………………………….. 3

1.5 ¿Qué Microcontrolador emplear? ………………………………………….. 4

1.5.1 Aplicación………………………………………………………………… 5

1.6. Recursos comunes en todos los Microcontroladores………………………. 6

1.7. Arquitectura Básica de los Microcontroladores …………………………… 7

1.8. El Procesador o CPU………………………………………………………. 8

1.9. Memoria……………………………………………………………………. 8

1.9.1. ROM……………………………………………………………… 9

1.9.2. OTP………………………………………………………………. 9

1.9.3. EPROM…………………………………………………………… 9

1.9.4. EEPROM…………………………………………………………. 9

1.9.5. Flash………………………………………………………………. 10

1.10. Puertas de Entrada y Salida………………………………………………... 11

1.11. Reloj Principal…………………………………………………………….. 11

1.12. Recursos Especiales……………………………………………………….. 11

1.12.1. Temporizadores o “Timers”……………………………………… 12

1.12.2. Perro Guardián o “Watchdog”…………………………………… 13

Page 11: restaurante-pic+c#

1.12.3. Protección ante fallo de alimentación o “Brownout”.…………… 13

1.12.4. Estado de reposo o de bajo consumo…………………………….. 13

1.12.5. Convertidor A/D (CAD)…………………………………………. 14

1.12.6 Convertidor D/A (CDA)………………………………………….. 14

1.12.7. Comparador analógico…………………………………………… 14

1.12.8. Modulador de anchura de impulsos o PWM……………………... 14

1.12.9. Puertos de E/S digitales…………………………………………... 15

1.12.10. Puertos de comunicación……………………………………….. 15

1.13. Herramientas para el desarrollo de aplicaciones…………………………… 15

1.13.1. Ensamblador……………………………………………………… 16

1.13.2. Compilador………………………………………………………. 16

1.13.3. Depuración……………………………………………………….. 17

1.13.4. Simulación………………………………………………………... 17

1.13.5. Placas de evaluación……………………………………………… 17

1.13.6. Emuladores en circuito…………………………………………… 18

CAPÍTULO II – COMUNICACIÓN SERIAL…………………………………... 19

2.1 Conceptos básicos de comunicación serial…………………………………… 19

2.1.1. Velocidad de transmisión………………………………………….. 20

2.1.2. Bits de Datos………………………………………………………. 20

2.1.3 Bits de Parada……………………………………………………… 21

2.1.4 Paridad……………………………………………………………... 21

2.2. Comunicación Serial Asíncrona RS232…………………………………….. 22

2.2.1. Características Principales del RS232…………………………….. 23

2.2.2. Limitaciones de la RS232…………………………………………. 26

2.3. Comunicación Serial I²C……………………………………………………. 27

2.3.1. Características Principales del I²C………………………………… 27

2.3.2. Jerarquía Maestro-Esclavo………………………………………… 29

2.3.3. Dispositivos Múltiples…………………………………………….. 29

2.3.4. Soporte Multi-Maestro…………………………………………….. 29

2.3.5. Velocidad………………………………………………………….. 33

2.3.6. Direccionamiento del Dispositivo I²C……………………………... 33

Page 12: restaurante-pic+c#

CAPÍTULO III – MONTAJE……………………………………………………. 35

3.1. Montaje……………………………………………………………………… 35

3.1.1. Módulo Maestro…………………………………………………… 35

3.1.2. Modulo Esclavo…………………………………………………… 38

3.2. Programación en ASM……………………………………………………… 45

3.3. Programación en C#........................................................................................ 61

3.3.1. Pantalla Principal (Formulario Principal)…………………………. 61

3.3.1.1. Programación del Formulario Principal…………………. 62

3.3.2. Pantalla de Ayuda (Formulario Acerca de...)……………………... 64

3.3.3. Pantalla de Menú (Formulario Ingreso de Menú)………………… 64

3.3.3.1. Programación del Formulario Ingreso de Menú………… 65

3.3.4. Pantalla de Combos (Formulario Ingreso de Combos)…………… 68

3.3.4.1. Programación del Formulario Ingreso de Combo………. 69

CAPÍTULO IV – ANÁLISIS DE COSTOS…………………………………….. 72

4.1. Preliminares…………………………………………………………………. 72

4.2. Determinación del Costo del Proyecto……………………………………… 72

4.2.1. Cálculo de Costo de Mano de Obra……………………………….. 72

4.2.2. Cálculo de Costo de elementos y materiales………………………. 73

4.2.3. Cálculo de Costo de fabricación de tarjetas……………………….. 74

4.2.4. Costo final del proyecto……………………………………………. 74

CONCLUSIONES Y RECOMENDACIONES………………………………….. 76

Conclusiones……………………………………………………………………… 76

Recomendaciones…………………………………………………………………. 77

ANEXOS………………………………………………………………………… 78

A) PIC16F870/871…………………………………………………………... 78

B) MAX 232………………………………………………………………… 82

C) MPLAB…………………………………………………………………... 86

D) LENGUAJE ENSAMBLADOR…………………………………………. 89

E) SIGLAS…………………………………………………………………... 92

F) Bibliografía y Direcciones Electrónicas………………………………….. 96

Page 13: restaurante-pic+c#

Í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

Page 14: restaurante-pic+c#

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

Page 15: restaurante-pic+c#

RESUMEN

El desarrollo de nuestro proyecto final esta enfocado en plantear de una forma

innovadora y tecnológica un sistema de pedido de ordenes en restaurantes, con el fin

de mejorar el servicio que se ofrece al cliente, la idea principal es la de simplificar y

optimizar este servicio implementando módulos interactivos en cada una de las

mesas para poder permitir que el cliente pueda realizar su propia orden sin la

necesidad de la intervención de un mesero, el módulo esta desarrollado con el fin de

que el cliente pueda manipularlo de una forma rápida e intuitiva.

Para la implementación de este proyecto nos basamos en el lenguaje ensamblador o

también conocido como lenguaje de máquina el cual nos sirve para poder manejar

los microcontroladores, el lenguaje de programación Visual C# 2005 de Microsoft

para el desarrollo del software de control que se encuentra en el ordenador,

utilizamos también base de datos en SQL Server 2005 para respaldar la información

y poder gestionarla posteriormente de una forma óptima.

Desarrollamos dos módulos interactivos (touch panel) que constan cada uno de un

circuito hecho a base del PIC 16f871 y un LCD para la visualización, además de

contar con interfaces de comunicación serial RS232 e I2C. La programación de los

PICs consta básicamente de los siguientes puntos:

• Programa para el procesamiento de señales.

• Programa para configuración maestro-esclavo e interfaces RS232 e I2C.

• Programa para visualización del LCD.

Page 16: restaurante-pic+c#

El proyecto cuenta con los siguientes módulos:

• Los módulos esclavos se encuentran ubicados en cada una de las mesas y son

los encargados de permitir tomar los pedidos de las mismas, cada módulo

está conformado por dos PIC 16f871 (esclavo primario y esclavo secundario),

mientras que el primer PIC (esclavo primario) se encarga de comunicarse con

el maestro por medio del Bus I2C, el segundo PIC (esclavo secundario) sólo

realiza la multiplexión entre los displays de siete segmentos que se

encuentran en el Módulo (Touch Panel); éstos PICs esclavos de comunican

por medio de la interfaz de comunicación RS232.

• El módulo maestro se comunica con los esclavos por medio del Bus I2C y a

su vez con la computadora enviando los datos por medio de la interfaz de

comunicación RS232 (puerto serial).

El proceso principal de comunicación se realiza entre el PIC maestro y los esclavos

(esclavos principales), el PIC maestro es el único que dispone de una señal de reloj y

solicita de forma constante información a los esclavos acerca de su estado, los

esclavos, responden de acuerdo a la actividad que en ese momento tengan. A su vez

el maestro también puede enviar información a los esclavos con el fin de que estos

ejecuten algún tipo de proceso.

El ordenador interactúa directamente con el PIC maestro el cual le envía la

información para que éste la procese por medio de un software desarrollado en

Visual C# 2005 y a su vez esta misma información se guarda en una base de datos

desarrollada en SQL Server 2005 para poder realizar una posterior gestión. El

programa desarrollado en Visual C# 2005 muestra tanto la información de la orden

del cliente como la mesa de donde proviene dicha orden, el mismo programa envía la

información adecuada para que el cliente tenga la constancia de que su pedido está

en proceso.

Page 17: restaurante-pic+c#

- 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.

Page 18: restaurante-pic+c#

- 2 -

OBJETIVOS

Objetivo General.

• Desarrollar un sistema que permita mejorar el servicio de pedido de órdenes

en restaurantes optimizando el tiempo que se toma desde el momento en que

ingresa la orden hasta que se entregue el pedido.

Objetivos específicos.

• Diseñar un sistema de control utilizando las propiedades de comunicación

existentes actualmente entre el ordenador y los microcontroladores.

• Utilizar el lenguaje ensamblador para crear un programa que realice la

interacción entre los diferentes dispositivos utilizando el bus I2C y la interfaz

de comunicación RS232.

• Diseñar y crear las tarjetas electrónicas para el montaje de los circuitos

necesarios para el correcto funcionamiento del proyecto.

• Diseñar e implementar un módulo interactivo “touch panel” que permita al

cliente realizar él mismo el pedido de una forma más ágil y confiable.

• Diseñar un sistema en base a la programación C# que permita visualizar y

administrar los pedidos en conjunto con una base de datos que almacenará

esta información para obtener una mejor gestión.

Page 19: restaurante-pic+c#

- 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.

Page 20: restaurante-pic+c#

- 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

Page 21: restaurante-pic+c#

- 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

Page 22: restaurante-pic+c#

- 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

Page 23: restaurante-pic+c#

- 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.

Page 24: restaurante-pic+c#

- 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.

Page 25: restaurante-pic+c#

- 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.

Page 26: restaurante-pic+c#

- 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.

Page 27: restaurante-pic+c#

- 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.

Page 28: restaurante-pic+c#

- 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

Page 29: restaurante-pic+c#

- 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

Page 30: restaurante-pic+c#

- 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.

Page 31: restaurante-pic+c#

- 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.

Page 32: restaurante-pic+c#

- 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.

Page 33: restaurante-pic+c#

- 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.

Page 34: restaurante-pic+c#

- 18 -

1.12.9. Puertos de E/S digitales.

Todos los microcontroladores destinan algunos de sus pines a soportar líneas de E/S

digitales. Por lo general, estas líneas se agrupan de ocho en ocho formando Puertos.

Las líneas digitales de los Puertos pueden configurarse como Entrada o como Salida

cargando un 1 ó un 0 en el bit correspondiente de un registro destinado a su

configuración.

1.12.10. Puertos de comunicación.

Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros

dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de

redes y poder adaptarlos con otros elementos bajo otras normas y protocolos.

Algunos modelos disponen de recursos que permiten directamente esta tarea, entre

los que destacan:

• UART, adaptador de comunicación serie asíncrona.

• USART, adaptador de comunicación serie síncrona y asíncrona

• Puerta paralela esclava para poder conectarse con los buses de otros

microprocesadores.

• USB (Universal Serial Bus), que es un moderno bus serie para los PC.

• Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips.

• CAN (Controller Area Network), para permitir la adaptación con redes de

conexionado multiplexado desarrollado conjuntamente por Bosch e Intel para

el cableado de dispositivos en automóviles. En EE.UU. se usa el J185O.

1.13. Herramientas para el desarrollo de aplicaciones.

Uno de los factores que más importancia tiene a la hora de seleccionar un

microcontrolador entre todos los demás es el soporte tanto software como hardware

de que dispone. Un buen conjunto de herramientas de desarrollo puede ser decisivo

Page 35: restaurante-pic+c#

- 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.

Page 36: restaurante-pic+c#

- 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.

Page 37: restaurante-pic+c#

- 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.

Page 38: restaurante-pic+c#

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

Page 39: restaurante-pic+c#

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.

Page 40: restaurante-pic+c#

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.

Page 41: restaurante-pic+c#

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.

Page 42: restaurante-pic+c#

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

Page 43: restaurante-pic+c#

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

Page 44: restaurante-pic+c#

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.

Page 45: restaurante-pic+c#

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.

Page 46: restaurante-pic+c#

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

Page 47: restaurante-pic+c#

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).

Page 48: restaurante-pic+c#

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

Page 49: restaurante-pic+c#

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.

Page 50: restaurante-pic+c#

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.

Page 51: restaurante-pic+c#

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.

Page 52: restaurante-pic+c#

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.

Page 53: restaurante-pic+c#

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

Page 54: restaurante-pic+c#

CAPÍTULO III

MONTAJE Y PROGRAMACIÓN

3.1. Montaje.

Para el montaje del proyecto diseñamos e implementamos 3 módulos, un maestro y

dos esclavos. A continuación describiremos sobre cada uno de ellos

Figura 3.1 Esquema general del proyecto.

3.1.1. Módulo Maestro.

Este módulo consta de una tarjeta integrada que contiene el PIC maestro el cual

recibe la información de los PIC esclavos por medio de una comunicación I²C y

además se comunica con la PC por medio de la comunicación RS232, también consta

de una fuente de voltaje la cual además de alimentar al módulo maestro también

alimenta a los módulos esclavos, consta con un conector DB9 en la parte trasera para

conectarse a la PC y un conector jack en la parte frontal el cual por medio de un

cable UTP y conectores RJ45 se comunican con los esclavos.

Page 55: restaurante-pic+c#

Figura 3.2. Esquema general módulo

Figura 3.3. Esquema de conexión del PIC para módulo Maestro.

Page 56: restaurante-pic+c#

Figura 3.4.a. Vista frontal módulo maestro.

Figura 3.4.b. Vista trasera del módulo maestro.

Page 57: restaurante-pic+c#

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.

Page 58: restaurante-pic+c#

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)

Page 59: restaurante-pic+c#

Figura 3.8. Tarjeta individual pulsante-display (vista posterior)

Figura 3.9. Diagrama de conexión de las tarjetas pulsante-display.

Page 60: restaurante-pic+c#

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

Page 61: restaurante-pic+c#

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.

Page 62: restaurante-pic+c#

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).

Page 63: restaurante-pic+c#

Figura 3.16. Vista en 3-D de los módulos en montados en las mesas (2).

Page 64: restaurante-pic+c#

3.2. Programación en ASM.

A continuación se coloca el código fuente de alguno de los principales módulos

(subrutinas), que se necesitan para desarrollar este proyecto, entre éstos tendemos los

encargados de manejar la comunicación I2C y RS232, también encontramos los

módulos que permiten interactuar con el usuario LCD, TECLADO.

Programa “BUS_I2C.INC”

Estas subrutinas permiten realizar las tareas básicas de control del bus serie I2C, por

parte de un sólo microcontrolador maestro.

CBLOCK

I2C_ContadorBits ; Cuenta los bits a transmitir o a recibir.

I2C_DATO ; Dato a transmitir o recibido.

I2C_Flags ; Guarda la información del estado del bus I2C.

ENDC

#DEFINE I2C_UltimoByteLeer I2C_Flags,0

; - (I2C_UltimoByteLeer)=0, NO es el último byte a leer por el maestro.

; - (I2C_UltimoByteLeer)=1, SÍ es el último byte a leer por el maestro.

La definición de las líneas SCL y SDA del bus I2C se puede cambiar según las

necesidades del hardware.

#DEFINE SCL PTOA,3 ; Línea SCL del bus I2C.

#DEFINE SDA PTOA,4 ; Línea SDA del bus I2C.

Subrutina "SDA_Bajo"

SDA_Bajo

bsf STATUS,RP0 ; Configura la línea SDA como salida.

bcf SDA

bcf STATUS,RP0

bcf SDA ; SDA en bajo.

return

Page 65: restaurante-pic+c#

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.

Page 66: restaurante-pic+c#

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

Page 67: restaurante-pic+c#

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

Page 68: restaurante-pic+c#

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

Page 69: restaurante-pic+c#

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.

Page 70: restaurante-pic+c#

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

Page 71: restaurante-pic+c#

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.

Page 72: restaurante-pic+c#

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

Page 73: restaurante-pic+c#

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

Page 74: restaurante-pic+c#

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".

Page 75: restaurante-pic+c#

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

Page 76: restaurante-pic+c#

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

Page 77: restaurante-pic+c#

RETARLCD

movlw 0FFH

movwf R13

decre DECFSZ R13,1

goto DECRE

return

Subrutina de visualización de mensajes empleando la directiva "dt" de la tabla de

mensajes1 equivalentes a los primeros 15 mensajes

LCDMEN1

movwf POINTLCD

movlw MENSAJES1

subwf POINTLCD,1

decf POINTLCD,1

CHAR

movf POINTLCD,W

call MENSAJES1 ; nombre del primer bloque de mensajes

movwf VALLCD

movf VALLCD,1

btfsc STATUS,Z

goto FINLCD

call DATO

incf POINTLCD,1

goto CHAR

FINLCD

return

Page 78: restaurante-pic+c#

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

Page 79: restaurante-pic+c#

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

Page 80: restaurante-pic+c#

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.

Page 81: restaurante-pic+c#

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();

Page 82: restaurante-pic+c#

} 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(); } } }

Page 83: restaurante-pic+c#

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ú.

Page 84: restaurante-pic+c#

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 () + "')";

Page 85: restaurante-pic+c#

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);

Page 86: restaurante-pic+c#

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] " +

Page 87: restaurante-pic+c#

",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).

Page 88: restaurante-pic+c#

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";

Page 89: restaurante-pic+c#

SqlConnection Base = new SqlConnection(cadenaconexion); SqlCommand Consulta_tabla = new SqlCommand(Sql, Base); SqlDataAdapter tabla = new SqlDataAdapter(); tabla.SelectCommand = Consulta_tabla; DataTable dataTable1 = new DataTable(); dataTable1.Locale =

System.Globalization.CultureInfo.InvariantCulture; tabla.Fill(dataTable1); Base.Close(); return dataTable1; } private void button4_Click(object sender, EventArgs e) { dataGridView1.AutoGenerateColumns = true; bindingSource1.DataSource = Consulta("SELECT

MENU.IDMENU, MENU.NOMBRE FROM MENU INNER JOIN COMBO ON MENU.IDMENU = COMBO.IDMENU "+

"WHERE COMBO.IDCOMBO = " + textBox4.Text); dataGridView1.DataSource = bindingSource1; } private void Combos_Load(object sender, EventArgs e) { textBox4.Enabled = false; textBox5.Enabled = false; comboBox1.Enabled = false; button2.Enabled = false; } private void button3_Click_1(object sender, EventArgs e) { dataGridView2.AutoGenerateColumns = true; bindingSource2.DataSource = Consulta("SELECT IDMENU [

Codigo], NOMBRE [ Nombre] " + "FROM dbo.MENU WHERE STATUS='A' "); dataGridView2.DataSource = bindingSource2; } private void dataGridView2_CellClick(object sender,

DataGridViewCellEventArgs e) { button4.Enabled = true; button5.Enabled = true; textBox4.Text = dataGridView2[0, e.RowIndex].Value.ToString();

Page 90: restaurante-pic+c#

textBox5.Text = dataGridView2[1, e.RowIndex].Value.ToString(); } private static int Actualizar(string Sql) { string cadenaconexion = "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=CAFEUPS;Data

Source=localhost"; SqlConnection Base = new SqlConnection(cadenaconexion); Base.Open(); SqlCommand Ejecutar = new SqlCommand(Sql, Base); int x = Ejecutar.ExecuteNonQuery(); Base.Close(); return x; } private void button4_Click_1(object sender, EventArgs e) { try { string Sql = "INSERT INTO COMBO " + "([IDCOMBO],[IDMENU],[STATUS]) VALUES " + "('" + textBox1.Text + "','" + textBox4.Text +

"','" + 'A' + "')"; int r = Actualizar(Sql); dataGridView1.AutoGenerateColumns = true; bindingSource1.DataSource = Consulta("SELECT MENU.NOMBRE [Nombre]"+ " FROM dbo.COMBO INNER JOIN dbo.MENU ON COMBO.IDMENU = "+ "MENU.IDMENU WHERE COMBO.IDCOMBO= " + textBox1.Text); dataGridView1.DataSource = bindingSource1; comboBox1.Enabled = true; button2.Enabled = true; } catch (System.Exception ex) { MessageBox.Show("No se puede ingresar:" + ex.Message, "Ingreso de Combo"); } } } }

Page 91: restaurante-pic+c#

CAPÍTULO IV

ANÁLISIS DE COSTOS

4.1. Preliminares.

Uno de los principales factores que se debe considerar en el momento del desarrollo de un proyecto,

es el costo total de producción, la mano de obra, maquinaria o materiales utilizados para elaboración

de un producto terminal, en base de estos valores podremos determinar de una forma concreta la

factibilidad de dicho producto, es decir si resulta rentable o no, si posee un valor competitivo en

relación con otros productos de similares características.

Para poder determinar el costo total del proyecto, será necesario tomar en cuenta los siguientes

costos: Costos de mano de obra, costos de elementos y materiales y costos de fabricación de las

placas (incluido el diseño).

4.2. Determinación del Costo del Proyecto.

4.2.1. Cálculo de Costo de mano de obra.

Para poder determinar el costo de la mano de obra tomaremos un valor referencial de 0,90 dólares

americanos que se encuentra entre el rango de 0,80 y 1,20 dólares americanos, valores que son

normalmente cobrados por concepto de trabajo por hora.

A continuación se determinará el costo tentativo de la mano de obra, para lo cual se realizará la una

tabla en la cual constará cada uno de los rubros de mano de obra, el numero de horas y su valor total.

COSTO DE MANO DE OBRA Rubro Tiempo (h) Valor/Hora V. Total Código para PIC 60 1,00 60,00 Código fuente C# 80 2,00 160,0 Diseño de placas 10 1,00 10,00 Armado de placas 4 0,90 3,60 Montaje y pruebas 20 0,90 18,00 TOTAL $ 251,60

Tabla 4.1 Costo de mano de obra

Fuente: Autores

El costo total de mano de obra es de 80,10 dólares americanos, este es un valor tentativo en base al

número de horas que se necesitaron para el desarrollo de este proyecto.

Page 92: restaurante-pic+c#

4.2.2. Cálculo de Costo de elementos y materiales.

A continuación se determinará el costo de los materiales y elemento utilizados, para lo cual

detallaremos de forma separada los componentes que fueron utilizados para cada uno de los

módulos (Maestro y Esclavo), se realizará una lista de materiales, su valor unitario y valor total.

COSTO DE ELEMENTOS Y MATERIALES MÓDULO MAESTRO

Elemento Cant. V. Unitario V. Total PIC 16F871 1 10,00 10,00 Cristal 4 MHZ 1 0,70 0,70 Conectores hembra DB9 3 0,60 1,80 Resistencia 1K 6 0,05 0,30 Zócalo de 40 pines 1 0,20 0,20 Capacitares 5 0,10 0,50 Max232 1 2,50 2,50 Fuente de Voltaje de 5 V 1 10,00 10,00 Otros 1 10,00 10,00 Total $ 36,00

Tabla 4.2.a. Costo de materiales (módulo maestro)

Fuente: Autores

COSTO DE ELEMENTOS Y MATERIALES MÓDULO ESCLAVO

Elemento Cant. V. Unitario V. Total PIC 16F871 2 10,00 20,00 Módulo LCD 2X20 1 17,00 17,00 Cristal 4 MHZ 2 0,70 1,40 Pulsadores 12 0,35 4,20 Displays 7 segmentos 10 0,80 8,00 Conectores hembra DB9 1 0,60 0,60 Resistencia 2,7K 10 0,05 0,50 Resistencia 1K 6 0,05 0,30 Resistencia 100 7 0,05 0,35 Zócalo de 40 pines 2 0,20 0,40 Integrado 74LS48 1 0,60 0,60 Transistores 2N3904 10 0,30 3,00 Potenciómetro 5 K 1 0,40 0,40 Fuente de Voltaje de 5 V 1 10,00 10,00 Módulo 1 40,00 40,00 Otros 1 2,50 2,50 Total $ 109,25

Tabla 4.2.b. Costo de materiales (módulo esclavo)

Fuente: Autores

Page 93: restaurante-pic+c#

El costo total entre un módulo maestro y el esclavo asciende a 135,25 dólares americanos. Para

nuestro caso debemos adicionalmente sumar el valor de otro esclavo para obtener el valor real de

nuestra implementación, por lo cual el valor seria 135,25 (valor de un maestro y un esclavo) + 99,25

(valor de un esclavo) = 234,50. Debemos resaltar que en este listado existen elementos que no se

venden en la ciudad de guayaquil como los microcontroladores, Max232 y los LCD’s, el valor

indicado de estos elementos fueron en base a una cotización obtenida por medio la empresa

“CORPOIMPEX S.A.”, la misma que tiene sus instalaciones en la ciudad de cuenca, y de donde fué

necesario traerlos, lo cual implicó un valor adicional por motivo de envió de dichos elementos,

tomado en cuenta en el ítem “otros” del módulo del maestro. Los elementos que fueron comprados

en la ciudad de Guayaquil fueron cotizados en “PARCOMEL”, ubicado en Boyaca # 903 y Junín.

4.2.3. Cálculo de Costo de fabricación de tarjetas.

Para determinar el costo total de la fabricación de tarjetas necesitaremos tomar en cuenta dos valores,

el costo por el diseño de la tarjeta, este se realiza en la computadora por medio de un software

especializado “PROTEL”, que permite desarrollar este tipo de placas. El segundo valor que tenemos

que tomar en cuenta es el costo por fabricación de la placa, es decir, es el valor que nos cobrarán por

la elaboración del diseño que hemos desarrollado. El costo por fabricación lo detallaremos en la

siguiente tabla 5.3, el costo por el diseño ya fué tomado en cuenta dentro de la tabla 5.1., que

especificaba costos por la mano de obra.

COSTO POR FABRICACIÓN DE TARJETAS Elemento Cantidad V. Unitario V. Total Tarjeta esclavo 2 17,00 34,00 Tarjeta maestro 1 15,00 15,00 TOTAL $ 49,00

Tabla 4.3. Costo por fabricación de tarjetas

Fuente: Autores

4.2.4. Costo final del proyecto.

Una vez calculado todos los costos que se han dado en el desarrollo del presente capítulo, podemos

proceder a obtener el costo final del proyecto, antes de esto necesitamos sumar el resultado que

obtuvimos de el costo por mano de obra, costo de elementos y materiales y el costo de fabricación de

tarjetas.

Page 94: restaurante-pic+c#

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

Page 95: restaurante-pic+c#

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.

Page 96: restaurante-pic+c#

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.

Page 97: restaurante-pic+c#

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.

Page 98: restaurante-pic+c#

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.

Page 99: restaurante-pic+c#

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).

Page 100: restaurante-pic+c#

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.

Page 101: restaurante-pic+c#

Bibliografía y Direcciones Electrónicas.

I²C

• http://www.mcc-us.com

MCC – Micro Computer Control - Small Area Network Specialists

• http://www.comunidadelectronicos.com/articulos/i2c.htm

• http://www.robot-electronics.co.uk/htm/using_the_i2c_bus.htm

RS232

• http://www.depeca.uah.es/alcabot/seminario2006/Trabajos/JoseManuelMurci

aBarba.pdf

• http://www.euskalnet.net/shizuka/rs232.htm

• http://www.i-micro.com

Tutorial de Protocolo RS232 • http://www.iua.upf.es/~jlozano/interfaces/interfaces6.html

• http://pinouts.ws/db9-rs232-pinout.html

MAX232

• http://www.geocities.com/alva_cesar/rs232/max232.html

Comunicar la HP48 con un PIC16F84

• http://www.ortodoxism.ro/datasheets/texasinstruments/max232.pdf

• http://www.pablin.com.ar/electron/circuito/mc/ttl232/

Conversor RS232 a TTL sin MAX232

• http://robots-argentina.com.ar/Comunicacion_max232.htm

• http://www.x-robotics.com/hardware.htm

Page 102: restaurante-pic+c#

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

Page 103: restaurante-pic+c#

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.

Page 104: restaurante-pic+c#

• 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

Page 105: restaurante-pic+c#

Diagrama de Pines

Diagrama de los pines del PIC16F871

Fuente: Pagina Web

http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf

Page 106: restaurante-pic+c#

Mapa de archivos de registros.

Fuente: Pagina Web

http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf

Page 107: restaurante-pic+c#

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).

Page 108: restaurante-pic+c#

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.

Page 109: restaurante-pic+c#

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.

Page 110: restaurante-pic+c#

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).

Page 111: restaurante-pic+c#

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

Page 112: restaurante-pic+c#

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

Page 113: restaurante-pic+c#

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.

Page 114: restaurante-pic+c#

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.

Page 115: restaurante-pic+c#

• 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.

Page 116: restaurante-pic+c#

Juegos instrucciones PIC.

Nemónicos Operandos Descripción Ciclos Flags ADDWF f,d Suma W y f 1 C, DC, Z ANDWF f,d AND W con f 1 Z CLRF f Borra f 1 Z CLRW --- Borra W 1 Z COMF f,d Complementa f 1 Z DECF f,d Decrementa f 1 Z DECFSZ f,d Decrementa f, si es 0 salta 1 (2) Ninguno INCF f,d Incrementa f 1 Z INCFSZ f,d Incrementa f, si es 0 salta 1 Ninguno IORWF f,d OR entre W y f 1 Z MOVF f,d Mueve f 1 Z MOVWF f Mueve W a f 1 Ninguno NOP --- No opera 1 Ninguno RLF f,d Rota f a la izqda. a través del carry 1 C RRF f,d Rota f a la dcha. a través del carry 1 C SUBWF f,d Resta a f el reg. W 1 C, DC, Z SWAPF f,d Intercambia f 1 Ninguno XORWF f,d XOR de W con f 1 Z BCF f,b Borra bit de f 1 Ninguno BSF f,b Pone a 1 el bit de f 1 Ninguno BTFSC f,b Comprueba un bit de f y salta si es 0 1 (2) Ninguno BTFSS f,b Comprueba un bit de f y salta si es 1 1 (2) Ninguno ANDLW k AND inmediato con W 1 Z CALL k Llamada a subrutina 2 Ninguno CLRWDT k Borra Watchdog 1 TO, PD GOTO k Salto incondicional 2 Ninguno IORLW k OR inmediato con W 1 Z MOVLW k Mueve a W un valor inmediato 1 Ninguno OPTION k Carga el registro OPTION 1 Ninguno RETLW k Retorno y carga de W 2 Ninguno SLEEP --- Pasa a estado de reposo 1 TO, PD TRIS f Carga el registro 1 Ninguno XORLW k OR exclusiva a W 1 Z

Juego de Instrucciones del PIC

Fuente: Pagina Web

http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf