Está en la página 1de 249

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:

Aplicación de Lenguaje C para microcontroladores PIC y Visual C#


en el desarrollo de un Sistema de Control de Acceso Peatonal

Autores:
Eduardo Mendoza Merchán
Luis Chacón Buñay

Director:
Ing. Luís Córdova Rivadeneira

Guayaquil, 30 de Abril del 2007


AUTORÍA

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


responsabilidad de los autores.

f.......................................................
Eduardo Vicente Mendoza Merchán

f.......................................................
Luís Alonso Chacón Buñay
CERTIFICO:

Haber revisado minuciosamente el Proyecto Final de Titulación, De los Sres.


Eduardo Mendoza Merchán, y Luís Chacón Buñay, 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 Abril del 2007


ACTA DE CESIÓN DE DERECHOS DEL PROYECTO FINAL

Conste por el presente documento la cesión de los derechos del Proyecto Final de
Titulación, de conformidad con las siguientes cláusulas:

PRIMERA.- El ing. Luís Córdova R. por sus propios derechos, en calidad de


Director de Proyecto Final, Eduardo Mendoza M. y Luís Chacón B., por sus propios
derechos, en calidad de autores de Proyecto Final.

SEGUNDA.-

UNO.- El Sr. Eduardo Mendoza M. y Luís Chacón B., realizaron El Proyecto Final
titulado “Aplicación de Lenguaje C para microcontroladores PIC y Visual C# en el
desarrollo de un Sistema de Control de Acceso Peatonal”, para optar por el Título de
Ingeniero en Electrónica, especialidad Sistemas Industriales en la Universidad
Politécnica Salesiana Sede Guayaquil.

DOS.- Es política de la Universidad que el Proyecto Final se apliquen y materialicen


en beneficio de la comunidad.

TERCERA.- Los comparecientes Ing. Luís Córdova R., en calidad de Director de


Proyecto Final, los Sres. Eduardo Mendoza M. y Luís Chacón B., como autores, por
medio del presente instrumento, tiene a bien ceder en forma gratuita sus derechos en
el Proyecto Final titulado “Aplicación de Lenguaje C para microcontroladores PIC y
Visual C# en el desarrollo de un Sistema de Control de Acceso Peatonal”, 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 Abril del año dos mil siete.

----------------------------------------
Ing. Luís Córdova Rivadeneira
DIRECTOR DE PROYECTO FINAL

-------------------------------------- -------------------------------------
Eduardo Mendoza Merchán Luís Chacón Buñay
AUTOR AUTOR
D E D I C A T O R I A

Este trabajo está dedicado a mis padres, por


quienes decidí aprovechar esta valiosa
oportunidad de superación personal y profesional,
a mi hermano René, que me a brindado todo su
apoyo moral, y económico sin los cuales no
hubiese podido culminar mi carrera, y
principalmente a Dios que me dado la sabiduría
necesaria para la culminación de este importante
proyecto, de manera especial a todas y cada una
de las personas que me apoyaron en su momento.

Eduardo

Este trabajo dedico con cariño a Dios y a mis


padres quiénes me han apoyado para alcanzar una
de mis metas anheladas, y así poder servir mejor a
quiénes el Señor me confíe. a mis sobrinos por
abrir un nuevo camino para esperarlos junto a mi
familia querida, a la Fuerza Aérea Ecuatoriana
que me apoyo con el trabajo. En fin a todos que
hoy no recuerdo y fueron una inspiración en su
momento, gracias a la vida por permitirme crecer,
espero devolver de alguna manera esta alegría.

Luís.
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 Luís Córdova, por su
total colaboración en este trabajo, y al Ing. Raúl
Álvarez G. que gracias a su intervención se logró una
exitosa culminación. Además nuestra gratitud sincera
para aquellas personas que de una u otra manera
ayudaron en el desarrollo del presente trabajo.

Eduardo Mendoza M.
Luís Chacón B.
CONTENIDO

AUTORÍA

CERTIFICACIÓN

ACTA DE CESIÓN DE DERECHOS

DEDICATORIA

AGRADECIMIENTO

ÍNDICE GENERAL

ÍNDICE DE FIGURAS

ÍNDICE DE TABLAS

RESUMEN

OBJETIVOS

JUSTIFICACIÓN

METODOLOGÍA

INTRODUCCIÓN

1.- INTRODUCCIÓN A LOS SISTEMAS DE CONTROL DE ACCESO

2.- MICROCONTROLADORES PIC DE GAMA MEDIA.

3.- LENGUAJE ENSAMBLADOR, LENGUAJE C PARA PIC Y C#.

4.- DESARROLLO DEL SISTEMA DE CONTROL DE ACCESO.

5.- ANÁLISIS DE COSTOS.

6.- CONCLUSIONES Y RECOMENDACIONES.

7.- BIBLIOGRAFÍA

8.- ANEXOS

9.- VOCABULARIO TÉCNICO


ÍNDICE GENERAL

Autoría I
Certificación II
Acta de sesión de derechos III
Dedicatoria IV
Agradecimiento V
Contenido VI

i.- Resumen 1
ii.- Objetivos 3
iii.- Justificación 3
vi.- Metodología 4
v.- Introducción 5

1.- CAPÍTULO I:
Sistemas de control de acceso

1.1.- Antecedentes: 7
1.2.- Nociones del Control de Acceso Discrecional. 8
1.2.1.- Autorización Positiva y Negativa. 8
1.2.2.- Autorización Fuerte y Débil. 6
1.2.3.- Autorizaciones Explícitas e Implícitas 9
1.2.4.- Autorizaciones basadas en el contenido 9
1.2.5.- Control de Acceso Obligatorio 9
1.2.6.- Control de Acceso basado en Roles 10
1.2.7.- Control de Acceso basado en Restricciones 10
1.3.- Análisis general de los sistemas de control de acceso. 11
1.3.1.- El primer mecanismo 12
1.3.2.- El segundo mecanismo 12
1.3.3.- El tercer mecanismo 12
1.3.4.- El cuarto mecanismo 13
1.4.- Mecanismos de seguridad utilizados en los sistemas de control de acceso 14
1.4.1.- Control de Acceso basadas en teclados y bandas magnéticas 14
1.4.2.- Sistemas de Control de Acceso basados en Tarjetas Inteligentes. 16
1.4.3.- Etiquetas y Llaveros Inteligentes 18
1.4.4.- Sistemas de control de acceso basados en huellas dactilares. 19
1.4.4.1.- La identificación biométrica 19
a) Falsa aceptación 21
b) Falso rechazo 21
1.4.5.- Lectores subcutáneos de huellas dactilares 22
i.- Funcionamiento: 23
1.4.6.- Otros controles de acceso 24
1.5.- Cerraduras Especiales 25
1.5.1.- Cerradura electromagnética 26
1.5.2.- Cerradura electromecánica (Multipla 2000) 26
1.5.3.- Cerradura electrónica Rench 27
1.5.4.- Cerradura electrónica para múltiples aplicaciones 28

2.- CAPÍTULO II
Microcontroladores PIC de gama media.

2.1.- Introducción: 29
2.2.- El microcontrolador PIC 30
2.2.1.- Juego de instrucciones y entorno de programación 31
2.2.2.- Programación del PIC 31
2.2.2.- Tamaño de palabra 33
2.2.3.- Características generales 33
2.2.4.- Variaciones del PIC 34
a).- PICs modernos 34
b).- Clones del PIC 34
c).- PICs WírelesS 34
e).- PICs para procesado de señal (dsPICs) 35
2.2.4.- PICs más comúnmente usados 35
2.2.5.- Familia de la serie PIC18 35
2.2.5.- PICs en Internet 37
2.3.- Arquitectura interna de un microcontrolador PIC 38
2.3.1.- El procesador 38
2.2.2. Memoria de programa 40
i) ROM con máscara 41
ii) EPROM 42
iii) OTP (Programable una vez) 42
iv) EEPROM 42
v) FLASH 43
2.2.3. Memoria de datos 43
2.2.4. Líneas de E/S para los controladores de periféricos 44
2.2.5. Recursos auxiliares 45
2.4.-Descripción del PIC 16F877 46
2.4.1.- Características del PIC 16F877 46
2.4.2- Descripción de los puertos 48

3.- CAPÍTULO III


Lenguaje Ensamblador y Lenguaje C

3.1.- El lenguaje Ensamblador 54


3.1.1.- Programa fuente en Lenguaje Ensamblador: 56
3.1.2.- Conjunto de instrucciones 57
3.1.3.- Herramientas de desarrollo. El MPLAB. 58
3.2.- El Lenguaje Basic 59
3.2.1.- Ventajas e inconvenientes 59
3.3.- Lenguaje C 61
3.3.1.- Historia del Lenguaje C (C, C++, C#) 61
3.3.2.- Características y desventajas de Leguaje C 64
3.4.- El Compilador de C para PIC 65
3.4.1 Introducción 65
3.4.2.- La programación en PIC C 67
3.4.3.-Análisis de un problema sencillo 67
3.4.4.- Estructura de un programa en C 68
3.4.5.- Librerías y funciones 69
3.4.5.1.- la función main() 69
3.4.5.2.- Archivos de cabecera (#include) 70
3.4.5.3.- función printf 70
3.4.5.4.- variables 72
3.4.5.5.- Constantes: 74
3.4.5.6.- Comentarios 74
3.4.5.7.- Funciones 75
3.4.5.8.- Palabras reservadas de C 76
3.4.5.9.- Directiva #asm y #endasm 77
3.4.5.10.- Manejo de la memoria EEPROM interna 77
3.4.5.11- Reloj del sistema #USE DELAY (CLOCK) 78
3.4.5.12.- librería LCD 78
3.4.5.13.- Librería KBD 79
3.4.5.14.- Interrupciones. (#INT_xxx) 80
3.4.5.15.- Bus de datos I2C 81
3.4.5.16.- Interfaz de comunicaciones RS-232 83
3.4.5.17.- Convertidor análogo a digital 85
3.4.5.18.- Generación de PWM 88

4.- CAPÍTULO IV
Análisis y desarrollo del Sistema de Control de Acceso.

4.1 Descripción de Sistema 91


4.2.- Selección de dispositivos y lenguajes de programación 96
4.2.1.- Selección del microcontrolador 97
4.2.2.- Selección del lenguaje de programación del microcontrolador 101
4.2.3.- Elección del software y hardware para el grabado del PIC . 105
4.2.4.- Selección del Lenguaje de programación del ordenador 107
4.3.- Análisis de los programas y librerías de los microcontroladores PIC. 107
4.3.1.- Programa microcontrolador esclavo 108
4.3.1.1.- La librería pantalla. 109
i).- Función beep() 109
ii).- Función alarma() 109
iii).- Función pantalla() 110
4.3.1.2.- La librería selapart.h 112
4.3.1.3.- La librería selclave.h 116
4.3.1.4.- programa principal esclavo 122
4.3.2.- Programa microcontrolador maestro 129
4.3.3.- Programa ordenador C# y SQL 141
4.3.3.1.- Selección del lenguaje C# 142
4.3.3.2.- Selección de la base datos 142
4.3.3.3.- Análisis del código fuente proporcionado en C# 143
4.3.3.4.- Análisis de librería wcltextboxserial.dll 145
4.3.3.5.- Pasos para la comunicación serial en C# 146
4.3.3.6.- Pasos para la conexión de c# con sql 148
4.3.3.7.- Pasos para abrir un archivo wav 149
4.3.3.8.- Programa principal de C# 150
i) Menú abrir puertas desde ordenador 150
ii) Menú mantenimiento de la base de datos 152
iii) Menú cambiar claves en microcontrolador 153
iv) Menú cambiar claves en el ordenador 155
4.4.- Análisis del circuito eléctrico del sistema de control de acceso 156
4.4.1.- Microcontrolador maestro 156
4.4.2.- Microcontroladores esclavos 159
4.4.3.- Lista de elementos 161
4.4.4.- Consumo de energía 163
4.5.- Diseño de las placas de circuito impreso 165

CAPITULO V
Análisis de de costos

5.1.- Preliminares 173


5.2.- Determinación del costo del proyecto 173
5.2.1.- Cálculo del costo de mano de obra 173
5.2.2.- Cálculo del Costo de elementos y materiales 175
5.2.3.- Cálculo del Costo de fabricación de tarjetas 176
5.2.4.- Cálculo del costo por uso del ordenador 178
5.2.5.- Cálculo del costo neto del sistema de control de acceso 178
5.2.6.- Costo final del sistema 179
5.3.- Análisis de los costos en función del número de unidades fabricadas 179
5.4.- Análisis de sistemas análogos al control de acceso peatonal 183
5.4.1.- Control de acceso intemperie 183
5.4.2.- Teclado de combinación para puertas 185
5.4.3.- Control de acceso AC-903 186

6.- Conclusiones y Recomendaciones

6.1.- Conclusiones 187


6.2.- Recomendaciones 189

7.- Bibliografía

7.1.- Libros 191


7.2.- Direcciones electrónicas 190

8. – Anexos

A) El Bus I2C (Inter Integrated Circuit) 194


B) Interfaz RS-232 199
C) El Circuito Integrado MAX-232 206
D) Migración del PIC16F87x a PIC16F87xA 208
E.- Manual de Usuario 216

9.- Vocabulario Técnico

9.1.- Glosario 222


9.2.- Vocabulario 227

ÍNDICE DE FIGURAS:

Capítulo I

1.1. Distintos mecanismos de control de acceso 7


1.2. Terminología utilizada en relación con seguridad y control de acceso 11
1.3. Cuatro mecanismos complementarios de un sistema de control de acceso 12
1.4. Tecnologías que apoyan el mecanismo de autenticación 14
1.5. a) Tarjeta chip, b) tarjeta magnética, c) control de acceso con teclado 15
1.6. Lector de tarjeta chip 16
1.7. Control de acceso con tarjeta inteligente 16
1.8. Tarjetas Inteligentes 17
1.9. Llavero y tarjeta inteligente. 18
1.10 Dedo pulgar y su huella dactilar 19
1.11 Lector de huellas dactilares 22
1.12 Lectores subcutáneos de huellas dactilares 23
1.13 Lector de huellas dactilares T4210 23
1.14 Detalle de la capa subcutánea de la piel 24
1.15 Reflexiones en lector subcutáneo de huellas dactilares 25
1.16 Controles de acceso peatonal y vehicular 26
1.15 Cerradura electromagnética. 26
1.16 Cerradura múltipla 2000 26
1.17 Cerradura electrónica Rench 27
1.18 Cerradura para múltiples aplicaciones 28

Capítulo II

2.1 Microcontrolador Pic 16F877 29


2.2 Tarjeta con microcontrolador PIC 16F84 30
2.3 Programador PICSTART 32
2.4 Microcontroladores de la familia PIC18 36
2.5 Arquitectura de «Von Neumann» 39
2.6 Arquitectura Harvard 39
2.7 Mapa de la Pila y memoria de programa del PIC 16F877A 40
2.8 Diagrama de bloques General De un PIC de gama media 45
2.9 Diagrama de Bloques del Microcontrolador PIC 16F877 49
2.10 Diagrama de Bloques del Microcontrolador PIC 16F877 53
2.11 Dimensiones físicas del Microcontrolador PIC 16F877 53
Capítulo III

3.1 Entorno de Desarrollo Integrado MPLAB 58


3.2 Ejemplo de programa en Leguaje Basic 60
3.3 Diagrama de flujo del programa media 68

Capítulo IV

4.1 Esquema general del sistema de Control de Acceso 91


4.2 Disposición física de los componentes del sistema 92
4.3 Pantalla del módulo LCD para ingreso de número de apartamento 94
4.4 Pantalla del módulo LCD para ingreso de clave 95
4.5 Pantalla del módulo LCD con mensaje de puerta abierta 95
4.6 Pantallas del módulo LCD si la clave ingresada es incorrecta 95
4.7 Pantalla del módulo LCD que india que la alarma ha sido activada 95
4.8 Microcontrolador fabricado por Atmel 100
4.9 Entorno de desarrollo de CCS C Compiler ver 4.017 104
4.10 Entorno de programación Ic-prog ver 1.05D 106
4.11 Programador utilizado en el proyecto de control de acceso 106
4.12 Diagrama de bloques del sistema de control de acceso peatonal 108
4.13 Circuito de conexión del altavoz del sistema 110
4.14 Foto del altavoz usado en el proyecto 110
4.15 Simulación de los mensajes mostrados por el LCD 111
4.16 Foto del módulo LCD usado en el proyecto 111
4.17 Conexión de los pines del módulo LCD 112
4.18 Diagrama de flujo de la librería sel-apart 113
4.19 Diagrama de flujo de la librería selclave 117
4.20 Diagrama de flujo del programa principal de los esclavos 122
4.21 Diagrama de flujo para la interrupción por I2C para los esclavos 123
4.22 Diagrama de flujo para la interrupción por desbordamiento del timer1 124
4.23 Diagrama de flujo del programa principal maestro 130
4.24 Diagrama de flujo de interrupción RS-232 131
4.25 Diagrama de flujo de interrupción por desbordamiento de timer0 132
4.26 Propiedades de textBox 145
4.27 Propiedades de textBox para la dll 146
4.28 Selección del menú abrir puertas 151
4.29 Diagrama de flujo del programa principal 151
4.30 Recuadro para abrir puertas desde el ordenador 151
4.31 Diagrama de flujo para abrir puerta 152
4.32 Selección del menú mantenimiento 152
4.33 Menú mantenimiento 153
4.34 Diagrama de flujo del programa mantenimiento de base de datos 153
4.35 Selección del menú cambiar clave pic 154
4.36 Diagrama de flujo del programa cambiar clave pic 154
4.37 Selección del menú cambiar clave ordenador 155
4.38 Diagrama de flujo del programa cambiar clave ordenador 155
4.39 Diagrama de pines del PIC 16f877a 156
4.40 Diagrama de conexión del masterClear 157
4.41 Diagrama de microcontrolador maestro y MAX 232 158
4.42 Diagrama de microcontrolador Esclavo 160
4.43 Orden de los pines del teclado utilizado 161
4.44 Diagrama del Sistema de control de Acceso 162
4.45 Placas finalizadas con sus respectivos fotolitos 165
4.46 Vista superior de la insoladora con placa finalizada. 166
4.47 Selección del conector DB9 para PCB 167
4.48 Diseño final de la placa de circuito Maestro 167
4.49 Diseño final de la placa de circuito Esclavo 168
4.50 Diseño final de la placa de circuito Esclavo 168
4.51 Vista de la placa maestro desde las pistas 169
4.52 Placa terminada del microcontrolador maestro 169
4.53 Placa terminada del microcontrolador esclavo 2 170
4.54 Tarjeta esclavo con su LCD, teclado y parlante. 170
4.55 Sistema de control de acceso en fase de prueba. 171
4.56 Detalle del montaje del LCD, Teclado y Parlante 171
4.56 Prueba final de sistema de control de acceso. 172
Capítulo V

5.1 Relación costos fijos costos variables para una unidad 180
5.2 Relación costos fijos costos variables para producir 10 sistemas 181
5.3 Relación costos fijos costos variables para producir 100 sistemas 182
5.4 Relación costos fijos costos variables de los tres modelos 182
5.5 Variación de los precios debido al incremento de la producción 183
Teclado de acceso 2 salidas s170132 184
Control de acceso por teclado s170130 185
Control de acceso AC-903 186

Anexos

a.1 Diagrama general del Bus I2C 194


a.2 Microcontrolador comunicado por medio del Bus I2C 195
a.3 Formas de onda de SDA y SCL en la comunicación I2C 196
b.1 Estructura de una caracter que se trasmite a través de RS-232 204
c.1 Disposición física de las patillas en el MAX232 206
c.2 Circuito básico con el MAX232 206
c.3 Foto del circuito integrado MAX232 207
e.1 Pantalla principal del programa Control Acceso para PC 216
e.2 Menús en el panel principal 217
e.3 Menú de mantenimiento 217
e.4 Submenú de mantenimiento insertar 218
e.5 Submenú de mantenimiento modificar 218
e.6 Submenú de mantenimiento eliminar 218
e.7 Submenú de mantenimiento imprimir 219
e.8 Submenú de cambio de clave 219
e.9 Mensaje de clave incorrecta 219
e.10 Mensaje de departamento incorrecta 219
e.11 Mensaje de clave correcta 220
e.12 Recuadro para ingreso de nueva clave 220
e.13 Recuadro para abrir puerta 220
e.15 Mensaje para ingreso de clave 221
e.16 Mensaje de presencia en puerta 1 221
e.17 Mensaje de ingreso de persona 221
e.18 Mensaje de alarma en puerta 2 221

ÍNDICE DE TABLAS:

Capítulo II

2.1 Características del PIC 16F877 47


2.2 Descripción de los pines del PIC 16F877 50

Capítulo III

3.1 Resumen de instrucciones del lenguaje ensamblador 57


3.2 Formatos de salida para la función printf() 71
3.3 Tipos de datos en C 73
3.4 Opciones del bus I2C 82
3.5 Opciones de interfaz RS-232 84

Capítulo IV

4.1 Asignación de pines del LCD al microcontrolador 113


4.2 Número de apartamento y posiciones de memoria 116
4.3 Consumo de energía por elementos 164
4.4 Consumo de energía por circuito 164

Capítulo V

5.1 Costo de mano de obra 174


5.2 Costo de materiales 175
5.3 Costo de elaboración de tarjetas 176
5.4 Costo por uso de ordenador 178
5.5 Costo de elaboración de tarjetas 180
5.6 Costo por unidad para producir 10 sistemas 181
5.7 Costo por unidad para producir 1000 sistemas 181

Anexos

B1 Lista de señales RS-232 199


B2 Asignación de pines según EIA y CCITT 201
B3 Niveles de voltaje para 1 y 0 lógico 202
INTRODUCCIÓN

Desde sus inicios, el ser humano y la sociedad se ha visto en la necesidad de restringir o


controlar el acceso a ciertas áreas. Esta necesidad es motivada inicialmente por temor a que
personas inescrupulosas o delincuentes puedan robar y/o extraer bienes materiales o
información valiosa. Vemos cómo los castillos y fortalezas fueron construidos de tal forma que
sus principales vías de acceso eran diseñadas con puentes que se elevaban o recogían
mediante mecanismos manuales, y muchas otras formas, de tal manera que la persona que
intentaba acceder a estas edificaciones además de identificarse con su nombre, debían
hacerle un reconocimiento visual de las características de ella/él o de un único elemento,
como por ejemplo un anillo.

En la actualidad, tecnológicamente han cambiado muchas cosas, pero en el fondo persisten


las razones y motivos para mantener mecanismos de control de acceso sobre diferentes
áreas que se desea proteger. Los métodos para procesar la información y los mecanismos de
validación han sufrido modificaciones sustanciales y constantes. Hoy en día tenemos
controles biométricos, magnéticos, visuales, etc., que acoplados a los microcontroladores y a
los ordenadores, generan sistemas muy efectivos para el control de acceso.

Dentro de estos procesos, tienen un rol muy importante los microcontrolador, que son
circuitos integrados programables que contiene todos los componentes de un computador
personal, aunque de limitadas prestaciones. La cantidad de productos electrónicos que
funcionan en base a uno o varios de estos microcontroladores aumenta de forma
exponencial. No es aventurado pronosticar que en el siglo XXI habrá pocos aparatos que
carezcan de microcontroladores.

La programación de los microcontroladores se ha realizado desde su invención por medio de


lenguaje Ensamblador, por lo que en la actualidad la mayoría de programadores lo utilizan,
encontrándose gran cantidad de información tanto en textos como en el Internet. Desde hace
unos años atrás se han venido desarrollando nuevas plataformas de programación basadas
en lenguajes tradicionales de alto nivel, tales como Pascal, Basic, C, entre los principales. El
objetivo, es hacer que la programación de los microcontroladores se oriente a solucionar el
problema, dejando a un lado la laboriosa configuración de registros que se realiza en los
lenguajes ensambladores. La programación en estos lenguajes es de hecho más sencilla,
debido a que sus palabras reservadas y estructuras son similares al lenguaje natural en
idioma ingles, lo que hace fácil recordarlas y el nombre de estas nos sugiere su aplicación de
manera intuitiva. De igual forma su estructura y bucles son simples y de fácil aplicación, muy
similares a las utilizadas en los lenguajes de computadoras.

La programación en lenguaje C, es una de las más populares, debido a la trayectoria como


lenguaje de computadora, entre los compiladores mas conocidos se destacan Hi Tech, Mikro
C, Pic C de la Ccs Inc entre los más conocidos en Internet. Pic C es uno de los compiladores
de lenguaje C que más usuarios ha acaparado, debido principalmente a que utiliza C ANSI, la
sencillez con que gestiona las interrupciones, inserción de código en Ensamblador, la gran
cantidad de librerías con que viene incorporado su compilador y otras funciones que se verá
mas adelante con detalle.

En el presente proyecto, el control de Acceso se basa principalmente en el uso de


microcontroladores y ordenadores, gestionados a través del lenguaje C, en sus formas Pic C
compiler de la Ccs Inc para los microcontroladores PIC y Visual C# 2005, de Microsoft
Corporation para el ordenador. Una de las características principales del sistema
desarrollado, esta basado en las comunicaciones entre dispositivos, para lo cual se ha
implementado el Bus I2C para la comunicación entre microcontroladores y la interfaz de
comunicación RS-232 para la comunicación entre Microcontrolador y PC.

La elaboración del presente trabajo es la recopilación de un cúmulo de conocimientos


tecnológicos muy importantes, a fin de que su contenido sea aprovechado por estudiantes de
nuestra especialidad, o personas que se interesen o requieran de los conocimientos
recopilados en este texto.

Eduardo Mendoza Merchán

Luís Chacón Buñay


CAPÍTULO I

SISTEMAS DE CONTROL DE ACCESO

1.1.- Antecedentes:

Los controles de acceso son sistemas muy antiguos, que nacieron por la necesidad de
proteger y controlar el acceso a ciertas áreas y lugares. Esta protección se ha visto
motivada inicialmente por temor que personas ajenas al entorno, delincuentes o
enemigos puedan robar y/o extraer material valioso o información de acuerdo a
criterios personales, sociales, comerciales, etc. Muchas obras majestuosas como por
ejemplo palacios, bases militares, se caracterizaban por sus muy particulares
métodos de acceso, los cuales fueron construidos de tal forma que sus principales
vías de acceso eran diseñadas con puentes que se elevaban mediante mecanismos
especiales, quedando así abajo un círculo de agua y caimanes que rodeaban dicho
castillo o fortaleza. En tal sentido, el acceso a estas edificaciones no sólo era posible
suministrando un nombre. En efecto, las palabras claves (passwords), eran utilizadas
por algunas personas para acceder al castillo, así como señas de reconocimiento
visual, o algún objeto en particular, como por ejemplo un anillo o un sello.

En la actualidad muchas cosas han cambiado, debido principalmente al incesante


avance de la tecnología, pero en el fondo persisten las razones y motivos para
mantener mecanismos de control de acceso sobre áreas e información que se desea
proteger. Los mecanismos de validación han sufrido modificaciones: hoy en día
tenemos controles biométricos, magnéticos, visuales, etc. (ver figura 1.1).

Figura 1.1 Distintos mecanismos de control de acceso


1.2.- Nociones del Control de Acceso Discrecional.

La estrategia de control de acceso está basada en la idea de que los sujetos acceden a
los objetos en base a su identidad y a unas reglas de autorización, que indican para
cada sujeto, las acciones que puede realizar sobre cada objeto del sistema.

Con esta estrategia, si un usuario desea realizar una operación sobre un objeto, se
busca en el sistema una regla de autorización que le dé permiso para realizar esa
operación sobre ese objeto, y si no se encuentra se le deniega el acceso. El motivo
por el que a este mecanismo de control de acceso se le llama ‘discrecional’ es porque
el usuario puede otorgar la autorización de acceso a otros usuarios. La forma más
común de administrar las autorizaciones es aplicando el concepto de ‘propiedad’, de
forma que cada objeto pertenece a un propietario que es responsable de otorgar o
revocar los derechos de acceso sobre los objetos. A continuación se realiza un breve
análisis de las principales variantes de estas estrategias:

1.2.1.- Autorización Positiva y Negativa.

Según la autorización positiva, la existencia de la regla de autorización indica que se


puede realizar el acceso, mientras que la no existencia de la misma prohíbe el acceso.
En cambio mediante la autorización negativa, el acceso se permite sólo cuando no
existe una regla de autorización negativa, mientras que la existencia de la regla
prohíbe el acceso.

La principal diferencia es que en el caso de autorización positiva, si un sujeto no


tiene autorización, en algún momento se puede producir una propagación de
privilegios de tal forma que otro sujeto le ceda el acceso, en cuyo caso estaría
burlando el control de acceso. Eso no puede suceder con el mecanismo de
autorización negativa.

1.2.2.- Autorización Fuerte y Débil.

Autorizaciones fuertes, tanto positivas como negativas son aquellas que no pueden
ser invalidadas, mientras que las débiles sí pueden ser invalidadas por otras
autorizaciones fuertes o débiles, de acuerdo a unas reglas específicas.

1.2.3.- Autorizaciones Explícitas e Implícitas.

Las autorizaciones implícitas son automáticamente derivadas por el sistema desde el


conjunto de autorizaciones explícitas, de acuerdo a un conjunto de reglas. Por
ejemplo, una regla de derivación puede ser usada para expresar que un sujeto puede
acceder a un objeto dado sólo si otro sujeto tiene un acceso explícito denegado.
Existen diversas políticas de propagación de autorizaciones dependiendo entre otras
cosas del tipo de sujeto de que se trate. Por ejemplo, si se trata de roles que forman
una jerarquía, al asignar una autorización positiva, ésta se propagaría hacia todos los
roles superiores en la jerarquía, y si la autorización es negativa, se propagaría hacia
los roles inferiores en la jerarquía. En cambio, si se trata de grupos, la aproximación
más utilizada consiste en la propagación de la autorización, tanto si es positiva como
si es negativa a todos los elementos del grupo.

1.2.4.- Autorizaciones basadas en el contenido.

Condicionan el acceso a un objeto dado el contenido de uno o más de sus


componentes. Por ejemplo, restringir el acceso de datos de personas que cobre más
de 50 millones al año.

Las bases de datos que utilizan esta política de control de acceso son susceptibles de
recibir ataques por parte de sujetos que aparentemente realicen un acceso correcto a
los datos, pero que en realidad han recibido el permiso de acceso por parte de otro
sujeto de forma fraudulenta.

1.2.5.- Control de Acceso Obligatorio.

Consiste en la clasificación de tanto los sujetos como los objetos en el sistema. Una
‘clase de acceso’ es asignada a cada objeto y cada sujeto. Una ‘clase de acceso’ es
un elemento de un conjunto de ‘clases’ parcialmente ordenadas. Mientras que la
forma más general de conjunto de ‘clases de acceso’ es un conjunto de ‘etiquetas’, a
veces se define como un conjunto formado por dos componentes, un ‘nivel de
seguridad’ y un ‘conjunto de categorías’. Cada ‘nivel de seguridad’ es un elemento
de un conjunto jerárquicamente ordenado como ‘alto secreto’ (TS), ‘secreto’ (S),
‘confidencial’ (C) y ‘sin clasificar’ (U), donde TS > S > C > U. El conjunto de
categorías es un subconjunto de un conjunto desordenado, donde los elementos
pueden reflejar áreas funcionales o diferentes competencias como por ejemplo
‘finanzas’, ‘administración’, ‘ventas’ y ‘compras’ para sistemas comerciales.

1.2.6.- Control de Acceso basado en Roles.

En RBAC (Role-Based Access Control), los permisos se asocian con roles, y a los
usuarios se les hace miembros de los roles. De este modo los usuarios consiguen
permisos. Esto simplifica considerablemente la gestión de permisos. Los roles
representan a cada grupo funcional de las organizaciones, agrupando en cada uno de
ellos a aquellos usuarios que realizan funciones y tienen responsabilidades similares.
Por ejemplo, los roles en una entidad bancaria podrían ser Cajero y Contable, donde
cada uno de ellos tiene un conjunto de privilegios. Algunos de estos privilegios
pueden ser como en este caso jerárquicos y compartidos.

Mediante este simple mecanismo es muy sencillo llevar a cabo ciertas acciones,
como por ejemplo, intercambiar a los usuarios de un rol a otro, o incluir nuevos
permisos en los roles, o sustraer permisos en los roles, etc.

1.2.7.- Control de Acceso basado en Restricciones.

Una técnica de control de acceso mucho más flexible que las anteriores, pero con
poca experiencia en su utilización es la conocida como ‘Control de Acceso Basado
en Restricciones’, donde las restricciones expresadas en un lenguaje formal son
usadas para especificar asociaciones generales entre los usuarios y sus
autorizaciones. Esta estrategia permite tener tanto restricciones estáticas como
dinámicas, por ejemplo considerando factores como las horas del día en las que
estará vigente una autorización
1.3.- Análisis general de los sistemas de control de acceso.

El presente capítulo tiene por objeto analizar de forma general los distintos tipos de
controles de acceso que existen en la actualidad y la diversidad de mecanismos que
existen para verificar la identidad del usuario, su nivel de accesibilidad y demás
complementos que han ido evolucionando de forma paralela al avance de la
tecnología, así como a los constantes cambios que sufren debido a los nuevos
requerimientos y exigencias de las empresas y usuarios.

En la actualidad, cada computador que se adquiere en una tienda, por lo general ya


viene equipado con alguna forma o mecanismo de control de acceso el cual es
provisto y configurado en el sistema operativo, como por ejemplo en Windows Xp se
configura inicios de sesión para cada usuario, en el cual se puede optar por una clave
cada vez que inicie su cuenta de usuario. Partiendo de esta base, siempre existirá un
esquema (framework) sugerido que mejore el nivel de seguridad que existe para un
momento determinado, y que tiene un mínimo efecto sobre los costos y el esfuerzo
de uso.

Con el objeto de facilitar el entendimiento de los conceptos y terminología a ser


utilizadas en este capítulo, en la figura 1.2 se muestra la relación entre algunos de
los términos manejados. En este sentido, los “servicios de seguridad” podrían incluir:
integridad, confidencialidad, disponibilidad y control de acceso

Figura 1.2. Terminología utilizada en relación con seguridad y control de acceso


En la medida que se ha avanzado en los conceptos de seguridad, se puede observar
que nos vemos obligado a profundizar en términos tecnológicos. Es así como nuevas
condiciones deben ser identificadas para poder establecer los mejores mecanismos de
seguridad y de control de acceso a la información. En tal sentido, podemos reconocer
que existen, al menos, cuatro (4) mecanismos complementarios de un sistema de
control de acceso, a saber: (a) identificación de usuario, (b) autenticación de usuario,
(c) la verificación de la autenticación, y (d) re-autenticación.

Tal como hemos mencionado anteriormente, existen al menos cuatro (4) diferentes
mecanismos que pueden estar inmersos en un sistema de control de acceso (Ver
figura 1.3).

Figura 1.3. Cuatro mecanismos complementarios de un sistema de control de acceso

1.3.1.- El primer mecanismo de un sistema de control de acceso está diseñado para


identificar a un usuario que se encuentra registrado en un determinado sistema. Esto
se realiza mediante un “User ID”.

1.3.2.- El segundo mecanismo de un sistema de control de acceso consiste de la


autentificación de un usuario, es decir, determinar que un usuario es quien dice ser.
Esto se realiza por medio de “algo que se conoce”, representado básicamente por: (a)
una contraseña o clave de acceso (password), (b) número de identificación personal
(PIN), (c) entrada asociativa, en la que el sistema autentica al usuario mediante la
secuencia de palabras o conceptos asociados que el sistema debe almacenar, y (d)
respuesta desafiante, en la que el sistema proporciona una o varias preguntas que
sólo el usuario identificado puede presumiblemente responder. Asimismo, este
mecanismo se puede caracterizar por “algo que el usuario posee”, como por ejemplo:
(a) tarjetas inteligentes, (b) tarjetas de crédito o débito, (c) un token, (d) algún dato
como la cédula de identidad o pasaporte, entre otros.

1.3.3.- El tercer mecanismo de un sistema de control de acceso está diseñado


debido a la debilidad inherente que tiene una contraseña o clave de acceso
(password). Su propósito u objetivo es el probar la autenticidad del usuario mediante
la utilización de, por ejemplo, “algo que se es”, pudiendo utilizar características
inherentes al cuerpo del agente externo o usuario, a saber: (a) tono de voz, es decir, el
reconocimiento de la voz, (b) las huellas dactilares, (c) patrones de la retina o iris del
ojo, (d) el ADN, el reconocimiento de los surcos de los labios, (e) reconocimiento
facial, entre otros. Este mecanismo se refiere a la verificación de autenticación.

1.3.4.- El cuarto mecanismo de un sistema de control de acceso contempla los


procesos que aseguran que un usuario permanece autenticado, mediante la re-
autenticación. Esto se puede llevar a cabo mediante procesos automáticos que se
“despiertan” según la permanencia del usuario que está interactuando con un
determinado sistema.

Cada uno de estos mecanismos esta apoyado por una “tecnología de seguridad”, por
ejemplo: palabras claves (passwords), los tokens inteligentes o de seguridad,
certificados digitales, los dispositivos de reconocimiento de huellas digitales, palma
de la mano, iris del ojo, etc. Estas tecnologías están presentes en una gran variedad
de “productos de seguridad”. La figura 1.4, muestra las diferentes tecnologías que
apoyan el mecanismo de autenticación de usuarios y su relación con la complejidad
de implantación.

1.4.- Mecanismos de seguridad utilizados en los sistemas de control de acceso

Existen una infinidad de tipos y modelos de control de acceso, que dependen del
nivel de seguridad, la magnitud del campus que controlen, las tecnologías usadas, la
integración en red con ordenadores y bases de datos, etc.
Figura 1.4. Tecnologías que apoyan el mecanismo de autenticación

A continuación se ha realizado un breve resumen de los sistemas de control de


acceso, vistos desde el punto de vista de los mecanismos de seguridad.

Control de Acceso basadas en:

• Teclados, bandas magnéticas y Tarjetas Chip


• Tarjetas Inteligentes
• Etiquetas y Llaveros Inteligentes
• Lector de huellas dactilares o escáner
• Lectores subcutáneos de huellas dactilares
• Torniquetes, molinetes, puertas batientes

1.4.1.- Control de Acceso basadas en teclados, bandas magnéticas, y Tarjetas


Chip

Existen una infinidad de modelos de sistemas de control de acceso, sean estos


autónomos, o dependientes de un ordenador, los mas comunes en nuestro medio, y
que de cierta forman han comenzado a ser desplazados en los países desarrollados
por las nuevas tecnologías son los sistemas basados en teclados, tarjetas con banda
magnéticas y tarjetas chip, Aunque no están siendo desplazados del todo, puesto que
en muchos modelos se complementan con otras tecnologías para generar sistemas
mas eficaces.
Figura 1.5 a) Tarjeta chip, b) tarjeta magnética, c) control de acceso con teclado

Cuando un control de acceso se basa en un teclado, en el microprocesador se


almacenan usuarios, y cada uno de los cuales contiene una clave cambiable y que se
almacena en alguna memoria generalmente de tipo eeprom, puede ser autónoma, es
decir que funciona sin necesidad de estar interconectado a un ordenador o puede ser
parte de un sistema de control de acceso.

Las tarjetas magnéticas contienen una banda magnética (llamada a veces magstripe
como abreviación de magnetic stripe) es toda aquella banda oscura presente en
tarjetas de crédito, abonos de transporte público o carnets personales que está
compuesta por partículas ferromagnéticas embebidas en una matriz de resina
(generalmente epoxi) y que almacenan cierta cantidad de información mediante una
codificación determinada que polariza dichas partículas. La banda magnética es
grabada o leída mediante contacto físico pasándola a través de una cabeza
lectora/escritora gracias al fenómeno de la inducción magnética.

Estas tarjetas contrastan con la nueva generación de tarjetas inteligentes que


contienen un chip con contactos metálicos, o tarjetas sin contacto que usan un campo
magnético o radiofrecuencia (RFID) para la lectura a una distancia media.

Las tarjetas chip, muy usadas hoy en día en la telefonía (tarjetas telefónicas),
contiene en su interior un número de serie que es único y que, además, es imposible
de modificar. Eso nos indica que la tarjeta además de ser único sobre todo el mundo
es imposible de alterar. Entonces, se aprovecha eso para diseñar sistemas de
seguridad capaz de leer la parte inicial de la tarjeta, comparar el número con los
almacenados en la memoria E2PROM interna del circuito y permitir o impedir el
acceso de la persona a determinado lugar o recinto.
De nada sirve que el sistema de lectura de la tarjeta explore profundamente en la
memoria para garantizar que el código es válido si cualquiera con un martillo o
destornillador puede quitar de su lugar el dispositivo lector y puentear los cables que
accionan la apertura de la puerta o la traba. Para que esto no suceda el zócalo lector
de la tarjeta debe estar montado por un lado y la circuitería por el otro, haciendo que
si un malintencionado quita el lector no logre accionar el sistema puenteando cables.

Figura 1.6 Lector de tarjeta chip

1.4.2.- Sistemas de Control de Acceso basados en Tarjetas Inteligentes.

Los sistemas para el control de acceso basados Tarjetas Inteligentes permiten


gestionar de forma sencilla la seguridad del acceso, ya sea para una puerta, o para un
entorno de red de varios edificios. Tendrá el control sobre quien tendrá acceso a
través de cualquier puerta conectada, a cualquier hora del día. Las personas sin el
nivel de seguridad suficiente no tendrán acceso a las zonas reservadas.

Figura 1.7 Control de acceso con tarjeta inteligente

Mediante la tecnología de las tarjetas inteligentes, los lectores de tarjetas están


colocados fuera del alcance de la vista - No tendrá que sacar la tarjeta de su cartera o
bolso para utilizarla. Al contrario que los sistemas de banda magnética, las tarjetas
son leídas de forma automática en el instante en que la presente. EL lector leerá su
tarjeta a través de su cartera en ¼ de segundo.

La mayoría de las Tarjetas Inteligentes, utilizan la reconocida tecnología para la


lectura basada en Radio Frecuencia (RF). Esta proporciona una red de lectura
consistente que no está afectada por la mayoría de las condiciones externas.

Figura 1.8 Tarjetas Inteligentes

Cada lector de Tarjetas Inteligentes transmite un campo de frecuencia de 125 Khz.


(campo electromagnético), el cual es recibido por la antena dentro de la tarjeta
inteligente. El lector posee don bandas de lectura dentro de este campo; una banda
interna y una externa, y estas son controladas y osciladas rápidamente mediante el
microprocesador interno del lector.

El campo del lector tiene la apariencia de dos circunferencias, una en la parte frontal
del lector y otra en la parte posterior. Esto significa que si monta el lector sobre
cristal o cualquier superficie no metálica, podrá leer la tarjeta a través de ambos lados
del escáner. (Otra ventaja sobre las tarjetas de banda magnética).

Por otro lado, el microchip de la tarjeta Inteligente, es un dispositivo pasivo que


contiene un código de fábrica único y que no puede ser duplicado. Esto hace de las
tarjetas inteligentes un sistema muy seguro. Al entrar la tarjeta a una distancia de
entre 100mm y 150mm del lector, se activa automáticamente mediante la energía del
campo.

A pesar de que la tarjeta será leída con mayor velocidad dependiendo del ángulo, la
posición exacta de la tarjeta dentro del campo no es importante (al contrario que los
lectores de banda magnética). Una vez activada, la tarjeta responde transmitiendo su
número único de identificación mediante una señal de 125KHz. Los 34 billones de
combinaciones posibles hacen prácticamente imposible la duplicación. Cada número
de identificación de las tarjetas es testado para comprobar la seguridad y los datos,
garantizando que el número no se leerá de forma incorrecta.

Las tarjetas inteligentes no tienen batería. Esto significa que cada tarjeta tiene una
vida teóricamente infinita, independientemente del número de veces que se utilice.

1.4.3.- Etiquetas y Llaveros Inteligentes

Las etiquetas y llaveros inteligentes utilizan la misma tecnología basada en


microchips que las tarjetas inteligentes pero poseen una antena más pequeña
compuesta de bobina de cobre con un núcleo de ferrita de hierro. El chip y la antena
están sellados en una funda de cristal endurecido de alta calidad, similar a la utilizada
en los chips para la identificación de animales. Debido a que son más pequeños, la
distancia de lectura es también inferior. Los llaveros son de un tamaño reducido e
incorporan su número propio de identificación impreso en el exterior para remisión.

Figura 1.9 Llavero y tarjeta inteligente.


Los llaveros inteligentes están disponibles en todo tipo de formas y tamaños; siendo
muy populares por sus dimensiones y por lo práctico que resulta para llevarlos.

1.4.4.- Sistemas de control de acceso basados en huellas dactilares.

1.4.4.1.- La identificación biométrica

La identificación biométrica es la verificación de la identidad de una persona basado


en características de su cuerpo o de su comportamiento, utilizando por ejemplo su
mano, el iris de su ojo, su voz o su cara en el reconocimiento facial. Los métodos de
identificación biométrica, como aquellos usados en las películas de James Bond, el
inolvidable agente 007, que nos parecían increíbles hace unos años, son ahora una
realidad.

Figura 1.10 Dedo pulgar y su huella dactilar

Aunque los estudios biométricos no son perfectos, sí son una herramienta muy
poderosa para identificar personas. De todos los sistemas de identificación
biométrica existentes, las huellas dactilares son las únicas legalmente reconocidas
como prueba fidedigna de identidad. Es un sistema que además de ser efectivo, es
cómodo de aplicar y la autenticación se obtiene rápidamente.

Las huellas digitales son características exclusivas de los primates. En la especie


humana se forman a partir de la sexta semana de vida intrauterina y no varían en sus
características a lo largo de toda la vida del individuo. Son las formas caprichosas
que adopta la piel que cubre las yemas de los dedos. Están constituidas por
rugosidades que forman salientes y depresiones. Las salientes se denominan crestas
papilares y las depresiones surcos interpapilares. En las crestas se encuentran las
glándulas sudoríparas. El sudor que éstas producen contiene aceite, que se retiene en
los surcos de la huella, de tal manera que cuando el dedo hace contacto con una
superficie, queda un residuo de ésta, lo cual produce un facsímil o negativo de la
huella.

Las huellas digitales se toman de los dedos índices de ambas manos, tanto por la
comodidad al capturarlas, como porque estos dedos están menos propensos que los
pulgares a sufrir accidentes que dejen cicatriz.

Son únicas e irrepetibles aún en gemelos idénticos, debido a que su diseño no está
determinado estrictamente por el código genético, sino por pequeñas variables en las
concentraciones del factor del crecimiento y en las hormonas localizadas dentro de
los tejidos. Cabe señalar que en un mismo individuo la huella de cada uno de sus
dedos es diferente.

Para la identificación de huellas, es conveniente contar con la traza digital completa,


no obstante, pueden utilizarse fracciones de las mismas, con el inconveniente de que
mientras más pequeño sea el marcado, menor es el margen de seguridad. El equipo
requerido para el manejo del sistema consta de:

• Lector de huella dactilar. Los hay de varios modelos, permiten el ingreso de


la huella ya sea para registrarla o para validarla.

• Terminales, equipo de cómputo estándar. Envían información pre-procesada


al servidor.

• Servidor. Se encarga de la validación de la huella y del manejo de los


dispositivos ópticos que permiten almacenar y recuperar información
solicitada por el servidor.

• Software de aplicación. Basado en algoritmos para codificación y


comparación.
En el momento de la bioidentificación, el sistema debe responder a dos preguntas:
¿Es la persona quien dice ser?

Para ello checa si los datos de la persona a identificar, corresponden con los
guardados en una base de datos.

¿Quién es la persona?

Este es el proceso de autenticación, es más técnico que el anterior, ya que incluye


varias comparaciones con aquellas huellas que le sean similares, contenidas en
muchas bases de datos, con el fin de poder diferenciarlas. Para ello compara la huella
que la persona registra en un escáner óptico, con aquella registrada previamente.
Cabe señalar que si el sistema usa las huellas digitales de los índices de ambas
manos, ofrecerá un mayor margen de seguridad.

La identificación biométrica por medio de huellas digitales tiene un grado de


seguridad tan alto debido a que nadie podría sustraer, copiar o reproducir los
elementos usados en ella, ya que son elementos inherentes a su portador, sin embargo
puede estar sujeta a errores de:

a) Falsa aceptación.-

Cuando se acepta a alguien que No es; por ejemplo, alguien podría clonar una
credencial de identificación, o adueñarse de los números confidenciales de una
persona para hacer una transacción en perjuicio de su legítimo dueño y hasta
falsificar su firma.

b) Falso rechazo.-

Consiste en no aceptar a alguien que Sí es, pero su identificación no se pudo realizar.


Debido a múltiples motivos, como puede ser: que la imagen de la huella esté muy
dañada, o a que tenga una capa de cemento o de pintura, o a que el lector no tenga la
calidad suficiente para tomar correctamente la lectura.
Figura 1.11 lector de huellas dactilares

En lugar de las tradicionales llaves, por ejemplo los arrendatarios podrán escanear
sus huellas dactilares para acceder a su apartamento, un rascacielos en construcción
en el vecindario de Yaletown, situado en la parte baja de Vancouver."Esta tecnología
se está utilizando en edificios de finanzas, gobiernos o para aplicaciones de alta
seguridad", explicó el promotor del proyecto, James Schouw. "Pero va a llegar a ser
más barata, más solvente, y a todo el mundo al final le concierne la seguridad".

1.4.5.- Lectores subcutáneos de huellas dactilares

Se han desarrollado productos para el reconocimiento de las huellas dactilares


“Subcutáneas” las cuales se encuentran bajo la capa de piel muerta del individuo.
Esta tecnología, combinada con sistemas para monitorizar el Tiempo de Asistencia y
el Control de Acceso aportará una gran seguridad a las empresas.

El sistema funciona rebotando ondas electromagnéticas, similares a las ondas de


radio, en el tejido vivo y el flujo sanguíneo bajo la piel de las personas. Estas
reflexiones son grabadas para luego construir la imagen de la huella, que es utilizada
posteriormente para confirmar la identidad del individuo. La tecnología de los
lectores de huellas subcutáneos le proporcionan mayor precisión y seguridad, debido
a que la superficie de la huella está contaminada con suciedad o grasa, el sistema
investiga bajo la capa de piel donde se encuentra la auténtica huella dactilar, todo en
menos de ½ segundo.
Figura 1.12 Lectores subcutáneos de huellas dactilares

Otros lectores de huellas dactilares basados en sistemas ópticos o de capacitancia no


funcionan en hasta un 30% de la población debido a su dependencia en la capa
externa de piel. Condiciones normales de la piel como la sequedad o el desgaste no
permiten a estos sistemas contrastar las huellas correctamente. Estos sistemas son
sensibles incluso a pequeñas cantidades de grasa, tierra o marcas de rotulador.

El T4210 es un lector de huellas dactilares subcutáneos que se conecta directamente


en el puerto USB del PC. La sencillez de su diseño y la posibilidad de utilizarlo de
forma independiente lo convierten en una herramienta ideal para garantizar la
seguridad de su ordenador portátil o su entorno de red; controlando el acceso de lo
ordenadores a la red.

El lector de huellas dactilares T4210 incrementa la seguridad a la vez que reduce el


número de contraseñas necesarias. Simplemente con un dedo podrá acceder a la
información confidencial de su PC o su entorno de red. Para acceder, introduzca su
nombre y presente su dedo en el sensor del T4210. En menos de un segundo la huella
presentada será comparada con la huella almacenada en el registro del sistema. El
registro de usuarios es rápido, intuitivo y no requiere un elevado conocimiento de
informática.

Figura 1.13 Lector de huellas dactilares T4210


Funcionamiento:

La gama de lectores biométricos subcutáneos utiliza una tecnología nueva que lee
debajo de la capa de piel (muerta) del individuo. Es en la capa subcutánea de la piel
donde reside la auténtica huella dactilar. El sistema funciona rebotando ondas
electromagnéticas, similares a las ondas de radio, en el tejido vivo y el flujo
sanguíneo bajo la piel de las personas.

Figura 1.14 Detalle de la capa subcutánea de la piel

Estas reflexiones son grabadas para luego construir la imagen de la huella, que es
utilizada posteriormente para confirmar la identidad del individuo.

Figura .1.15 Reflexiones en lector subcutáneo de huellas dactilares

1.4.6.- Otros controles de acceso

Existe otros tipos de control de acceso, que no han sido mencionado, tales como
Torniquetes, molinetes, puertas batientes, etc., que son muy utilizados en centros
comerciales, terminales terrestres, aeropuertos, etc. y que además de servir para
contabilizar el numero de individuos o vehículos que visitan dichos locales, generan
tarjetas en donde consta la fecha y hora para luego sirve para determinar como por
ejemplo el costo por garaje.

Existen diversidad de estos controles de acceso, creados para locales o lugares


específicos y con funciones que se adaptan al las condiciones que se requieran. A
continuación se muestran fotos de algunos modelos y tipos de estos conocidos
controles de acceso.

Figura 1.16 Controles de acceso peatonal y vehicular

1.5.- Cerraduras Especiales

En lo respecto a los controles de acceso de personal, es conveniente hacer una rápida


revisión de algunos modelos y tipos de cerraduras, que al fin y al cabo son el
elemento final de toda la cadena de seguridad implementado en un sistema de control
de acceso y de su implementación depende en gran medida la eficacia del sistema.
1.5.1.- Cerradura electromagnética

Figura 1.5 Cerradura electromagnética.

Las cerraduras electromagnéticas son ideales para Sistemas de Control de Acceso y


puertas para salida de emergencia, Resisten entre 300 y 600 kg al empuje y el
montaje es muy sencillo ya que por lo general se entregan con herrajes de sujeción
para puertas de vidrio, madera, metal, etc. Entre sus principales características
podemos mencionar:

• Son altamente resistentes y duraderas.


• Su alimentación es de 12 V. DC (en la mayoría de los casos)
• Son ideales para lugares con alto nivel tránsito

1.5.2.- Cerradura electromecánica (Multipla 2000)

Figura 1.16 Cerradura múltipla 2000


Esta cerradura trabaja con un electroimán que acciona un pistillo en el sistema de la
cerradura, el cual dispara un mecanismo que permite retraer los bloques que aseguran
la puerta, sus características principales de esta cerradura son:

- Cierre más suave


- Traba más segura
- Pistillo autobloqueante
- Volts: 8 / 12 (opc. 24)
- Reversible
- Distancia de entrada posterior graduable de 50 a 70 mm
- Cerradero graduable en altura
- Distancia entre agujeros de fijación unificada

1.5.3.- Cerradura electronica Rench

Se trata de una cerradura electrónica accionada mediante un teclado. Utiliza 4 pilas


AA.

Figura 1.17 Cerradura electrónica Rench

Los modelos disponibles se agrupan en: Hogar-Hotel (2 claves), Comerciales,


Bancarias y Bancarias Plus. Las cerraduras Comerciales poseen cierre de pistillo
programable y operan con una clave maestra y diferente cantidad de usuarios según
el modelo.

Las cerraduras Bancarias incluyen lo anterior más retardo, doble usuario, conexión a
alarma silenciosa e inhibición a distancia.

La Bancaria Plus incluye lo anterior más opciones de auditoria y display.


1.5.4.- Cerradura electrónica para múltiples aplicaciones

Figura 1.18 Cerradura para múltiples aplicaciones

Este tipo de cerradura es apta para múltiples aplicaciones: puertas de garajes,


ascensores, conexión y desconexión de sistemas de seguridad, etc. tiene siete códigos
para siete usuarios diferentes mas un master, Indicadores luminosos y sonoros: luz
verde es apertura, luz roja es pulsación incorrecta, alimentación 6 voltios (cuatro
pilas AA no incluidas) duración media estimada de las pilas, un año. Alimentación
desde el exterior de emergencia, indicador de batería baja Función apertura
inmediata
CAPÍTULO II

Microcontroladores PIC de gama media.

2.1.- Introducción:

Desde la invención del circuito integrado, el desarrollo constante de la electrónica


digital ha dado lugar a dispositivos cada vez mas complejos. Entre ellos los
microprocesadores y los microcontroladores, los cuales en la actualidad se
consideran básicos en las carreras de ingeniería electrónica.

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. El nombre actual no es un
acrónimo, en realidad, el nombre completo es PICmicro, aunque generalmente se
utiliza como Peripheral Interface Controller (Controlador de Interfaz Periférico), ver
figura 2.1.
.

Figura 2.1 Microcontrolador Pic 16F877

El PIC original se diseñó para ser usado con la nueva UCP (Unidad Central de
proceso) de 16 bits CP16000. Siendo en general una buena UCP, ésta tenía malas
prestaciones de E/S, y el PIC de 8 bits se desarrolló en 1975 para mejorar el
rendimiento del sistema quitando peso de E/S a la UCP, El PIC utilizaba micro
código simple almacenado en la ROM para realizar estas tareas; y aunque el término
no se usaba por aquel entonces, se trata de un diseño RISC que ejecuta una
instrucción cada 4 ciclos del oscilador.
En 1985, dicha división de microelectrónica de General Instruments se convirtió en
una filial y el nuevo propietario canceló casi todos los desarrollos, que para esas
fechas la mayoría estaban obsoletos. El PIC, sin embargo, se mejoró con EPROM
para conseguir un controlador de canal programable. Hoy en día multitud de PICs
vienen con varios periféricos incluidos (módulos de comunicación serie, UARTs,
núcleos de control de motores, etc.) y con memoria de programa desde 512 a 32.000
palabras (una palabra corresponde a una instrucción en ensamblador, y puede ser 12,
14 , 16 bits, 17 o 18 bits dependiendo de la familia específica de PICmicro).

2.2.- El microcontrolador Pic

Es un circuito integrado programable que contiene todos los componentes de un


computador. Se emplea para controlar el funcionamiento de una tarea determinada y,
debido a su reducido tamaño, suele ir incorporado en el propio dispositivo al que
gobierna. Esta última característica es la que le confiere la denominación de
«controlador incrustado» (embedded controller).

Figura 2.2 Tarjeta con microcontrolador PIC 16F84

El microcontrolador es un computador dedicado. En su memoria sólo reside un


programa destinado a gobernar una aplicación determinada; sus líneas de
entrada/salida soportan el conexionado de los sensores y actuadores del dispositivo a
controlar, y todos los recursos complementarios disponibles tienen como única
finalidad atender sus requerimientos. Una vez programado y configurado el
microcontrolador solamente sirve para gobernar la tarea asignada.

A continuación se realiza un breve resumen de los microcontroladores PIC:

2.2.1.- Juego de instrucciones y entorno de programación

El PIC usa un juego de instrucciones tipo RISC (Reduced Instruction Set Computer)
cuyo número puede variar desde 35 para PICs de gama baja a 77 para los de gama
alta. Las instrucciones se clasifican entre las que realizan operaciones entre el
acumulador y una constante, entre el acumulador y una posición de memoria,
instrucciones de condicionamiento y de salto/retorno, implementación de
interrupciones y una para pasar a modo de bajo consumo llamada sleep.

Microchip proporciona un entorno de desarrollo freeware (de distribución gratuita)


llamado MPLAB que incluye un simulador software y un ensamblador. Otras
empresas desarrollan compiladores C y BASIC. Microchip también vende
compiladores para los PICs de gama alta ("C18" para la serie F18 y "C30" para los
dsPICs) y se puede descargar una edición para estudiantes del C18 que inhabilita
algunas opciones después de un tiempo de evaluación. Además del compilador C de
Microchip, existen otros compiladores tales como CCS C, Hi tech, MiKroC,.

Para Pascal existe un compilador de código abierto, JAL, lo mismo que PicForth para
el lenguaje Forth. GPUTILS es una colección de herramientas distribuidas bajo
licencia GNU que incluye ensamblador y enlazador, y funciona en Linux, MacOS y
Microsoft Windows. GPSIM es otra herramienta libre que permite simular diversos
dispositivos hardware conectados al PIC.

2.2.2.- Programación del PIC

Para transferir el código de un ordenador al PIC normalmente se usa un dispositivo


llamado programador, ver figura 2.3. La mayoría de PICs que Microchip distribuye
hoy en día incorporan ICSP (In Circuit Serial Programming, programación serie
incorporada) o LVP (Low Voltage Programming, programación a bajo voltaje), lo
que permite programar el PIC directamente en el circuito destino. Para la ICSP se
usan los pines RB6 y RB7 como reloj y datos y el MCLR para activar el modo
programación aplicando una tensión entre 11 a 14 voltios DC. Existen muchos
programadores de PICs, desde los más simples que dejan al software los detalles de
comunicaciones, a los más complejos, que pueden verificar el dispositivo a diversas
tensiones de alimentación e implementan en hardware casi todas las funcionalidades.
Muchos de estos programadores complejos incluyen ellos mismos PICs
preprogramados como interfaz para enviar las órdenes al PIC que se desea
programar. Uno de los programadores más simples es el TE20, que utiliza la línea
TX del puerto RS232 como alimentación y las líneas DTR y CTR para mandar o
recibir datos cuando el microcontrolador está en modo programación. El software de
programación puede ser el ICprog, muy común entre la gente que utiliza este tipo de
microcontroladores.

Figura 2.3 programador PICSTART

Se pueden obtener directamente de Microchip muchos programadores/depuradores, a


continuación se lista los programadores mas usuales y conocidos:

Programadores
• PICStart Plus (puerto serie)
• Promate II (puerto serie)
• MPLAB PM3 (puerto serie y USB)
• ICD2 (puerto serie y USB)
• PICKit 1 (USB)
• IC-Prog 1.05
Depuradores integrados
• ICD2 (USB)
Emuladores
• ICE2000 (puerto paralelo, convertidor a USB disponible)
• ICE4000 (USB)
• PIC EMU
• PIC CDlite

2.2.2.- Tamaño de palabra

El tamaño de palabra de los microcontroladores PIC es fuente de muchas


confusiones. Todos los PICs (excepto los dsPIC) manejan datos en trozos de 8 bits,
con lo que se deberían llamar microcontroladores de 8 bits. Pero a diferencia de la
mayoría de UCPs, el PIC usa arquitectura Harvard, por lo que el tamaño de las
instrucciones puede ser distinto del de la palabra de datos. De hecho, las diferentes
familias de PICs usan tamaños de instrucción distintos, lo que hace difícil comparar
el tamaño del código del PIC con el de otros microcontroladores. Por ejemplo,
pongamos que un microcontrolador tiene 6144 bytes de memoria de programa: para
un PIC de 12 bits esto significa 4096 palabras y para uno de 16 bits, 3072 palabras.

2.2.3.- Características generales

Los PICs actuales vienen con una amplia gama de mejoras de hardware incorporadas:

• Núcleos de UCP de 8/16 bits con Arquitectura Harvard modificada


• Memoria de programa de hasta 128 kilobytes
• Puertos de E/S (típicamente 0 a 5,5 voltios)
• Temporizadores de 8/16 bits
• Tecnología Nanowatt para modos de control de energía
• Periféricos serie síncronos y asíncronos: USART, AUSART, EUSART ,USB
• Conversores analógico/digital de 8-10-12 bits, hasta 16 canales.
• Comparadores de tensión
• Módulos de captura y comparación PWM
• Controladores LCD
• Periférico MSSP para comunicaciones I2C, SPI, PSP.
• Memoria EEPROM interna con duración de hasta un millón de ciclos de
lectura/escritura
• Periféricos de control de motores
• Soporte de interfaz USB
• Soporte de controlador Ethernet
• Soporte de controlador CAN
• Soporte de controlador LIN

2.2.4.- Variaciones del PIC

a) PICs modernos

Los viejos PICs con memoria PROM o EPROM se están renovando gradualmente
por chips con memoria Flash. Así mismo, el juego de instrucciones original de 12
bits del PIC1650 y sus descendientes directos ha sido suplantado por juegos de
instrucciones de 14, 16 y 18 bits. Microchip todavía vende versiones PROM y
EPROM de la mayoría de los PICs para soporte de aplicaciones antiguas o grandes
pedidos, la nueva generación de PIC18 trae nuevas mejoras con respecto de sus
antecesoras, como por ejemplo tiene memoria plana, es decir toda la memoria de
programa es un solo bloque a diferencia de las anteriores versiones que disponían de
hasta cuatro bancos de memoria para organizar su memoria, otras ventajas como
mayor capacidad de direccionamiento, 77 instrucciones y más ventajas que se vera
más adelante en detalle.

b) Clones del PIC

Por todos lados surgen compañías que ofrecen versiones del PIC más baratas o
mejoradas. La mayoría suelen desaparecer rápidamente. Una de ellas que va
perdurando es Ubicorn (antiguamente Scenix) que vende clones del PIC que
funcionan mucho más rápido que el original. OpenCores tiene un núcleo del
PIC16F84 escrito en Verilog.

c) PICs wíreless

El microcontrolador rfPIC integra todas las prestaciones del PICmicro de Microchip


con la capacidad de comunicación wireless UHF para aplicaciones RF de baja
potencia. Estos dispositivos ofrecen un diseño muy comprimido para ajustarse a los
cada vez más demandados requerimientos de miniaturización en aparatos
electrónicos.

d) PICs para procesado de señal (dsPICs)

Los dsPICs son el último lanzamiento de Microchip, comenzando a producirlos a


gran escala a finales de 2004. Son los primeros PICs con bus de datos inherente de
16 bits. Incorporan todas las posibilidades de los anteriores PICs y añaden varias
operaciones de DSP implementadas en hardware, como multiplicación con suma de
acumulador (multiply-accumulate, o MAC), barrel shifting, bit reversion o
multiplicación 16x16 bits.

2.2.4.- PICs más comúnmente usados

• PIC12C508/509 (encapsulamiento reducido de 8 pines, oscilador interno,


popular en pequeños diseños como el iPod remote)
• PIC16F84 (Considerado obsoleto, pero imposible de descartar y muy
popular)
• PIC16F84A (Buena actualización del anterior, algunas versiones funcionan a
20 MHz, compatible 1:1)
• PIC12F629/675
• PIC16F628
• La familia PIC16F87X (los hermanos mayores del PIC16F84, con cantidad
de mejoras incluidas en hardware. Bastante común en proyectos de
aficionados)

2.2.5.- familia de la serie PIC18

La serie de microcontroladores PIC18 es una mejora de la arquitectura presente en la


familia PIC16 y PIC17, tiene un PC (Contador de programa) de 21 bits, lo que le
permite direccionar hasta 2Mbytes de memoria de programa, a continuación se lista
las principales características de la mas reciente familia de PICs de Microchip:
Figura 2.4 Microcontroladores de la familia PIC18

• 77 instrucciones
• Arquitectura orientada al uso de Lenguaje C
• Memoria de programa lineal hasta 2Mbytes
• Memoria de datos hasta 4Kbytes
• Capacidad de proceso hasta 10MIPS, clock: DC - 48Mhz
• Instrucciones de 16 bits y datos de 8 bits
• Multiplicador por hardware de 8x8 bits
• Pines soportan hasta 25mA en modo sink/source
• Hasta 4 pines para interrupciones externas
• Hasta 3 timers de 16 bits y hasta 2 timers de 8 bits
• Timer 1 con oscilador LP
• Hasta 5 módulos CCP, configurables como
o Entradas de captura de 16 bits de resolución
o Modo Comparador de 16 bits de resolución
o Salida PWM hasta 10 bits de resolución
 156Khz Max con 8 bits de resolución
 39Khz max con 10 bits de resolución

• Puerto MSSP que puede ser configurado como


o Puerto Serial SPI - 3 hilos. Soporta los 4 modos
o Puerto I2C Master y Slave

• Puerto serial USART direccionable


• Puerto Paralelo PSP
• Conversor Análogo Digital 10 bits, hasta 16 canales
• Detector de bajo voltaje programable (LVD) (genera interrupción)
• Comparadores analógicos
• Programación Serial en Circuito (ICSP)
• Protecciones
o Power On Reset (POR)
o Power Up Timer (PWRT)
o Oscilator Start Up Timer (OST)
o WatchDog timer con oscilador RC propio
o Protección de Código

• Generales
o Alimentación: 2.0V - 5.5V
o Rango temperatura
 Comercial: 0-70ºC
 Industrial: -40ºC a 85ºC
 Extendido: -40ºC a 125ºC
o 18 a 80 pines

2.2.5.- PICs en Internet

Se puede encontrar mucha información y documentación sobre PICs en Internet


principalmente por dos motivos: el primero, porque han sido muy usados para
romper los sistemas de seguridad de varios productos de consumo mayoritario
(televisión de pago, Play Station...), lo que atrae la atención de los crackers; y
segundo, porque el PIC16C84 fue uno de los primeros microcontroladores fácilmente
reprogramables para aficionados. Hay muchos foros y listas de correo dedicados al
PIC en los que un usuario puede proponer sus dudas y recibir respuestas.

Pero también podemos enfocar el tema de Internet a la posibilidad que se tiene de


desarrollar con estos, Sistemas SCADA vía Web debido a que pueden adquirir y
enviar datos al puerto serial de un computador utilizando transmisión UART, el
protocolo RS232, y USB, o la posibilidad de implementar el protocolo TCP/IP
directamente.
2.3.- Arquitectura interna de un microcontrolador PIC

Un microcontrolador posee todos los componentes de un computador, pero con unas


características fijas que no pueden alterarse. Las partes principales de un
microcontrolador son:

• Procesador
• Memoria no volátil para contener el programa
• Memoria de lectura y escritura para guardar los datos
• Líneas de E/S para los controladores de periféricos:
a) Comunicación paralelo
b) Comunicación serie
c) Diversas puertas de comunicación (bus l2C, USB, etc.)
• Recursos auxiliares:
a) Circuito de reloj
b) Temporizadores
c) Perro Guardián («watchdog»)
d) Conversores AD y DA
e) Comparadores analógicos
f) Protección ante fallos de la alimentación
g) Estado de reposo o de bajo consumo(sleep).

A continuación se pasa revista a las características más representativas de cada uno


de los componentes del microcontrolador.

2.3.1.- El procesador

La necesidad de conseguir elevados rendimientos en el procesamiento de las


instrucciones ha desembocado en el empleo generalizado de procesadores de
arquitectura Harvard frente a los tradicionales que seguían la arquitectura de von
Neumann. Esta última se caracterizaba porque la UCP (Unidad Central de Proceso)
se conectaba con una memoria única, donde coexistían datos e instrucciones, a través
de un sistema de buses 1 (véase figura 2.6).

Figura 2.5 En la arquitectura de «von Neumann» la UCP se comunicaba a través de un sistema


de buses
En la arquitectura Harvard son independientes la memoria de instrucciones y la
memoria de datos y cada una dispone de su propio sistema de buses para el acceso.
Esta dualidad, además de propiciar el paralelismo, permite la adecuación del tamaño
de las palabras y los buses a los requerimientos específicos de las instrucciones y de
los datos. También la capacidad de cada memoria es diferente (figura 2.7).

Figura 2.6 Arquitectura harvard

El procesador de los modernos microcontroladores responde a la arquitectura RISC


(Computadores de Juego de Instrucciones Reducido), que se identifica por poseer un
repertorio de instrucciones máquina pequeño y simple, de forma que la mayor parte
de las instrucciones se ejecuta en un ciclo de instrucción.

1
Los temas tratados están basados en el libro titulado “Microcontroladores PIC diseño práctico de
aplicaciones” de José M. Angulo Usategui 3era edición.
Otra aportación frecuente que aumenta el rendimiento del computador es el fomento
del paralelismo implícito, que consiste en la segmentación del procesador (pipe-line),
descomponiéndolo en etapas para poder procesar una instrucción diferente en cada
una de ellas y trabajar con varias a la vez. l alto rendimiento y elevada velocidad que
alcanzan los modernos procesadores, como el que poseen los microcontroladores
PIC, se debe a la conjunción de tres técnicas:
• Arquitectura Harvard
• Computador tipo RISC
• Segmentación

2.2.2.Memoria de programa

Es una memoria EEPROM, es decir, de lectura solamente (ROM = Read Only


Memory) que se programa por tensión (no necesita luz ultravioleta); es decir que
basta con introducir los datos con cierto nivel de tensión para que éstos borren el
programa anterior y graben uno nuevo, en la figura 2.8 se aprecia el mapa de
memoria de programa del PIC 16F877A.

Figura 2.7 Mapa de la Pila y memoria de programa del PIC 16F877A


Se llama ROM porque para grabarla se debe conectar el PIC al programador; luego
de que el PIC coloca estos datos en la plaqueta del dispositivo, sólo pueden ser
leídos, ya que entonces forman el programa del PIC. Esta memoria tiene una longitud
De memoria que varia del dispositivo desde 512 bytes hasta 128 Kbytes en
dispositivos mas avanzados como de la familia PIC18, con palabras de 14 , 16 y 18
bits. Digamos que tiene un ancho de 14 bits y una altura de 1.000 Bytes o que es una
memoria de 1.000 x 14.

Observe que dos de las posiciones de memoria tienen las indicaciones “vector de
reset” y “vector de interrupción”. Eso significa que, cuando se provoca un reset, el
microprocesador vuelve a la posición 0000 del programa y cuando se produce una
interrupción, a la posición 0004. Estos retornos forzados deben ser considerados al
diseñar el programa del microprocesador; es decir que el reset se produce porque la
señal externa pone el contador de programa en 000 y todo el programa se reinicia. En
cambio, cuando ingresa una señal por la pata de interrupción el contador de
programa va a 004 y la acción que, en general ocurre, es que se comienza a leer un
subprograma particular. Cuando este subprograma termina, el contador de programa
recupera el número que tenía en el momento de arribar la interrupción.

El microcontrolador está diseñado para que en su memoria de programa se


almacenen todas las instrucciones del programa de control. No hay posibilidad de
utilizar memorias externas de ampliación.

Como el programa a ejecutar siempre es el mismo, debe estar grabado de forma


permanente. Los tipos de memoria adecuados para soportar esta función admiten
cinco versiones diferentes:

a) ROM con máscara

En este tipo de memoria el programa se graba en el chip durante el proceso de su


fabricación mediante el uso de «máscaras». Los altos costes de diseño e instrumental
sólo aconsejan usar este tipo de memoria cuando se precisan series muy grandes.
b) EPROM

La grabación de esta memoria se realiza mediante un dispositivo físico gobernado


desde un computador personal, que recibe el nombre de grabador. En la superficie de
la cápsula del microcontrolador existe una ventana de cristal por la que se puede
someter al chip de la memoria a rayos ultravioletas para producir su borrado y
emplearla nuevamente. Es interesante la memoria EPROM en la fase de diseño y
depuración de los programas, pero su coste unitario es elevado.

c) OTP (Programable una vez)

Este modelo de memoria sólo se puede grabar una vez por parte del usuario,
utilizando el mismo procedimiento que con la memoria EPROM. Posteriormente no
se puede borrar. Su bajo precio y la sencillez de la grabación aconsejan este tipo de
memoria para prototipos finales y series de producción cortas.

d) EEPROM

La grabación es similar a las memorias OTP y EPROM, pero el borrado es mucho


más sencillo al poderse efectuar de la misma forma que el grabado, o sea,
eléctricamente. Sobre el mismo zócalo del grabador puede ser programada y borrada
tantas veces como se quiera, lo cual la hace ideal en la enseñanza y en la creación de
nuevos proyectos. El fabuloso PIC16F84 dispone de 64 K palabras de memoria
EEPROM para contener instrucciones y también tiene algunos bytes de memoria de
datos de este tipo para evitar que cuando se retira la alimentación se pierda
información.

Aunque se garantiza 1.000.000 de ciclos de escritura/borrado en una EEPROM,


todavía su tecnología de fabricación tiene obstáculos para alcanzar capacidades
importantes y el tiempo de escritura de las mismas es relativamente grande y con
elevado consumo de energía.
e) FLASH

Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar
en circuito al igual que las EEPROM, pero suelen disponer de mayor capacidad que
estas últimas. El borrado sólo es posible con bloques completos y no se puede
realizar sobre posiciones concretas. En las FLASH se garantizan 100.000 ciclos de
escritura-borrado.

Son muy recomendables en aplicaciones en las que sea necesario modificar el


programa a lo largo de la vida del producto, como consecuencia del desgaste o
cambios de piezas, como sucede con los vehículos.

Por sus mejores prestaciones está sustituyendo a la memoria EEPROM para contener
instrucciones. De esta forma Microchip comercializa dos microcontroladores
prácticamente iguales, que sólo se diferencian en que la memoria de programa de
uno de ellos es tipo EEPROM y la del otro tipo Flash. Se trata del PIC 16C84 y el
PIC 16F84, respectivamente. En la actualidad Microchip tiene abierta una línea de
PIC con memoria Flash cada vez más extensa y utilizada.

2.2.3.- Memoria de datos

La RAM (Random Acces Memory o traducido Memoria de Acceso Aleatorio) es una


memoria de lectura y escritura de 128 posiciones (en las nuevas versiones dispone de
hasta 4096 posiciones), pero que sólo tiene implementados las primeras 48
posiciones (desde 00 a 2F en hexadecimal). De estos 48 registros, los primeros 12
son fijos y cumplen un propósito determinado, en tanto que desde el 13 hasta el 48
son registros de propósito general, en donde el programa puede indicar que se
almacene un dato para ser tomado más tarde.

Los datos que manejan los programas varían continuamente, y esto exige que la
memoria que contiene debe ser de lectura y escritura, por lo que la memoria RAM
estática (SRAM) es la más adecuada, aunque sea volátil.
Hay microcontroladores que también disponen como memoria de datos una de
lectura y escritura no volátil, del tipo EEPROM. De esta forma, un corte en el
suministro de la alimentación no ocasiona la pérdida de la información, que está
disponible al reiniciarse el programa.

El PIC16C84, el PIC16F83 y el PIC16F84 disponen de 64 bytes de memoria


EEPROM para contener datos, el PIC 16F877 dispone de 256 bytes de memoria
EEPROM, y existen algunos modelos sobretodo en la familia PIC18 que disponen de
1024 bytes de capacidad.

La memoria tipo EEPROM y la tipo Flash pueden escribirse y borrarse


eléctricamente. Sin necesidad de sacar el circuito integrado del zócalo del grabador
pueden ser escritas y borradas numerosas veces.

2.2.4. Líneas de E/S para los controladores de periféricos

A excepción de dos pines destinad0s a recibir la alimentación, otras dos para el


cristal de cuarzo, que regula la frecuencia de trabajo, y una más para provocar el
Reset, los restantes pines de un microcontrolador sirven para soportar su
comunicación con los periféricos externos que controla.

Las líneas de E/S que se adaptan con los periféricos manejan información en paralelo
y se agrupan en conjuntos de ocho, que reciben el nombre de Puertos. Hay modelos
con líneas que soportan la comunicación en serie; otros disponen de conjuntos de
líneas que implementan puertos de comunicación para diversos protocolos, como el
I2C, el USB, etc. A continuación se muestra el diagrama de bloques del PIC
16F877A 2

2
LA imagen así como algunos criterios han sido tomados de la colección de libros titulado: “Curso
práctico sobre Microcontroladores”, de la empresa Cekit
Figura 2.8 Diagrama de bloques General De un PIC de gama media
2.2.5. Recursos auxiliares

Según las aplicaciones a las que orienta el fabricante cada modelo de


microcontrolador, incorpora una diversidad de complementos que refuerzan la
potencia y la flexibilidad del dispositivo.

Entre los recursos más comunes se citan a los siguientes:


a) Circuito de reloj, encargado de generar los impulsos que sincronizan el
funcionamiento de todo el sistema.

b) Temporizadores, orientados a controlar tiempos.

c) Perro Guardián («watchdog»), destinado a provocar una reinicialización cuando


el programa queda bloqueado.

d) Conversores AD , para poder recibir y enviar señales analógicas.

e) Comparadores analógicos, para verificar el valor de una señal analógica.

f) Sistema de protección ante fallos de la alimentación.

g) Estado de Reposo, (sleep) en el que el sistema queda «congelado» y el consumo


de energía se reduce al mínimo.

2.4.-Descripción del PIC 16F877

En el presente proyecto de titulación, el control de acceso peatonal, se basa en 3


microcontroladores PIC 16F877A, de muy similares características con el 16F877,
por lo que se hace un análisis de los que constituye este dispositivo programable, las
diferencias que existen con el 16f877A , se detallan en un documento al final de esta
obra, como parte de los anexos, pero para este proyecto, las diferencias existentes
entre estos microcontroladores no son de relevancia.

2.4.1.- Características del PIC 16F877

Se denomina microcontrolador a un dispositivo programable capaz de realizar


diferentes actividades que requieran del procesamiento de datos digitales y del
control y comunicación digital de diferentes dispositivos. El Pic 16f877 es un
microcontrolador de gama media fabricado por Microchip, este modelo posee varias
características que hacen a este microcontrolador un dispositivo muy versátil,
eficiente y practico para ser empleado en la aplicación que posteriormente será
detallada.
Algunas de sus principales características se muestran a continuación:

• Soporta modo de comunicación serial (I2C, RS232, SPI… ).


• Amplia memoria para datos y programa
• Memoria reprogramable: La memoria en este PIC es la que se denomina
FLASH; este tipo de memoria se puede borrar electrónicamente (esto
corresponde a la “F” en el modelo).
• Set de instrucciones reducido (tipo RISC), pero con las instrucciones
necesarias para facilitar su manejo.

En la tabla 2.1 se resumen las características más relevantes del microcontrolador


PIC 16F877

CARACTERÍSTICAS 16F877

Frecuencia máxima DX-20MHz

Memoria de programa flash palabra de 14 bits 8KB

Posiciones RAM de datos 368

Posiciones EEPROM de datos 256

Puertos E/S A,B,C,D,E

Número de pines 40

Interrupciones 14

Timers 3

Módulos CCP 2

Comunicaciones Serie MSSP, USART

Comunicaciones paralelo PSP


Líneas de entrada de CAD de 10 bits 8

Juego de instrucciones 35 Instrucciones

Longitud de la instrucción 14 bits

Arquitectura Harvard

CPU Risc

Canales Pwm 2

Pila Harware -

Ejecución En 1 Ciclo Máquina -

Tabla 2.1 características del PIC 16F877

2.4.2- Descripción de los puertos:

El PIC 16F877 tiene un total de 40 pines, de los cuales utiliza 7 para alimentación,
reset y oscilador. Los 33 restantes se distribuyen en cinco puertos desde el A hasta
el Puerto E, Los dispositivos periféricos se listan a continuación:

Dispositivos periféricos:

 Timer0: Temporizador-contador de 8 bits con preescaler de 8 bits


 Timer1: Temporizador-contador de 16 bits con preescaler que puede
incrementarse en modo sleep de forma externa por un cristal/clock.
 Timer2: Temporizador-contador de 8 bits con preescaler y postescaler.
 Dos módulos de Captura, Comparación, PWM (Modulación de Anchura de
Impulsos).
 8 canales para Conversor A/D de 10 bits.
 Puerto Serie Síncrono Master (MSSP) con SPI e I2C (Master/Slave).
 USART/SCI (Universal Syncheronus Asynchronous Receiver Transmitter)
con 9 bit.
 Puerta Paralela Esclava (PSP) solo en encapsulados con 40 pines
En la figura 2.10, se muestra el diagrama de bloques del Microcontrolador PIC
16F877, a la derecha se muestran los cinco puertos con una breve descripción de
cada uno de sus pines.

Figura 2.9 Diagrama de Bloques del Microcontrolador PIC 16F877

En la siguiente tabla se resume la función de cada uno de los pines que contiene el
Microcontrolador PIC 16F877
TIPO DE
NOMBRE PIN TIPO BUFFER DESCRIPCIÓN
DEL PIN

OSC1/CLKI 13 I ST/MOS Entrada del oscilador de cristal / Entrada


N de señal de reloj externa

OSC2/CLK 14 O - Salida del oscilador de cristal


OUT

MCLR/Vpp/ 1 I/P ST Entrada del Master clear (Reset) o


THV entrada de voltaje de programación o
modo de control high voltaje test

PORTA es un puerto I/O bidireccional


RA0/AN0 2 I/O TTL RAO: puede ser salida analógica 0
RA1/AN1 3 I/O TTL RA1: puede ser salida analógica 1
RA2/AN2/ 4 I/O TTL RA2: puede ser salida analógica 2 o
Vref- referencia negativa de voltaje
5 I/O TTL RA3: puede ser salida analógica 3 o
RA3/AN3/Vr referencia positiva de voltaje
ef+ 6 I/O ST RA4: puede ser entrada de reloj el
timer0.
RA4/T0CKI 7 I/O TTL RA5: puede ser salida analógica 4 o el
esclavo seleccionado por el puerto serial
RA5/SS/AN4 síncrono.

PORTB es un puerto I/O bidireccional.


Puede ser programado todo como
entradas
RBO/INT 33 I/O TTL/ST RB0 pude ser pin de interrupción
externo.
RB1 34 I/O TTL
RB2 35 I/O TTL
RB3/PGM 36 I/O TTL RB3: puede ser la entada de
programación de bajo voltaje
RB4 37 I/O TTL Pin de interrupción
RB5 38 I/O TTL Pin de interrupción
RB6/PGC 39 I/O TTL/ST Pin de interrupción. Reloj de
RB7/PGD 40 I/O TTL/ST programación serial

PORTC es un puerto I/O bidireccional


RCO/T1OS 15 I/O ST RCO puede ser la salida del oscilador
O/T1CKI timer1 o la entrada de reloj del timer1
RC1/T1OS1/ 16 I/O ST RC1 puede ser la entrada del oscilador
CCP2 timer1 o salida PMW 2
17 I/O ST RC2 puede ser una entrada de captura y
RC2/CCP1 comparación o salida PWN

18 I/O ST RC3 puede ser la entrada o salida serial


RC3/SCK/S de reloj síncrono para modos SPI e I2C
CL RC4 puede ser la entrada de datos SPI y
23 I/O ST modo I2C
RC5 puede ser la salida de datos SPI
RC4/SD1/SD 24 I/O ST RC6 puede ser el transmisor asíncrono
A 25 I/O ST USART o el reloj síncrono.
RC7 puede ser el receptor asíncrono
RC5/SD0 26 I/O ST USART o datos síncronos
RC6/Tx/CK

RC7/RX/DT
PORTD es un puerto bidireccional
paralelo
RD0/PSP0 19 I/O ST/TTL
RD1/PSP1 20 I/O I/O ST/TTL
RD2/PSP2 21 I/O I/O ST/TTL
RD3/PSP3 22 I/O I/O ST/TTL
RD4/PSP4 27 I/O ST/TTL
RD5/PSP5 28 ST/TTL
RD6/PSP6 29 ST/TTL
RD7/PSP7 30 ST/TTL

PORTE es un puerto I/O bidireccional


REO/RD/AN 8 I/O ST/TTL REO: puede ser control de lectura para el
5 puerto esclavo paralelo o entrada
analógica 5
9 I/O ST/TTL RE1: puede ser escritura de control para
RE1/WR/AN el puerto paralelo esclavo o entrada
analógica 6
10 I/O ST/TTL RE2: puede ser el selector de control para
RE2/CS/AN7 el puerto paralelo esclavo o la entrada
analógica 7.

Vss 12.3 P - Referencia de tierra para los pines lógicos


1 y de I/O

Vdd 11.3 P - Fuente positiva para los pines lógicos y


2 de I/O

NC - - - No está conectado internamente

Tabla 2.2 Descripción de los pines del PIC 16F877

El Microcontrolador PIC 16F877 tiene algunas presentaciones, de las cuales se


utiliza el encapsulado tipo DIP tal como se muestra en la figura 2.11, en la misma
que se muestra la distribución física real de los pines, así como una breve descripción
de la función que cumple cada uno de los pines
Figura 2.10 Diagrama de Bloques del Microcontrolador PIC 16F877

Las dimensiones exteriores del encapsulado se muestran en la gráfica 2.12, donde


además constan las distancias entre pines, medidas entre pines, etc., que son
necesarias para el diseño de la placa donde residirá el integrado.

Figura 2.11 Dimensiones físicas del Microcontrolador PIC 16F877


CAPÍTULO III

Lenguaje Ensamblador y Lenguaje C

«Un microcontrolador es un computador metido dentro de un circuito integrado.»


Son computadores muy pequeños y baratos por lo que se utilizan para controlar
muchos productos comunes en los que se halla incrustado dentro de los mismos,
como sucede con el teléfono móvil, el teclado y el ratón del computador, etc.

Además, al ser tan pequeños tienen una potencia limitada y sólo sirven para realizar
una tarea. En el siglo XXI la realización de proyectos para aplicar los
microcontroladores en el gobierno y automatización de multitud de productos y
procesos se presenta como una ingente labor que va a requerir la colaboración de
multitud de profesionales y va a ofrecer una oportunidad inigualable para quienes
estén preparados adecuadamente.

Los proyectos con microcontroladores exigen un trabajo con hardware consistente en


adaptar Los pines del microcontrolador a los periféricos externos que hay que
controlar. Además, también requieren la confección de un programa con las
instrucciones precisas para que su ejecución origine el procesamiento de la
información para obtener los resultados apetecidos.

Para construir los programas de los microcontroladores se usan principalmente tres


lenguajes:

• El lenguaje Ensamblador
• El lenguaje Basic
• El Lenguaje C

3.1.- El lenguaje Ensamblador

Se dice que el lenguaje Ensamblador es de bajo nivel porque sus instrucciones son
exactamente las que el procesador sabe interpretar y ejecutar. En realidad, el
computador digital sólo acepta instrucciones en código binario y el Ensamblador
facilita su escritura al programador permitiendo expresarlas mediante
«mnemónicos 1», que son tres o cuatro letras significativas que referencian en inglés,
la operación que conlleva la instrucción. Por ejemplo, una instrucción que «mueve»
un dato de un sitio (A) a otro (B), en Ensamblador se escribe MOV A,B.

El problema surge en el Ensamblador por la poca potencia de las instrucciones que es


capaz de ejecutar el procesador. Normalmente las correspondientes a los
microcontroladores de 8 bits que manejamos en este libro, consisten en sumar, restar,
hacer operaciones lógicas AND, OR, XOR, también rotar un dato de 8 bits, moverlo
de un sitio a otro y muy poquito más. Si deseamos hacer una multiplicación hay que
realizar una subrutina que repita las sumas necesarias hasta conseguir el resultado.
Es un lenguaje de «bajo nivel». El programa Ensamblador lo único que hace es
traducir los mnemónicos con los que se escriben las instrucciones a código binario
para que el procesador sea capaz de interpretarlas y ejecutarlas.

Los lenguajes de «alto nivel» tienen instrucciones más potentes: saben multiplicar,
sacar la raíz cuadrada y realizar funciones y operaciones mucho más complicadas
que las que pueden hacer las instrucciones de la máquina. Pero como la máquina es
la misma, la realización de esas instrucciones se tiene que hacer con programas de
instrucciones elementales. Cada instrucción de alto nivel se convierte en un
subprograma de instrucciones de bajo nivel. Por eso para que el procesador pueda
ejecutar las instrucciones de un lenguaje de alto nivel precisa otro programa que las
descomponga en las instrucciones de bajo nivel correspondientes. A estos programas
se les llama compiladores.

Los compiladores se encargan de traducir un programa confeccionado con


instrucciones de alto nivel a otro equivalente con instrucciones de bajo nivel. Hay
una variante de estos programas que reciben el nombre de intérpretes que realizan
dicha traducción pero instrucción por instrucción, o sea, traducen una instrucción de
alto nivel en las correspondientes de bajo nivel que ejecuta el procesador y a
continuación pasan a la siguiente.

1
La definición del término mnemónico, puede ser revisado en el vocabulario técnico, al final de este
documento.
3.1.1.- Programa fuente en Lenguaje Ensamblador:

El programa fuente esta compuesto por una sucesión de líneas de programa. Cada
línea de programa esta compuesta por 4 campos separados por uno o más espacios o
tabulaciones. Estos campos son:

[Etiqueta] [Comando] [Operando(s)] [;Comentario]

La etiqueta es opcional. El comando puede ser un mnemónico del conjunto de


instrucciones. El operando esta asociado al comando, si no hay comando no hay
operando, e inclusive algunos comandos no llevan operando. El comentario es
opcional para el compilador aunque es buena práctica considerarlo obligatorio para el
programador.

3.1.2.- Conjunto de instrucciones

El conjunto de instrucciones de los microprocesadores PIC 16C5X consiste en un


pequeño repertorio de solo 33 instrucciones de 12 bits, los de gama media contiene
hasta 35 instrucciones y la gama alta (PIC 17 y PIC 18) contiene hasta 77
instrucciones, que pueden ser agrupadas para su estudio en tres a cinco grupos.

Si se las divide en tres grupos, se tiene en primer lugar el grupo de las instrucciones
que operan con bytes y que involucran algún registro de la memoria interna. En
segundo lugar se analizaran las instrucciones que operan solo sobre el registro W y
que permiten cargarle una constante implícita o incluida literalmente en la
instrucción (literales). En tercer lugar se agrupan las instrucciones que operan sobre
bits individuales de los registros de la memoria interna. En cuarto lugar se clasifican
las instrucciones de control de flujo del programa, es decir las que permiten alterar la
secuencia lineal de ejecución de las instrucciones. Por último se agrupan unas pocas
instrucciones que llamaremos especiales, cuyas funciones o tipos de operandos son
muy específicos y no encajan en ninguna de las clasificaciones anteriores.
En la tabla 3.1 se ha resumido las 35 instrucciones de los microcontroladores PIC de
gama media, clasificados en los tres grupos antes mencionados, en donde se hace una
breve descripción de su función, se determina el numero de ciclos que necesita para
ser ejecutado por el microcontrolador, y se establece los bit de las banderas que serán
afectados en el registro status.

Instrucciones orientadas a byte:

Instrucciones orientadas a bit:

Instrucciones orientadas a literal y control:

Tabla 3.1 Resumen de instrucciones (clasificación según el fabricante en tres grupos):


3.1.3.- Herramientas de desarrollo. El MPLAB.

EL MPLAB es un “Entorno de Desarrollo Integrado “ (Integrated Development


Environment, IDE) que corre en “Windows “, mediante el cual Usted puede
desarrollar aplicaciones para los microcontroladores de las familias PIC 16/17/18.
EL MPLAB le permite a Usted escribir, depurar y optimizar los programas
(firmware) de sus diseños con PIC 16/17/18. EL MPLAB incluye un editor de texto,
un simulador y un organizador de proyectos. Además, el MPLAB soporta el
emulador PICMASTER y a otras herramientas de desarrollo de Microchip como el
PICSTART - Plus.

Fig. 3.1 Entorno de Desarrollo Integrado MPLAB

Con el MPLAB se puede:

• Depurar sus programas fuente.


• Detectar errores automáticamente en sus programas fuente para editarlos.
• Depurar los programas utilizando puntos de corte (breakpoints) mediante
valores de los registros internos.
• Observar el flujo del programa con el simulador MPLAB -SIM, ó seguirlo en
tiempo real utilizando el emulador PICMASTER.
• Realizar medidas de tiempo utilizando un cronómetro.
• Mirar variables en las ventanas de observación.
• Encontrar respuestas rápidas a sus preguntas, utilizando la ayuda en línea del
MPLAB.

Entre las herramientas del MPLAB se encuentran el Organizador de Proyectos


(Project Manager) es parte fundamental de MPLAB. Sin crear un proyecto Usted no
puede realizar depuración simbólica. Con el Organizador de Proyectos (Project
manager) puede utilizar las siguientes operaciones:

• Crear un proyecto.
• Agregar un archivo de programa fuente de proyecto.
• Ensamblar o compilar programas fuente.
• Editar programas fuente.
• Reconstruir todos los archivos fuente, o compilar un solo archivo.
• Depurar su programa fuente.

3.2.- El Lenguaje Basic

Aprender a manejar el lenguaje BASIC para computadoras es una labor muy sencilla,
tan simple como escribir (en inglés). En BASIC las instrucciones coinciden con el
nombre en inglés de la operación que se debe llevar a cabo. Por ejemplo, escribir o
visualizar un valor en la pantalla utiliza la instrucción PRINT; para introducir por el
teclado un valor se emplea la instrucción INPUT y si se desea realizar una suma
basta con poner el signo “+” de la misma.

Un lenguaje para una computadora es un conjunto de instrucciones y comandos, que


la máquina es capaz de interpretar y ejecutar. Fíjese en un programa en BASIC. Este
programa se entiende sólo. Se introduce por el teclado en primer lugar el valor de la
variable a, después se introduce por el mismo procedimiento el valor de b y,
finalmente, se visualiza el resultado de la operación a+b. Consiste en una sucesión
ordenada de las instrucciones que debe ejecutar el computador para ir procesando los
datos hasta alcanzar el resultado deseado.
10 INPUT R ‘Se introduce el radio
20 LET S=3.14*R*R ‘se calcula el área
30 PRINT S,R ‘se escribe S y R
40 END ‘fin del programa

Figura 3.2 Ejemplo de programa en Leguaje Basic

El lenguaje BASIC fue desarrollado en I960 por J. Kemeny y T. Kurtz con la


finalidad de simplificar la programación.

3.2.1.- Ventajas e inconvenientes

Se trata de un lenguaje muy sencillo que está orientado a las personas y por eso sus
instrucciones recuerdan las palabras inglesas con las que se describe la operación que
realizan. Dado su parecido con el álgebra elemental es muy útil para resolver
problemas técnicos de ingeniería, aunque también es muy cómodo en las
aplicaciones que manejan mucha información literal, típico en los negocios.

Las grandes ventajas del lenguaje BASIC desgraciadamente están acompañadas por
algunos defectos, que suelen empujar a los programadores profesionales a repudiarlo.
Como mayor defecto se dice que es un lenguaje «no estructurado» o «no
procedural», de lo cual la mayor culpa tiene la instrucción GOTO, que es capaz de
desviar el flujo de la ejecución de instrucciones a cualquier parte del programa,
impidiendo la posibilidad de dividir la tarea en trozos pequeños e independientes.

Las normas puristas de la programación proponen la confección del software en base


a un pequeño «programa principal», que se compone de llamadas a rutinas y
procedimientos autónomos e independientes en los que se descompone la tarea a
resolver. Para implementar esta estructura es necesario poder salir con facilidad del
programa principal a las rutinas traspasando algunos parámetros, así como también
poder regresar a dicho programa principal desde la rutina trayendo resultados
obtenidos en esta última. El lenguaje BASIC no soporta completamente estas
estructuras en los programas.
3.3.- Lenguaje C

Desarrollar programas en lenguaje Ensamblador exige un conocimiento profundo de


la arquitectura interna del procesador, lo que requiere una buena base en Electrónica,
así como formación en Informática. Las instrucciones de bajo nivel realizan
operaciones directamente con los elementos existentes en el interior del procesador.

El lenguaje C es de tipo profesional, muy completo y potente, pero su manejo exige


una buena formación en Informática. También es muy conveniente conocer la
arquitectura interna del procesador y en muchas ocasiones hay que combinarlo con el
lenguaje Ensamblador.

Al lenguaje C, se lo puede considerar con un lenguaje intermedio entre alto nivel y


bajo nivel, debido a sus características especiales tales como el manejo de punteros ,
operaciones a nivel de BIT que son propios de lenguajes de bajo nivel. Sin dejar de
mencionar la capacidad de empotrar trozos de lenguaje Ensamblador dentro de su
código, características que son ampliadas en los párrafos subsiguientes.

3.3.1.- Historia del Lenguaje C ( C, C++, C#)

La historia de C parte de un lenguaje anterior, el lenguaje B, escrito por Ken


Thompson en 1970 con el objetivo de recodificar el sistema operativo UNIX, que
hasta el momento se había programado en ensamblador. La pega del ensamblador era
que lo ligaba a una serie de máquinas concretas, por lo que conseguir un lenguaje
abstraído de cada máquina conseguiría una portabilidad del sistema muchísimo
mayor. A su vez B fue inspirado en el BCPL de Martin Richard, diseñado tres años
antes 2.

En 1972 es Dennis Ritchie (de los Laboratorios Bell de AT&T) quien diseña
finalmente C a partir del B de Thompson, aportando un diseño de tipos y estructuras
de datos que consiguen una claridad y eficacia en el lenguaje muy superior. Es un
lenguaje que permite realizar una programación estructurada economizando las

2
Conceptos y datos de la historia de lenguaje C se han tomado de la enciclopedia “wikipedia”,
disponible en el Internet en la dirección http://es.wikipedia.org/wiki/Portada.
expresiones, con abundancia de operadores y tipos de datos (aunque los básicos sean
pocos), codificando en alto y bajo nivel simultáneamente, reemplazando
ventajosamente la programación en ensamblador y permitiendo una utilización
natural de las funciones primitivas del sistema. Además, no está orientado a ningún
área en especial y sobre todo consigue un código objeto altamente optimizado que
repercute en que los programas son muy rápidos.

Durante muchos años no existieron reglas estándares para el lenguaje, pero en 1983
se decide formar un comité con el objetivo de crear el estándar ANSI (Instituto
Nacional Americano de Estándares). El proceso dura seis años y a principios de los
90 el estándar es reconocido por la ISO (Organización Internacional de Estándares) y
comienza a comercializarse con el nombre ANSI C.

Ejemplo de programa escrito en C ( "Hola mundo" escrito en C )


#include <stdio.h>

void main()
{
printf( "Hola mundo" );
}

Paralelamente, en 1980 surge C++ de la mano de Bjarne Stroustrup (también de


Laboratorios Bell de AT&T). Diseña este lenguaje con el objetivo de añadir a C
nuevas características: clases y funciones virtuales (de SIMULA67), tipos genéricos
y expresiones (de ADA), la posibilidad de declarar variables en cualquier punto del
programa (de ALGOL68), y sobre todo, un auténtico motor de objetos con herencia
múltiple que permite combinar la programación imperativa de C con la programación
orientada a objetos. Estas nuevas características mantienen siempre la esencia del
lenguaje C: otorgan el control absoluto de la aplicación al programador,
consiguiendo una velocidad muy superior a la ofrecida por otros lenguajes.

El siguiente hecho fundamental en la evolución de C++ es sin duda la incorporación


de la librería STL años más tarde, obra de Alexander Stepanov y Adrew Koening.
Esta librería de clases con contenedores y algoritmos genéricos proporciona a C++
una potencia única entre los lenguajes de alto nivel.

Debido al éxito del lenguaje, en 1990 se reúnen las organizaciones ANSI e ISO para
definir un estándar que formalice el lenguaje. El proceso culmina en 1998 con la
aprobación del ANSI C++.´

Ejemplo de programa escrito en C++ ( "Hola mundo" escrito en C++ )

#include <iostream>

void main()
{
std::cout << "Hola mundo";
}

La última variante que ha surgido de C es el moderno C#. En el año 2000, Microsoft


presenta su plataforma .NET junto con un nuevo lenguaje, C# (diseñado por Anders
Hejlsberg), que servirá de lenguaje principal de la plataforma. C# es un híbrido de
C++ y Java que fusiona, principalmente, la capacidad de combinar operadores propia
del primero (no incorpora la herencia múltiple) con la plena orientación a objetos del
segundo. La orientación a objetos es tal que el propio programa está encapsulado en
una clase.

Actualmente C# se encuentra entre los 10 lenguajes más utilizados. A pesar de su


corta historia, ha recibido la aprobación del estándar de dos organizaciones: en el
2001 se aprueba el ECMA y en el 2003 el ISO.

Ejemplo de programa escrito en C# ( "Hola mundo" escrito en C# )

class HolaMundo
{
static void Main()
{
System.Console.Write( "Hola mundo" );
}
}

3.3.2.- Características y desventajas de Leguaje C

C es un lenguaje de programación de propósito general. Sus principales


características son:

• Programación estructurada
• Economía de las expresiones
• Abundancia en operadores y tipos de datos.
• Codificación en alto y bajo nivel simultáneamente.
• Reemplaza ventajosamente la programación en ensamblador (assembler).
• Utilización natural de las funciones primitivas del sistema.
• No está orientado a ningún área en especial.
• Producción de código objeto altamente optimizado.
• Facilidad de aprendizaje (;-)).

Una de las peculiaridades de C es su riqueza de operadores, Puede decirse que


prácticamente dispone de un operador para cada una de las posibles operaciones en
código máquina. Finalmente, C, que ha sido pensado para ser altamente transportable
y para programar lo improgramable, igual que otros lenguajes tiene sus
inconvenientes:

• Carece de instrucciones de entrada/salida, de instrucciones para manejo de


cadenas de caracteres, con lo que este trabajo queda para la biblioteca de
rutinas, con la consiguiente pérdida de transportabilidad

• La excesiva libertad en la escritura de los programas puede llevar a errores en


la programación que, por ser correctos sintácticamente no se detectan a
simple vista
• Por otra parte las precedencias de los operadores convierten a veces las
expresiones en pequeños rompecabezas.

A pesar de todo, C ha demostrado ser un lenguaje extremadamente eficaz y


expresivo.

3.4.- El Compilador de CCS para PIC

3.4.1 Antecedentes.-

Prosiguiendo con nuestro estudio sobre las herramientas de programación para la


gama media hemos buscado distintas herramientas que ofrezcan soporte para el
lenguaje C. Microchip se limita a ofrecer tan solo los MPLAB-C17 y MPLAB-C18,
limitadas a la gama alta (PIC17CXX y PIC18CXX, respectivamente), es de
menciona el HI TECH PICC, que es un compilador que tiene algún tiempo en el
mercado y además HI TECH SOFTWARE, produce compiladores para algunos
fabricantes de microcontroladores. El mikroC, de mikroElektronika es un
compilador de C muy completo que abarca toda la gama baja, media y alta del los
PIC, y además incluye un conjunto de librerías muy completo para implementar
distintas funciones como LCD, Teclado, Manejo de eeprom, Comunicaciones, etc.,
maneja sobre los 220 modelos de microcontroladores PIC entre todos los modelos 3.

El Compilador PIC-C, denominado PCWH de la firma CCS (Custom Computer


Services). Utiliza un lenguaje de alto nivel basado en C ANSI, que contiene las
funciones y librerías necesarias para el diseño de cualquier aplicación basada en
microcontroladores PIC: matemáticas, control de protocolos serie, I2C, etc. La
versión PCWH admite todos los dispositivos PIC de las gamas baja (12xxx), media
(16xxx) y alta (18xxx), con núcleos de 12, 14 y 16 bits respectivamente. Incluye
Entorno Integrado de Desarrollo (IDE) en Windows que facilita la edición y
depuración de los programas así como ayuda a la configuración del dispositivo. Y los
manuales solo se los encuentra en idioma Inglés.

3
Mucha de la información contenida ha sido tomada de varias páginas Web publicadas en el Internet,
con información actualizada, y otros se ha tomado directamente de los manuales de los compiladores,
al final en bibliografía constan las direcciones de los sitios Web visitados.
El compilador Pic C soporta dispositivos de todas las familias de los
microcontroladores PIC (baja, media y alta), en su ultima versión (4.0) se incluyen
librerías para controlar mas de 300 modelos de microcontroladores PIC. El
compilador manejara en forma automática el registro PCLATH y la selección de
bancos de memoria

El Pic C Compiler fue desarrollado para cumplir con las especificaciones del
lenguaje ANSI C . El compilador produce principalmente tres tipos de archivos.
Archivos con extensión .hex que le permitirá grabar el programa ejecutable en el
PIC por medio del uso de un programador. El archivo con extensión .asm
contendrá un listado en assembler del programa compilado con la información del
mapeo de memoria. Estos archivos son muy útiles para el debugging de los
programas y para determinar la cantidad de pasos de programas (ciclos de
ejecución) tiene la aplicación. Los archivos con extensión .pre contienen la
información preprocesada del programa, #defines, #includes, etc. la cual es
expandida y guardada en el archivo.

Es el producto ideal para aquellas personas que le gusta desarrollar en bajo nivel
con los recursos de un lenguaje de alto nivel como el C. Se recomienda ser
utilizado por personas vinculadas con la programación y sintaxis de C.
En sus principales ventajas podemos anotar:

• Esta basado en el ANSI C .


• Soporte completo de las familias de microcontroladores PIC.
• Salida Assembly .
• Industry standard Intel Hex 8 bit Merged format (INHX8M) .
• Soporta interrupciones internas y externas.
• Tipos de datos 8 y 16 bit - int, char, long, punteros, unsigned, etc.
• Inserción de código asamblea - asm( );
• Todos los operadores aritméticos - incluyendo multiplicación, división,
modulo y otros.
• Las variables y funciones no utilizadas son borradas automáticamente .
• Reutilización de ram .
• Instrucciones simples.

3.4.2.- La programación en PIC C

La programación en lenguaje C, para PIC, es bastante similar en su estructura y


sintaxis a la programación tradicional para ordenadores, una de las diferencias esta
en las librerías creadas específicamente para los microcontroladores PIC como por
ejemplo para el LCD, teclado, bus I2C, etc. La función main() es imprescindible en
todo programa escrito en lenguaje C, pues es la función principal, desde aquí se
puede hacer el llamado a otras funciones, Para crear un programa en lenguaje C, hay
que seguir los pasos siguientes:

1. Especificaciones del programa (qué tiene que hacer)


2. Hacer organigrama
3. Escribir el código fuente (conocer el lenguaje)
4. Compilar + Enlazar (Link)
5. Depurar errores, si los hay

3.4.3.-Análisis de un problema sencillo

Como ejemplo orientativo, se hace a continuación el desarrollo de un programa


sencillo. Se trata de obtener la nota media de un alumno durante un trimestre. El
análisis de esta tarea, que la hemos llamado MEDIA, puede dar el siguiente
procedimiento:

1. leer NOMBRE
2. leer NOTA
3. si no hay mas notas, ir al punto 5
4. ir al punto 2
5. calcular la MEDIA
6. imprimir NOMBRE
7. imprimir MEDIA
Fig. 3.3 Diagrama de flujo del programa media

3.4.4.- Estructura de un programa en C

De forma generalizada, la estructura de un programa en C para un microcontrolador


tiene el siguiente aspecto:

declaraciones globales
prototipos de funciones
main()
{ variables locales;
bloque de sentencias;
llamadas a las funciones;
}
funcion_1()
{
variables locales a funcion_1;
bloque de sentencias;
llamada a otra/s funciones;
}
funcion_n() {

}

A continuación se realiza un ejemplo de un programa que enciende y apaga un led de


forma intermitente en el pin 7 del puerto B de un microcontrolador PIC 16F870

//programa parpadeo_led.c
//proyecto de tesis (2006-09-19)
//Realizado: Eduardo Mendoza Merchán
//Revisado: ing. Luís Córdova R.
//Función: Pprograma que hace parpadear un led en RB7 cada 1 s

#include <16F870.h> // tipo de PIC


#use delay( clock = 4000000 ) // reloj a 4 MHz
#byte puerto_b = 0x06 // dirección del puerto B
void main( void )
{
set_tris_b( 0x00 ); // puerto B como salida/
puerto_b = 0; // apaga todos los led
do
{
delay_us( 1000 ); // retardo de 1000 ms.
bit_set( puerto_b, 7 ); // enciende el led RB7
delay_us( 1000 ); // espera 1 s
bit_clear( puerto_b, 7); // apaga el led
} while( TRUE ); // Repetir siempre
} // fin del programa

3.4.5.- Librerías y funciones

3.4.5.1 la función main()

Todo programa en C debe tener una función main(), la cual debe aparecer solamente
una vez, y es en esta función donde comienza la ejecución del programa. No deben
aparecer ningún parámetro entre los corchetes que le siguen a la función. La palabra
reservada void puede aparecer opcionalmente para clarificar que no deben ir
parámetros. Como main() es clasificada como una función, todo el código que
contenga debe iniciar y finalizar con un par de llaves, las cuales indican el punto
inicial y final del programa.

Ej.

void main(void )
{
Cuerpo del programa
}

3.4.5.2.-Archivos de cabecera (#include)

El archivo de cabecera (denotado por la extensión .h) contiene información acerca


del contenido de la función tal como los argumentos que la función acepta, los
argumentos que la función devuelve, la localización del PicMicro, etc. La
declaración se realiza de la siguiente forma:

#include <Nombre_Fichero>

Esta directiva hace que el compilador incluya en el fichero fuente el texto que
contiene el archivo especificado en <Nombre_Fichero>. Si el nombre del fichero se
incluye entre los símbolos '< >' el compilador busca el fichero en el directorio
INCLUDE. Si se pone entre comillas dobles " " el compilador busca primero en el
directorio actual o directorio de trabajo y si no lo encuentra, entonces lo busca en los
directorios INCLUDE del compilador.

Ejemplo:

#include <18F4550.H>
#include <lcd.h>
#include "reg_C84”
3.4.5.3. función printf

La función printf es una librería estándar, la cual permite al programador enviar


información. El formato general para una declaración con printf() es:

printf(“control_string”, argument_list);

La función de impresión formateada printf(), puede saca una cadena de caracteres al


estándar serie RS-232 o a una función especificada. El formato está relacionado con
el argumento que se pone dentro de la cadena (string).

Cuando se usan variables, string debe ser una constante. El carácter % se pone dentro
de string para indicar un valor variable, seguido de uno o más caracteres que dan
formato al tipo de información a representar. Si ponemos %% obtenemos a la salida
un solo %. El formato tiene la forma genérica %wt, donde w es optativo y puede ser
1,2,...,9. Esto es para especificar cuántos carácteres son representados; si elegimos el
formato 01,...,09 indicamos ceros a la izquierda, o también 1.1 a 9.9 para
representación en punto flotante. t es el tipo de formato y puede ser uno de los
siguientes:
C Carácter
U Entero sin signo
x Entero en Hex (minúsculas)
X Entero en Hex (mayúsculas)
D Entero con signo
%e Real en formato exponencial
%f Real (flota)
Lx Entero largo en Hex (minúsculas)
LX Entero largo en Hex (mayúsculas)
Lu Decimal largo sin signo
Ld Decimal largo con signo
% Simplemente un %
Tabla 3.2 formatos de salida para la función printf()

Ejemplos:
byte x,y,z;
printf (" Hola ");
printf("RTCCValue=>%2x\n\r",get_rtcc());
printf("%2u %X %4X\n\r",x,y,z);
printf(LCD_PUTC, "n=%c",n);
3.4.5.4.- variables

Una variable es un nombre para una localización de memoria especifica. Esta


localidad de memoria puede mantener varios valores, dependiendo de cómo la
variable fue declarada. En C todas las variables deben ser declaradas antes de ser
usadas. Una declaración de variable le indica al compilador que tipo de variable esta
siendo usada. Toda declaración de variables en C deben terminar con un punto y
coma.

Alguno tipos de datos básicos que C soporta son: char, int, Float y long, en las
siguientes líneas se encuentran los diferentes tipos de datos soportador por el
lenguaje C para PIC-C:

unsigned define un número de 8 bits sin signo


unsigned int define un número de 8 bits sin signo
int define un número de 8 bits sin signo
char define un número de 8 bits sin signo
long define un número de 16 bits sin signo
long int define un número de 16 bits sin signo
signed define un número de 8 bits con signo
signed int define un número de 8 bits con signo
signed long define un número de 16 bits con signo
float define un número de 32 bits en punto flotante
short define un bit
short int define un bit
unsigned define un número de 8 bits sin signo

Identificadores Identificador de una definición TYPE de tipo


Enum tipo enumerado, véase sintaxis a continuación
Struct estructura, véase sintaxis a continuación
Unión unión, véase sintaxis a continuación

declarador:
[const] [*]identificador [expr._constante][= valor_inicial]
enumerador:

enum [identificador]{
[lista_identificadores[= expresión_constante]]
}

estructura y unión:
struct [identificador] {
[calificador_tipo [[*]identificador
:expresión_constante [expresión_constante]]]
}
unión Ídem
Ejemplo:
struct lcd_pin_map
{ boolean enable;
boolean rs;
boolean rw;
boolean unused;
int data : 4;
} lcd;

En la siguiente tabla se muestra los rangos para cada tipo de dato, a fin de dar mayor
claridad a cada uno de los tipos de variables:

Type Bit Width Range


short 1 0 or 1
short int 1 0 or 1
int 8 0 to 255
char 8 0 to 255
unsigned 8 0 to 255
unsigned int 8 0 to 255
signed 8 -128 to 127
signed int 8 -128 to 127
long 16 0 to 65536
long int 16 0 to 65536
signed long 16 -32768 to 32767
float 32 3.4E-38 to 3.4E+38
Tabla 3.3 tipos de datos en C
3.4.5.5.- Constantes:

Una constante es una variable cuyo valor puede determinar el compilador durante la
ejecución y puede aplicar optimizaciones derivadas de ello. Para que esto sea posible
se ha de cumplir que el valor de una constante no pueda cambiar durante la
ejecución, por lo que el compilador informará con un error de todo intento de
modificar el valor inicial de una constante. Una constante puede ser declarada usando
la declaración #define <label> value

la etiqueta <label> define el nombre que usará a través del programa, y value es el
valor que se le asigna a la constante, ejemplo de declaración de constantes son las
siguientes:

#define TRUE 1
#define pi 3.14159265359

C permite especificar constantes en formato hexadecimal y octal, para especificar en


formato hexadecimal debe de colocar el prefijo 0x como por ejemplo 0x5F. además
C soporta cadenas constantes. El dato #define no es almacenado en memoria, es
determinada en tiempo de ejecución. Para salvar constantes en el chip Rom, use la
palabra reservada const en una declaración de variables, por ejemplo:

char const id[5]={“1234”};

3.4.5.6.- Comentarios
Los comentarios son utilizados para documentar el significado y operaciones del
código fuente. Todo comentario es ignorado por el copilador. Un comentario puede
ser ubicado en cualquier lugar en el programa, excepto por la mitad de una palabra
reservada, el nombre de una función o en el nombre de una variable. Los
comentarios pueden tener muchas líneas y pueden ser usadas para remover
temporalmente líneas de código, los comentarios no pueden ser anidados.

Existen dos formas de realizar comentarios. La primera es usada por todos los
copiladores de C :
/* este es un comentario */

La segunda forma es utilizada por algunos copiladores, como en este caso el


compilador de CCS utiliza también esta forma:

// este es un comentario

En el presente trabajo se hace una distinción de los comentarios en los programas


ejemplos y código fuente que se ha copiado de los programas de los
microcontroladores, al imprimirlos en color verde, así como las instrucciones propias
de lenguajes C ANSI se imprimirán en color azul, para denotar que son tales.

3.4.5.7.- Funciones

La funciones constituyen los bloques principales de construcción de la mayoría de


los programas en C. La funcionen permiten dividir e implementarlas partes de un
programa en módulos separados, de esta forma las funciones permiten que el
programa adquiera un aspecto modular.

Todo programa En C contiene al menos una función, main(), El formato para un


programa en C con muchas funciones es:

main()
{
function1()
{
}
function2()
{
}
}
Main() es la primera función llamada cuando se ejecuta el programa, las otras
funcione, tales como funcion1. funcion2, pueden ser llamadas por cualquier función
en el programa

Las funciones pueden ser de tipo void, char, int , float, double, array y de tipo
puntero, que esta en relación con el tipo de dato que devuelven. De igual forma se
trata con lo argumentos que recibe la función, en el siguiente ejemplo se observa la
forma de pasar los argumentos y de retornar un valor:

Int main()
{
Printf(“Programa para calcular la raíz cuadrada”)
Vsalida();

Return 0;
}

Void vsalida(void)
{
Double dt=12345.0
Double du;
Du=sqrt(dt);
Printf(“La raiz cuadrada es: %f”, du)
}
3.4.5.8.- Palabras reservadas de C

EL estándar ANSI de C define 32 palabras reservadas para usarlas en el lenguaje C,


ciertas palabras son reservadas para use del copilador para definir tipo de datos o
para uso en lazos. Todas las palabras reservadas deber ser escritas en minúsculas
para ser reconocidas por el compilador. La siguiente es una lista de palabras
reservadas las cuales no debes ser utilizadas como nombre de variables.

auto double int struct


break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

3.4.5.9.- directiva #asm y #endasm

Las líneas entre #ASM y #ENDASM se tratan como código ensamblador. La


variable predefinida _RETURN_ puede utilizarse para asignar un valor de retorno a
la función desde el código en ensamblador. Tener presente que cualquier código C
después de #ENDASM y antes del final de la función puede falsear el valor de
retorno.
Ejemplo:
int paridad (int dato) {
int contador;
#asm
movlw 8
movwf contador
movlw 0
lazo:
xorwf dato,w
rrf dato,f
decfsz contador,f
goto lazo
movwf _return_
#endasm }

3.4.5.10.- manejo de la memoria EEPR0M interna.

La función ee_read (addr), que leerá un valor de la memoria EEPROM


interna del microprocesador, direccionada por el valor de addr, ejemplo:
int cont_eprom;

cont_eprom = ee_read(0x08)

la función ee_write (addr,var), que escribirá un valor de la memoria EEPROM


interna del microprocesador, direccionada por addr, en donde se escribe el contenido
de var, ejemplo:

int dir= 0x04;


char dato = ’a’;
ee_write(dir,dato);

3.4.5.11.- Reloj del sistema #USE DELAY (CLOCK)

Esta directiva indica al compilador la frecuencia del procesador, en ciclos por


segundo, a la vez que habilita el uso de las funciones DELAY_MS() (para mili
segundos) y DELAY_US() (para microsegundos). Opcionalmente podemos usar la
función restart_WDT() para que el compilador reinicie el WDT durante el retardo.

Ejemplos:

#use delay (clock=20000000)


#use delay (clock=32000, RESTART_WDT)

3.4.5.12.- librería LCD

Con la librería LCD.h podemos fácilmente escribir en una pantalla LCD de 2 líneas,
para utilizar la funciones de esta librería, es necesario llamarla a través de la directiva
#include, inicializarla y utilizar la siguiente nomenclatura:

lcd_init() Debe ser llamada antes de cualquier otra función.

lcd_putc(c) Presenta en el LCD la variable c en la siguiente posición del LCD


Las siguientes expresiones tiene un significado especial:

\f Limpia el display
\n Va al inicio de la segunda líneas
\b regresa una posición

lcd_gotoxy(x,y) ubica el cursor en la posición señalada.


Ejemplo:
#include <16F870.h>
#include <lcd.c>
Main(){
Lcd_init();
Lcd_putc(“\fHOLA MUNDO”);
}

Existen otras librerías para manejar otros tipos de pantallas LCD, como por ejemplo
para módulos LCD de cuatro líneas.

3.4.5.13.- Librería KBD (teclado)

La librería KBD.H, contiene el código para recibir datos del un teclado numérico de
4x3, para lo cual es necesario llamarla a la función por medio de la directiva #include
y luego inicializarla, para poder utilizarla, a continuación se explica con detalle el
uso de esta librería:

kbd_init() Debe ser llamada antes de cualquier otra función

c = kbd_getc(c) En la variable c se almacena el valor de la tecla presionada, en


caso de no presionarse ninguna tecla el valor que devuelve es 0x00
ejemplo

#include <16F870.h>
#include <kbd.c>
#include <lcd.c>
Main(){
Char c;
Kbd_init();
White(1)
{ c=kbd_init()
If (k!=0)
{
lcd_putc(”\fHa press la tecla: \n”);
lcd_putc(c);
}
}
}

3.4.5.14.- Interrupciones. (#INT_xxx)

Estas directivas especifican que la función que le sigue es una función de


interrupción. Las funciones de interrupción no pueden tener ningún parámetro. Como
es natural, no todas las directivas pueden usarse con todos los dispositivos. Las
directivas de este tipo que disponemos son:

#INT_EXT INTERRUPCIÓN EXTERNA


#INT_RTCC DESBORDAMIENTO DEL TIMER0(RTCC)
#INT_RB CAMBIO EN UNO DE LOS PINES B4,B5,B6,B7
#INT_AD CONVERSOR A/D
#INT_EEPROM ESCRITURA EN LA EEPROM COMPLETADA
#INT_TIMER1 DESBORDAMIENTO DEL TIMER1
#INT_TIMER2 DESBORDAMIENTO DEL TIMER2
#INT_CP1 MODO CAPTURA DE DATOS POR CCP1
#INT_CCP2 MODO CAPTURA DE DATOS POR CCP2
#INT_SSP PUERTO DE SERIE INTELIGENTE(SPI, I2C)
#INT_PSP PUERTO PARALELO
#INT_TBE SCI DATO SERIE TRANSMITIDO
#INT_RDA SCI DATO SERIE RECIBIDO
#INT_COMP COMPARADOR DE INTERRUPCIONES
#INT_ADOF DESBORDAMIENTO DEL A/DC DEL PIC 14000
#INT_RC CAMBIO EN UN PIN Cx
#INT_I2C I2C DEL 14000
#INT_BUTTON PULSADOR DEL 14000
#INT_LCD LCD 92x

El compilador salta a la función de interrupción cuando se detecta una interrupción.


Es el propio compilador el encargado de generar el código para guardar y restaurar el
estado del procesador. También es el compilador quien borrará la interrupción (el
flag). Sin embargo, nuestro programa es el encargado de llamar a la función
ENABLE_INTERRUPT() para activar previamente la interrupción junto con el
señalizador (flag) global de interrupciones.

Ejemplo:
#int_ad
control_adc()
{
adc_activo=FALSO

3.4.5.15.- Bus de datos I2C

Para implementar el bus I2C, el compilador de C dispone de algunos comandos que


se explican a continuación:
Usar la directiva:

#USE I2C (master/slave, SDA=Pin, SCL=Pin opciones)

La librería I2C contiene funciones para implementar un bus I2C. La directiva #USE
I2C permanece efectiva para las funciones I2C_START, I2C_STOP, I2C_READ,
I2C_WRITE e I2C_POLL hasta que se encuentre otra directiva #USE I2C. Se
generan las funciones software a menos que se especifique la opción
NOFORCE_SW. Las opciones son:
MASTER Establece el modo maestro o principal
SLAVE Modo esclavo
Especifica el pin SCL (es un bit de
SCL=pin
dirección)
SDA=pin Especifica el pin SDA
ADDRESS=nn Especifica la dirección del modo esclavo
FAST Usa la especificación rápida I2C
SLOW Usa la especificación lenta I2C
Reinicia el WDT mientras espera en
RESTART_WDT
I2C_READ
NOFORCE_SW Usa funciones hardware I2C
Tabla 3.4 opciones del bus I2C

A continuación se detalla un ejemplo de comunicación I2C.

//programa comunicación_I2C.c
//Realizado: Eduardo Mendoza Merchán – Luís Chacón Buñay
//Revisado: ing. Luís Córdova R.
//Función: Comunicación por Bus I2C

#include <16C74.h>
#fuses XT, NOWDT
#use delay(clock=4000000)
#use I2C(master, SCL=PIN_B0, SDA=PIN_B1)
main()
{
int data;
I2C_START(); // Inicia la comunicación
I2C_WRITE(10); //Dirección del dispositivo
I2C_ WRITE (1); //Dato 1 enviado
I2C_ WRITE (2);
I2C_ WRITE (3);
I2C_STOP(); //Fin de la comunicación
I2C_START(); //Inicio de la comunicación
I2C_ WRITE (11); //Dirección dispositivo
data=I2C_READ(); //Lee el bus y almacena en data
I2C_STOP(); //fin de la comunicación
}

3.4.5.16.- Interfaz de comunicaciones RS 232

Para implementar la comunicación por medio de RS232, es necesario escribir la


siguiente directiva:

#USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)

Esta directiva le dice al compilador la velocidad en baudios y los pines utilizados


para la I/O serie. Esta directiva tiene efecto hasta que se encuentra otra directiva
RS232. La directiva #USE DELAY debe aparecer antes de utilizar #USE RS232.
Esta directiva habilita el uso de funciones tales como GETCH, PUTCHAR y
PRINTF. Si la I/O no es estandar es preciso poner las directivas FIXED_IO o
FAST_IO delante de #USE RS232, Como ejemplo del uso de este directiva
tenemos:

#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3)

A continuación se expone un ejemplo:


//programa comunicación_RS232.c
//Realizado: Eduardo Mendoza Merchán – Luís Chacón Buñay
//Revisado: ing. Luís Córdova R.
//Función: programa que envía y recibe datos por RS 232

#include<16f877a.h>
#use delay (clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) /
#include <lcd.c>
#include <kbd.c>
#int_RDA //interrupción por RS 232
RDA_isr()
OPCIONES:

Tabla 3.5 opciones de interfaz RS-232

{ float c;
c=getc(); //lee datos de la interfaz RS 232
printf(lcd_putc,"\fdato = %f ",c);
lcd_putc(c);
} //Fin de la interrupción
main()
{
int c,d;
kbd_init();
lcd_init();
enable_interrupts(int_rda); //Activa la interrupción
enable_interrupts(global);
while (1)
{
c=kbd_getc();
if (c!=0)
{
printf(lcd_putc,"\f %d ",c-48);
putc(c); //Envía información a la interfaz RS232
}
}
}

3.4.5.17.- Convertidor análogo a digital.-

Muchos modelos de microcontroladores PIC disponen de canales análogos digitales.


En el caso del PIC 16F877 dispone de 8 canales de 10 bits, que pueden ser
configurados para ciertas combinaciones de entradas análogas o digitales, pero no
todas las combinaciones son posibles.

Funciones de entrada A/D

• SETUP_ADC_PORTS(value)

Esta función configura los pines del ADC para que sean analógicos, digitales o
alguna combinación de ambos. Las combinaciones permitidas varían, dependiendo
del microcontrolador.

Las constantes usadas también son diferentes para cada chip. Véase el archivo de
cabecera *.h para cada PIC concreto. Las constantes ALL_ANALOG y
NO_ANALOGS son válidas para todos los chips.

Algunos otros ejemplos de constantes son:

RA0_RA1_RA3_ANALOG

Esto hace que los pines A0, A1 y A3 sean analógicos y los restantes sean digitales.
Los +5v se usan como referencia; véase el siguiente ejemplo:
RA0_RA1_ANALOG_RA3_REF

Los pines A0 y A1 son analógicos; el pin RA3 se usa como voltaje de referencia y
todas los demás pines son digitales.

Ejemplo:

Setup_adc_ports( ALL_ANALOG );

• SETUP_ADC(mode)

Esta función prepara o configura el conversor A/D. Para la serie 14000 esta función
establece la corriente de carga. Véase el archivo 14000.H para los valores según el
modo de funcionamiento. Los modos son:

o ADC_OFF
o ADC_CLOCK_DIV_2
o ADC_CLOCK_DIV_8
o ADC_CLOCK_DIV_32
o ADC_CLOCK_INTERNAL

Ejemplo:

setup_adc(ADC_CLOCK_INTERNAL);

• SET_ADC_CHANNEL(canal)

Especifica el canal a utilizar por la función READ_ADC(). El número de canal


empieza en 0. Es preciso esperar un corto espacio de tiempo después de cambiar el
canal de adquisición, antes de que se puedan obtener lecturas de datos válidos.
Ejemplo:

set_adc_channel(2);
• i=READ_ADC()

Esta función lee el valor digital del conversor analógico digital. Deben hacerse
llamadas a SETUP_ADC() y SET_ADC_CHANNEL() en algún momento antes de
la llamada a esta función.

Ejemplo:

setup_adc( ALL_ANALOG );
set_adc_channel( );
while ( input(PIN_B0) ) {
delay_ms( 5000 );
value = read_adc();
printf("A/D value = %2x\n\r",value);
}

A continuación se desarrolla un programa, en que se lee un pin configurado como


análogo:

//programa conversor_AD.c
//Realizado: Eduardo Mendoza Merchán – Luís Chacón Buñay
//Revisado: ing. Luís Córdova R.
//Función: Adquiere datos por el canal 0 y convierte a digital

#include<16f877a.h> //Dispositivo
#fuses xt,nowdt,protect,noput,nolvp
#use delay (clock=4000000) //velocidad del reloj 4.00 MHz
#include"lcd.c" // Controlador de LCD
main()
{
float c;
lcd_init();
set_tris_a(0b000001); //RA0 anlog
setup_adc(adc_clock_internal); //Reloj interno
setup_adc_ports(ra0_analog); //RA0 entrada análoga
set_adc_channel(0); //utiliza el canal 0
while(1)
{
c=read_adc(); //almacena en c el valor obtenido
delay_ms(150); //
lcd_gotoxy(1,1); //0-5 V y 255 niveles
printf(lcd_putc,"Voltale = %1.2f V ",c);
delay_ms(150);
}
}

3.4.5.18.- Generación de PWM

El PIC 16F877 posee dos módulos de captura, comparación o PWM, dichos módulos
trabajan utilizando alguno de los timers del dispositivo y pueden configurarse para
realizar una comparación, conteo o PWM en base al timmer seleccionado.

Para explicar mejor se desarrolló en ejemplo sencillo, en el que se utilizó el módulo 1


(CCP1) para implementar un PWM, dicho módulo trabaja con el timmer2 del PIC.
Para la implementación se utilizaron las siguientes funciones internas del compilador
CCSC

setup_ccp1(CCP_PWM).- Configura CCP1 como PWM

setup_timer_2(modo, periodo, postscale).- por medio de esta instrucción se


configura el canal PWM.
El modo puede ser:

T2_DISABLED
T2_DIV_BY_1
T2_DIV_BY_4
T2_DIV_BY_16

El período, corresponde al valor que determina cuando el reloj será reseteado y su


valor puede estar entre 0 y 255.
Postscale es un numero entre 1 y 16 que determina cuantas veces el cronometro se
reseteara antes de producir una interrupción.

En el ejemplo desarrollado se ha utilizado la siguiente configuración:

setup_timer_2(T2_DIV_BY_16,255,1);

y ahora determinamos la frecuencia del pulso PWM que genera:

1 1
T= • 4 • t 2div•# periodos + 1 = • 16 • 4 • 256 = 0.004096 s
reloj 4000000
1
F = = 244hz
T

SET_PWM1_DUTY(value)
SET_PWM2_DUTY(value)

Estas funciones escriben los 10 bits de “value” al dispositivo PWM para establecer el
ciclo de trabajo. Se puede usar un valor de 8 bits si no son necesarios los bits menos
significativos. Value escribe el registro de 10 bits que determina el ciclo de trabajo
del PWM. Debe tenerse en cuenta que según la velocidad a la que trabaja el
oscilador, el registro de 10 bits, puede reducirse a 8 en caso que se requiera .una
velocidad de respuesta alta.

A continuación se escribe el código fuente de un ejemplo con PWM:


//programa pwm.c
//Realizado: Eduardo Mendoza Merchán – Luís Chacón Buñay
//Revisado: ing. Luís Córdova R.
//Función: Envía pulso PWM por pin RC3 para controlar un servo
#include<16f877.h>
#use delay (clock=4000000)
#include <lcd.c>
#include <kbd.c>
main()
{
float vr=90,value=62; //valor que muestra el LCD
int pwm=92; //valor que cambia el ancho de pulso
char k; //Para el teclado
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,255,1);
set_pwm1_duty(pwm);
lcd_init();
kbd_init();
printf(lcd_putc,"\fVALOR_PWM: %f",-vr);
while(true) //lazo infinito
{ k=kbd_getc();
if (k=='#') //cuando se presiona esta tecla aumenta
{
value=value+1.75;
vr = vr+5;
pwm=value;
set_pwm1_duty(pwm);
printf(lcd_putc,"\fVALOR_PWM: %f",vr-180);
}
if (k=='*') //cuando se presiona esta tecla disminuye
{
value=value-1.75;
vr = vr-5;
pwm=value;
set_pwm1_duty(pwm);
printf(lcd_putc,"\fVALOR_PWM: %f",vr-180);
}
}
}//fin del programa
CAPÍTULO IV

Análisis y desarrollo del sistema de control de acceso.

Para realizar el análisis del sistema de control de acceso peatonal, se ha dividido en


dos partes. La primera que corresponde al control con microcontroladores y la
segunda parte que esta relacionada con la supervisión del sistema con un programa
desarrollado en lenguaje C#.

Antes de realizar la descripción del sistema, se desarrolla una descripción completa


del funcionamiento del sistema: en la figura 4.1 se puede apreciar una esquema
general del sistema, en donde se aprecia un PC remoto que supervisa el proceso que
tiene ciertas atribuciones que se destallarán mas adelante, la que se encuentra
interconectada a un sistema compuesto de tres microcontroladores PIC 16F877A,
comunicados entre si a través de un bus de datos.

Figura 4.1 Esquema general del sistema de Control de Acceso


4.1 Descripción de Sistema.-

En el párrafo anterior se ha mencionado a un ordenador como parte del sistema, pues


bien, El ordenador tiene funciones de supervisión y ciertas atribuciones tales como el
cambio del clave, que dentro del sistema de control de acceso es el único al que se le
permite realizar esta labor.
Se ha desarrollado un software de computadora, que es el encargado de recibir/enviar
las órdenes recibidas/enviadas por el PIC, el mismo que ha sido desarrollado en
lenguaje C#, dada las facilidades que presenta este lenguaje para desarrolladores
novatos. El programa se encarga de recibir datos enviados por el PIC Maestro y
almacenarlos en una base de datos. El PIC maestro es un microcontrolador (de los
tres que corresponden al sistema) que se encarga de receptar la información
proveniente de los dos Esclavos (Cada microcontrolador esclavo corresponde a un
puerta de acceso principal, en total son dos).

Figura 4.2 Disposición física de los componentes del sistema

Los mensajes enviados por el microcontrolador maestro, a través de la interfase de


comunicación RS232 son números enteros, que los microcontroladores envían con
valores que dependen de cada actividad que se produzca en ellos, y que en el
computador son traducidos a mensajes ordinarios, reconocibles por el usuario, los
mensajes en el ordenador son los siguientes:

Usuario Accesando en puerta 1 o 2.- Se produce cuando el usuario ha presionado una


tecla con un valor entre 0 - 9, el mensaje corresponde a un aviso que le indica al
supervisor (tomamos como supervisor a la persona encargada de vigilar el sistema)
que alguien esta intentando ingresar al condominio, para lo cual indica por que
puerta están intentando ingresar. Este aviso no se almacena en la base de datos
creada para el sistema, puesto que se la considera simplemente como una señal de
advertencia para el personal encargado de la seguridad.

Persona ha ingresado en puerta 1 o 2.- Se produce cuando una persona ha accedido al


sistema con una identificación de apartamento y clave correcta, y por ende la puerta
se ha abierto, de igual forma que el mensaje anterior, el sistema indica al ordenador
por que puerta se ha ingresado. El ordenador al recibir esta información, procede a
almacenar en un registro de su base de datos, la hora, fecha, número de apartamento
y puerta por la cual se produjo el ingreso del usuario. La información de hora y
fecha se toma del sistema del ordenador, puesto que en los microcontroladores no se
ha creado ningún tipo de calendario.

Puerta Abierta.- este mensaje se despliega cuando la puerta es abierta por medio del
ordenador o por medio del botón interno, creado a propósito con el fin de facilitar la
salida de personas que se encuentran dentro del condominio. Esta información no
será registrada si la puerta se abre por medio del botón interno, pero si se abre a
través del ordenador, se registrará en la base de datos del sistema.

Alarma activada.- Este mensaje se produce si un usuario ha errado por tercera


ocasión al ingresar la clave, al intentar acceder al sistema, el microcontrolador en el
que se produce el evento se bloquea por un tiempo determinado, se activa una alarma
sonora que se encuentra localizada dentro de la tarjeta del microcontrolador, y se
activará una señal de salida para activar una bocina de mayor capacidad sonora. Este
mensaje se almacenará en la base de datos del ordenador con el mismo formato que
el anterior es decir fecha, hora y en la puerta que se produjo el incidente.

En lo que respecta a los microcontroladores, estos se manejan con dos tipos de


comunicaciones. Primero, los tres Microcontroladores se comunican entre si a través
del bus de datos I2C, uno de los cuales hace su función de maestro, y los dos
restantes trabajan como esclavos los cuales se los ha ubicado en cada puerta de
ingreso al condominio, puesto que ellos son los que interactuaran directamente con el
usuario. El maestro se encarga de preguntar periódicamente por el estado de los
esclavos y estos responderán de acuerdo a la acción que se este ejecutando en ese
momento en cada uno de ellos. Segundo, el microcontrolador maestro tiene otra tipo
de comunicación, que es la popular interfaz de comunicación RS232, por medio de la
cual se comunica con el ordenador con el fin de intercambiar información de forma
bidireccional. En el ordenador se ha trabajado con una interfaz creada en C# que es
la encargada de recibir la información proveniente del microcontrolador, de cierta
forma “traducir” los valores enviados por el microcontrolador y presentarlos en
forma de mensajes entendibles por el usuario, y finalmente almacenar la información
en una base de datos generada en SQL Server 2005.

Los esclavos tienen una función primordial, y su funcionamiento prevalecerá a los


demás elementos, puesto que de ellos depende en gran parte la fiabilidad del sistema,
ahora se describe su funcionamiento:

En la memoria eeprom de los microcontroladores esclavos, se encuentran


almacenados veinte claves de cuatro dígitos cada una, que corresponden a veinte
departamentos, que es el numero que se ha destinado para este proyecto (En el caso
que se desee ampliar se puede almacenar hasta 128 claves distintas, sin añadir
memorias externas), cada una de las claves esta destinada a un apartamento,
designados de 01 al 20. Si un usuario desea ingresar, deberá ingresar primero el
número de apartamento correspondiente (ver figura 4.3 1) que de antemano será
asignado un número por cada apartamento existente en el condominio.

Figura 4.3 pantalla del módulo LCD para ingreso de número de apartamento

Ingresado el número de apartamento, se despliega una pantalla de bienvenida, luego


de lo cual aparece otra pantalla que le indica el ingreso de la clave correspondiente,
tal como se ilustra en la figura 4.4.

1La imágenes mostradas, corresponden a la simulación del proyecto en computadora, con el simulador ISIS
PROTEUS, versión 6.9 SP3, de Labcenter Electronics.
Figura 4.4 pantalla del módulo LCD para ingreso de clave

Si la clave ingresada es correcta, el módulo LCD despliega un mensaje de clave


correcta (ver figura 4.5), y finalmente indica que la puerta ha sido abierta,
acompañada de un mensaje de fin de sesión.

Figura 4.5 pantalla del módulo LCD con mensaje de puerta abierta

Si la clave no es correcta, el sistema proporciona dos oportunidades mas para que sea
ingresada la clave correctamente, ver figura 4.6.

Figura 4. 6 pantallas del módulo LCD si la clave ingresada es incorrecta

Si por tres ocasiones la clave se ingresa incorrectamente, el sistema despliega por


medio del módulo LCD mensajes de advertencia contra el presunto intruso y se
bloquea por un minuto, activando una alarma sonora y generando una señal a través
de un pín a fin de activar una señal sonora más potente, ver figura 4.7.

Figura 4. 7 Pantalla del módulo LCD que india que la alarma ha sido activada
Las puertas de los condominios aseguradas con este sistema podrán abrirse desde el
interior del condominio por medio de un interruptor, éste envía una señal que ingresa
a un interrupción dentro del microcontrolador y permite abrir la puerta por medio del
sistema, si en ese preciso momento una persona esta intentando ingresar por la
misma puerta, el microcontrolador se reiniciará de esa sesión y volverá a su estado de
ingreso departamento.

Todos los proceso descritos con relación a los microcontroladores esclavos, serán
enviados por medio del bus I2C al microcontrolador maestro, el cual una vez que los
registra en su memoria, procede a enviarlos al ordenador a través de una interfaz de
comunicación RS-232, en donde el ordenador presentará al usuario los mensajes
apropiados y almacenará la información que sea pertinente.

Si un usuario cree que su clave debe ser cambiada, puede cambiarla, pero este
proceso únicamente se lo puede realizar a través del ordenador. El ordenador envía
el número de apartamento cuya clave desea ser cambiada, el microcontrolador
confirma la existencia o no del número de apartamento ingresado, si el apartamento
es correcto, se digita la clave correspondiente. La clave ingresada es enviada al
microcontrolador maestro, el cual compara con sus registros en la memoria eeprom,
y si la clave es correcta envía autorización al PC para que se ingrese la nueva clave.
La nueva clave es digitada en el ordenador, el cual la envía al microcontrolador
maestro, éste cambia primero en su memoria eeprom, y luego la envía por medio del
Bus I2C a los otros dos esclavos, los cuales confirmarán el cambio de clave al
ordenador, por intermedio del microcontrolador maestro.

4.2.- Selección de dispositivos y lenguajes de programación.-

El proyecto desarrollado tiene una gran cantidad alternativas en lo relacionado a


microcontroladores, y lenguajes de programación. Por ejemplo en el mercado de los
microcontroladores existe una variedad de fabricantes muy extensa, y cada fabricante
dispone de una gama muy amplia de modelos, en la versión 4.0 del CCS C, en su
carpeta “devices” (dispositivos) dispone de 345 archivos de cabecera, cada uno de
los cuales corresponde a un modelo de PIC diferente: De igual forma sucede para la
programación tanto de los microcontroladores, como del ordenador.
4.2.1.- Selección del microcontrolador.-

Se había mencionado la existencia de una gran variedad de alternativas al momento


de seleccionar el microcontrolador, debido a que existen muchos fabricantes de
microcontroladores tales como Motorota, Intel, Microchip, Atmel, Parallax, Zilog,
Philips, entre los principales. Los microcontroladores más populares son:

8048 (Intel). Es el padre de los microcontroladores actuales, el primero de todos. Su


precio, disponibilidad y herramientas de desarrollo hacen que todavía sea muy
popular.

8051 (Intel y otros). Es sin duda el microcontrolador más popular. Fácil de


programar, pero potente. Está bien documentado y posee cientos de variantes e
incontables herramientas de desarrollo.

80186, 80188 y 80386 EX (Intel). Versiones en microcontrolador de los populares


microprocesadores 8086 y 8088. Su principal ventaja es que permiten aprovechar las
herramientas de desarrollo para PC.

68HC11 (Motorola y Toshiba). Es un microcontrolador de 8 bits potente y popular


con gran cantidad de variantes.

683xx (Motorola). Surgido a partir de la popular familia 68k, a la que se incorporan


algunos periféricos. Son microcontroladores de altísimas prestaciones.

PIC (MicroChip). Familia de microcontroladores que gana popularidad día a día.


Fueron los primeros microcontroladores RISC

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.):
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 para el sistema.

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

• 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 que
son de un costo más elevado, 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.
En el caso particular de este proyecto la elección del microcontrolador se encontró
influenciada por el uso en el entorno laboral de quién suscribe, de la familia de
microcontroladores PIC. Por lo tanto casi a modo de necesidad se optó por utilizar un
microcontrolador PIC, para adquirir experiencia con este tipo de microprocesadores.
Por lo cual el proceso de elección tuvo su curso en sentido opuesto, es decir en lugar
de enumerar las prestaciones que debía cumplir el microprocesador y en base a ello
seleccionar el más adecuado, se tomó el PIC16F877A, que es el que se ha utilizado
en dicho entorno laboral, y se verificó que el mismo cumplía los requisitos
necesarios. Observando brevemente el estado actual de la industria nacional, podrá
verificarse que los microcontroladores PIC son los más utilizados.

Los detalles más importantes que hacen que la familia de microcontroladores PIC sea
la más utilizada hoy en día son los siguientes:

- Sencillez de manejo: Tienen un juego de reducido de instrucciones (35).


- Buena información, fácil de conseguir y económica.
- Precio: Su costo es comparativamente inferior al de sus competidores.
- Poseen una elevada velocidad de funcionamiento. Buen promedio de parámetros:
velocidad, consumo, tamaño, alimentación, código compacto, etc.
- Herramientas de desarrollo sencillas y de bajo costo. Muchas herramientas software
se pueden obtener libremente a través de Internet desde Microchip
(http://www.microchip.com).
- Existe una gran variedad de herramientas hardware que permiten grabar, depurar,
borrar y comprobar el comportamiento de los PIC.

Los microcontroladores PIC, fabricados por Microchip Corporation, en los últimos


años han tenido un crecimiento muy alto en ventas a nivel mundial. El crecimiento
de la participación de estos microcontroladores en el mercado mundial ha sido
posible debido a la capacidad de estos dispositivos de satisfacer las necesidades, cada
vez más exigentes, de los ingenieros y técnicos de todo el mundo. Este crecimiento
también se alimentó por la variedad ofrecida en sus presentaciones y tipos de
memoria.
Las características que se han mencionado, han logrado que estos microcontroladores
sean considerados por los aficionados a la electrónica, la robótica, micro robótica,
industria automotriz, etc. a tal punto que se encuentra mucha información, proyectos,
foros y software gratuito, e información difundido a través del Internet, lo cual
facilita su aprendizaje, la implementación de proyectos, la localización de
información, etc.

En el caso de nuestro entorno, en Guayaquil aún se encuentra bastante rezagado en


almacenes que tengan a la venta este tipo de elementos, pero en cambio se encuentra
a la venta en ciudades como Quito y Cuenca que proveen de un buen surtido de este
tipo de microcontroladores. Lo cual no resulta mayor problema al comprarlos. Igual
situación se observa en dispositivos que han sido utilizados en este proyecto, tales
como LCD, teclados, conectores, etc. que hay que comprarlo en las mencionadas
ciudades.

Otra alternativa, viable en nuestro país en relación a microcontroladores, se


encuentra en los microcontroladores fabricados por la empresa Atmel, que produce
microcontroladores de la serie AVR (ver figura 4.8), que al igual que los PIC solo se
los puede conseguir en Quito o Cuenca, y en forma general su costo es un poco mas
elevado. Sus características son similares a los microcontroladores PIC, pero no hay
tanta información disponible que lo hay de sus competidores de la Microchip.

Figura 4.8 Microcontrolador fabricado por Atmel


Dentro de las grandes familias de los microcontroladores PIC, se encuentra el PIC
16F877A, que se ha seleccionado para el proyecto realizado en este proyecto de
graduación, seleccionado debido a que ya habían sido adquiridos por La Universidad,
y se ajustaban a nuestra necesidades, debido a que disponen de la suficiente
capacidad de memoria ( 8192) de la cual se ocupa cerca del 35%, el número de pines
son suficientes, dispone de memoria eeprom, bus I2C y RS232 implementado por
Hardware, su memoria es de tipo Flash, apropiada para este tipo de proyectos 2. Es
posible haber seleccionado otro tipo de microcontrolador de menor número de pines
y menor RAM, sin embargo, en caso de querer hacerlo, el programa se acoplaría
perfectamente con cambios insignificantes, siempre y cuando dispongan de las
funciones antes mencionadas y que se encuentren en el mercado local.

4.2.2.- Selección del Lenguaje de programación del Microcontrolador

Se había mencionado que existe mucho material relacionado con los


microcontroladores PIC, sobretodo en lo que se refiere a su programación y
proyectos. Todo este material existe en el Internet, pero esta relacionado a la
programación en Lenguaje Ensamblador, en lo que respecta a otras plataformas de
programación existe muy poco material debido a que a pesar de que ya llevan
algunos años, su acogida se esta produciendo de forma lenta..

Programar en otro lenguaje diferente al Ensamblador en nuestro medio es inusual,


debido a que es la primera vez que se lo realiza, y la mayoría de los programadores
prefiere aferrarse a lo que ya conocen, por cuestiones que caen mas en el área
sociológica, y que no es tema de discusión en este proyecto. Programar en un
lenguaje diferente al ensamblador, fue una idea que nace al observar la evolución de
los, lenguajes de computadora, que al igual que los microcontroladores nace con el
Lenguaje Ensamblador, para luego dar paso a los lenguajes de alto nivel orientado
especialmente para los programadores.

Como condición inicial para le elección del software de programación se tuvo en


cuenta la necesidad de programar en un lenguaje de alto nivel y en particular en
lenguaje C que es el más difundido para este tipo de aplicaciones. La necesidad de
utilizar un lenguaje de alto nivel radica en las complicaciones que pueden surgir
sobre todo en la implementación de las rutinas de comunicación con distintos

2 Para mas detalles del microcontrolador PIC 16F877A, refiérase al capitulo II del presente trabajo o a los
anexos en migración del PIC16F877 a PIC16F877A
periféricos. Dada la complejidad de dichas rutinas, se consideró que el uso del
lenguaje ensamblador podría acarrear muchas complicaciones.

Siguiendo los lineamientos de la elección del microcontrolador, se intentó


implementar el uso del entorno de programación utilizado en el entorno laboral de
quien suscribe, de ese modo se comenzó a investigar el software PicAntIDE.

El software PicAntIDE en su versión 5.1 incluye un compilador en C (BoostC


compiler), con lo cual no se necesita más que la instalación del mismo para poder
programar y compilar en lenguaje C. Tal es así que se comenzaron a programar e
implementar pequeñas rutinas de manejo de puertos. Pero el problema que se
presentó con dicho software, es que el mismo no posee un emulador integrado para
poder simular el funcionamiento del PIC y así poder verificar el programa realizado.
Luego de varios intentos fallidos de agregar al paquete un emulador y no obtener los
resultados esperados, se optó por utilizar otro entorno de programación.

El siguiente entorno investigado fue el Mplab. El atractivo de utilizar dicho entorno


se basa en que es el software desarrollado por Microchip, empresa que desarrolla la
familia de microcontroladores PIC, y además por ser el más difundido dentro de los
entornos de programación de microcontroladores.

En el caso del entorno MPLAB, la principal dificultad radica en que solo la última
versión del paquete, posee integrado un compilador en C. Cabe aclarar que la última
versión del software no tiene distribución gratuita, por lo cual es muy complicado
poder utilizar el mismo si no se cuenta con la licencia correspondiente.

Teniendo en cuenta lo anterior se optó por utilizar una versión anterior, de


distribución gratuita, a la cual se le puede agregar un compilador en C. La versión
anterior que se puede obtener en la página oficial de Microchip es la versión 7.10.

El siguiente paso fué la elección del compilador de lenguaje C a utilizar, para ello se
buscó en Internet cuales eran los compiladores más difundidos que soporta el
MPLAB 7.10, llegando a la determinación de elegir entre dos compiladores a saber:
- CC5X Versión 3.2
- CCSC Versión 3.216

Si bien ambos compiladores pueden utilizarse en el entorno MPLAB, se optó por


utilizar el CCSC que se diferencia del CC5X al poseer mayor cantidad de funciones
propias y librarías a incluir.

Por ejemplo, para el caso de las comunicaciones vía I2C y SPI, el compilador CCSC
incluye funciones propias de lectura, escritura y configuración de los periféricos.
El compilador CCSC no es de distribución gratuita, de todos modos se adjunta al
informe en el CD correspondiente.

La instalación del mismo no es sencilla y debido a la difusión de algunos “parches”


se deben seguir los pasos indicados en la guía para uso de entorno
microcontroladores anexa a este informe.

El compilador CCSC posee una completa bibliografía sobre el uso de sus funciones
internas, en el CD adjunto se brinda el manual del compilador bajo el nombre CCSC
manual.pdf donde se puede encontrar una guía completa sobre el uso del compilador,
el uso de sus funciones específicas así como también ejemplos de aplicación.

La idea de programar en un lenguaje de alto nivel, no es por caer en el facilismo, sino


realizar proyectos de mayor envergadura, debido a que las nuevas familias de
microcontroladores así lo exige, por ejemplo la familia 18 de Microchip disponen de
una memoria ROM de hasta 128KB, o pueden direccionar hasta 2 MB. Realizar un
sistema grande con este tipo de microcontroladores en lenguaje ensamblador,
resultaría demasiado complicado, laborioso y tedioso, debido a la misma estructura
secuencial del lenguaje ensamblador, que, a pesar de que dispone de los “Includes 3”,
la tarea se vuelve muy laboriosa.

3 Las librerías incluye, son archivos tipo texto, que contienen procedimientos o funciones que pueden ser
llamados desde un programa principal en asm, a fin de disminuir el número de líneas en el programa principal, o
crear rutinas para ser utilizador en otros programas, como por ejemplo para el manejo del Módulo LCD.
En el párrafo anterior no se ha considera aún el tema de dar mantenimiento a los
sistemas, sea para corregir o ampliar funciones en el programa principal. Este es un
problema que es bastante crítico en programas y bases de datos de computadores,
puesto que muchas de las veces el que hace el mantenimiento no es el mismo que
realizó el programa. Un problema similar podría generarse con los
microcontroladores, y dar mantenimiento a un programa cuyo archivo fuente se
encuentra en lenguaje Ensamblador sería muy complicado (ver figura 4.9).

Figura 4.9 Entorno de desarrollo de CCS C Compiler ver 4.017

El lenguaje C tiene su nivel de complejidad, como lo afirman muchos autores en sus


libros, debido a que se lo considera con un lenguaje de bajo nivel y un lenguaje de
alto nivel. Aunque este nivel de complejidad, relativamente hablando, con respecto al
Lenguaje Ensamblador no resulta tan “complejo”, y nos brinda la oportunidad de
programar en un lenguaje estructurado, con una sintaxis más amigable y que genera
programas fáciles de entender y recordar. Mucho se habló del lenguaje C y sus
bondades en capítulos anteriores, razones suficientes para preferirlo antes que a otros
lenguajes como el Basic o el pascal, y de igual forma se analizó, las características
del CCS C compiler), y el uso del C ANSI en su entorno de desarrollo, lo que hizo
que el presente proyecto se desarrollara en Lenguaje C y en el compilador ya
mencionado.
4.2.3.- Elección del software y hardware para el grabado del PIC.

La gran cantidad de información que se obtiene en Internet evidencia la gran


cantidad de placas que existen para el grabado de los PIC. En su mayoría se trata de
empresas que venden el kit de desarrollo la placa de grabación y el software
(programmer) que generalmente es compatible con Mplab. De ese modo puede
utilizarse el entorno Mplab para todas las tareas necesarias de desarrollo que son
programación, compilado, simulación y grabación.

Lamentablemente, por lo investigado, es dificultoso conseguir un programmer de


distribución gratuita que además brinde la posibilidad de acceder al diseño de la
placa de grabación (sin tener que comprarla). Planteado el problema, se optó por
utilizar un programmer en forma individual al entorno Mplab, con lo que se concluyó
en la utilización del software Icprog y una placa de grabación.

El IC-Prog es un programa que funciona bajo Windows para controlar un


programador de microcontroladores PIC. Para operar este programa se necesitan
conocimientos básicos de Windows y de electrónica.

Para que el programa funcione se deberá conectar a la computadora un programador,


y configurar correctamente tanto a éste como al programa. Por favor note que, debido
a la variedad de programadores y sus diferencias el programa puede no funcionar con
ciertas combinaciones de computadoras y equipos programadores.

El IC-Prog requiere Windows 95, 98, ME, NT, o XP y un coprocesador interno o


externo para funcionar. Todos los procesadores compatibles y superiores a un 386
con 8Mb de memoria RAM deberían funcionar correctamente.

El IC-Prog es un programa registrado aunque es de libre distribución. Se permite su


copia y distribución en la medida en que no se lo modifique de manera alguna, se
cobre por su uso o se utilice para fines ilegales.
Figura 4.10 Entorno de programación Ic-prog ver 1.05D

Figura 4.11 Programador utilizado en el proyecto de control de acceso


El programador que se ha utilizado, es de fabricación casera, y gracias a la capacidad
del IC-prog, permite programar una variedad muy amplia de microcontroladores PIC
y memorias seriales. Para lo cual se alimenta con una tensión entre 13 y 18 voltios y
utiliza el puerto paralelo para realizar la transferencia de información. En la figura
4.11 se puede apreciar su imagen, en donde se muestra el programador con el
microcontrolador PIC 16F877A.
4.2.4.- Selección del Lenguaje de programación del ordenador.-

La programación de la interfase de comunicación, el programa de supervisión y el


almacenamiento de información se realizó en C# y SQL Server. C# es un lenguaje
relativamente nuevo, pero que ha tenido una acogida muy buena por parte de los
programadores que en poco tiempo se ha convertido en un lenguaje muy popular,
debido principalmente a que es un lenguaje orientado a .Net, que es una metodología
que permite compartir recursos y códigos con otros lenguajes de programación, para
proporcionar a los programadores las avanzadas herramientas para producir la
siguiente generación de aplicaciones para escritorio e Internet.

Visual C# 2005 Express Edition, es un entorno ultima generación, con gran parte de
los elementos de Visual Studio 2005, y el compilador de C# 2.0. Esta herramienta
que se adquiere de forma gratuita, al igual que SQL Express, permite desarrollar
aplicaciones orientadas a Escritorio, aplicaciones Web, páginas Web, programación
de bases de datos en ADO.NET, programación de dispositivos móviles, etc. Todo
esto con características heredadas de C++ y Java y con un entono tan sencillo como
el de Visual Basic.

4.3.- Análisis de los programas y librerías de los microcontroladores PIC.

Se había explicado en detalle en la parte inicial de este capítulo el funcionamiento


del sistema de control de acceso, ahora se procede a explicar el programa creado para
hacer funcionar todo el sistema explicado, comenzando con diagramas generales, y
finalizando con diagramas específicos y sus respectivos programas fuentes. De igual
forma se analizará el circuito eléctrico de cada dispositivo en donde se crea
necesario.

El sistema de control de acceso peatonal se puede simplificar tal como se muestra en


el diagrama de bloques de la figura 4.12, donde se muestra la interacción que existen
entre un ordenador y el microcontrolador maestro, a través de una interfase de
comunicación RS-232, y luego se aprecia la comunicación entre los tres
microcontroladores por medio de un Bus de Datos, que en este caso es I2C. El
objetivo del microcontrolador maestro es regular las comunicaciones y servir de
medio de enlace entre los microcontroladores esclavos, que son los que ejecutan las
tareas y el ordenador, que es el encargado de supervisar el proceso.

Figura 4.12 diagrama de bloques del sistema de control de acceso peatonal

Partiendo de este diagrama, vamos a dividir el proceso que se produce en todo el


sistema en tres bloques, a fin de analizar cada bloque de forma independiente y luego
asociar el proceso de comunicación con los otros bloques. Los bloques en lo que se
divide el sistema son:

Programa microcontrolador esclavo


Programa microcontrolador maestro
Programa ordenador C# y SQL

4.3.1.- Programa microcontrolador esclavo.-

El programa que esta contenido en los microcontroladores esclavos es de mucho


mayor tamaño que el del maestro, y es muy parecido en los dos esclavos, debido a
que comparten las mismas librerías, lo que cambia son las direcciones que lo
identifican con el microcontrolador maestro y que están contenidas en el programa
principal. Para desarrollar este programa, se ha creado tres librarías, las mismas que
se describen a continuación con sus respectivos diagramas de flujo. Las librerías son
pantalla.h, selapart.h, selclave.h.
4.3.1.1.- La librería pantalla.h.- Esta librería contiene 3 Funciones muy sencillas y
para las cuales no se requiere diagrama de flujo.

i).- Función beep().- esta función se encarga de generar un sonido suave y corto,
apropiado para cuando se presiona una tecla, esta función utiliza la librería tone.h del
conjunto de librerías de CCS C, a continuación se anota el código fuente 4.

void beep() //sonido de teclas


{
generate_tone(Db_note[0],20);
delay_ms(75);
} //fin de la libreria

ii).- Función alarma().- Esta función que también utiliza la librería tones.h, ha sido
desarrollada con el fin de generar un tono similar a una alarma, compuesta de
sonidos agudos que llaman la atención y que duran aproximadamente 1 min.

void alarma() //Genera el sonido de alarma


{
int i=0,k,x=1,y=3;
for (i=0;i<80;i++) // repite por ochenta veces los sonidos generados
{
generate_tone(b_note[0],180);
delay_ms(30);
port_a=4;
generate_tone(B_note[3],80);
delay_ms(30);
port_a=0;
}
} //fin de la librería

4 Los códigos fuentes copiados en el presente código corresponden a los desarrollados para los programas de
los microcontroladores y el ordenador. El texto marcado en azul son funciones propias de C ANSI, y el texto
marcado en verde son comentarios.
Estas dos funciones tienen un pin de salida que es el pin B0, al cual se ha conectado
un transistor que genera la corriente necesaria para hacer sonar un altavoz, que se
encarga de reproducir las notas musicales generadas por estas dos librerías., a
continuación se muestra el circuito y una foto del parlante utilizado en el proyecto, el
cual es de 8 ohmios y una potencia de salida de ½ vatio.

Figura 4.13 Circuito de conexión del altavoz del sistema

Figura 4.14 Foto del altavoz usado en el proyecto

iii).- Función Pantalla().- Esta función corresponde a una secuencia de mensajes que
se despliegan en el módulo LCD al arrancar el microcontrolador, cuyo objetivo son
identificar el nombre del proyecto, y los nombres de los integrantes y del director de
tesis, a continuación se muestra el código fuente de esta librería.

void ini_pant() //nombre de la función


{
int i;
for (i=0;i<2;i++) //repite dos veces
{
lcd_putc("\f>-CONTROL__ACCESSO-<\n");
delay_ms(200);
lcd_putc(" CONTROL DE INGRESO");
delay_ms(500);
}
lcd_putc("\f -> PLAN DE TESIS <-\n");
lcd_putc(" - UPS - OCT DEL 2006");
delay_ms(1500);
lcd_putc("\fREA: EDUARDO MENDOZA\n");
lcd_putc(" LUIS CHACON");
lcd_putc("REV: ING LUIS CORDOVA");
delay_ms(1000);
beep();
}//fin de la librería

Se ha utilizado un módulo LCD de 2x20 es decir de 2 filas y 20 caracteres cada fila.


Dispone de 16 pines , de los cuales los pines 15 y 6 sirven para encender la luz del
LCD. En la figura 4.15 se muestra una simulación de los mensajes mostrados y en la
figura 4.16 se muestra una foto del módulo LCD usado en este proyecto.

Figura 4.15 Simulación de los mensajes mostrados por el LCD

Figura 4.16 Foto del módulo LCD usado en el proyecto

El módulo LCD se conecta directamente a los pines del microcontrolador, para lo


cual se ha destinado el puerto D, siendo la distribución de los pines tal como se
muestra a continuación:
LCD 1 2 3 4 5 6 11 12 13 14 15 16
Vss Vdd Vo RS R/W E D5 D6 D7 D8 +5V GND
PIC RD1 RD2 RD0 RD4 RD5 RD6 RD7 RA0
Tabla 4.1 asignación de pines del LCD al microcontrolador

En el cuadro anterior se muestra los pines que corresponden del LCD al


microcontrolador. Hay que hacer notar la conexión que existe para la luz del módulo
LCD, el cual se muestra en la figura 4.17. Esta luz es manejada por el PIN RA0 del
microcontrolador, el cual por seguridad se ha conectado a un transistor, el cual será
el que maneja la corriente que necesita este dispositivo. La conexión está entre el
PIN 15 y 16 del LCD, el cual es un diodo y entre sus terminales se ha dispuesto una
resistencia de 10 ohmios para controlar el flujo de corriente.

Figura 4.17 Conexión de los pines del módulo LCD

4.3.1.2.- La librería selapart.h.- Esta librería se encarga de recibir datos del teclado,
correspondientes al número de apartamento, el diagrama se muestra en la figura 4.18.

El diagrama muestra el flujo principal, ya que se han descartado lazos sencillos que
cumplen funciones que se explican en el mismo programa. El objetivo de esta
función es la de recibir datos del teclado que corresponden al número de
apartamento, convertirlos a un numero entero y verificar si existe o no este
departamento, si el procedimiento es correcto, termina la función y el dato obtenido
es enviado a la siguiente función en el programa principal. A continuación se copia el
código fuente correspondiente a esta función.
Figura 4.18 Diagrama de flujo de la librería sel-apart

int code_usuario() //inicio de la función


{
int i=0,j=0,int_conv=0,k1,salida=0,resultado;
char k,ingre_usua[2]; //almacena el número de apartamento
char entrada[10]={'0','1','2','3','4','5','6','7','8','9'};
int valores[10]={0,1,2,3,4,5,6,7,8,9};
lcd_putc("\fDIGITE SU NUMERO DE\n"); //mensaje de entrada
lcd_putc("APARTAMENTO: ");
port_a=0;
while (salida==0)
{
k=kbd_getc(); //leo el teclado y almaceno en k
if(k!=0 && k!='*' && k!='#') //convierte tipo char a tipo int
{
beep();
port_a=1;
reset=1;
contador=0;
ingre_usua[i]=k; //paso el valor al array
lcd_putc(k); //visualiza en lcd code del apartamento
delay_ms(100); //permite visualizar
*dir_status=21; //envía usuario accesando a PC
for (j=0;j<10;j++)
{
if (k==entrada[j]) //si el valor coincide con entrada
k1=valores[j]; //k1 lleva su equivalente
}
if(i==0) //si i=0, son decenas
k1=k1*10; //convierte a decenas
int_conv=int_conv+k1; //almaceno las decena
i++; //si i=2 es unidad y se almacena en int_conv
if(i==2)
{
if(int_conv>0 && int_conv<21) //si el apartamento existe
{
printf(lcd_putc,"\f DEPARTAMENTO %u\n",int_conv);
delay_ms(500);
lcd_putc("\n >--BIENVENIDO--<");
delay_ms(1000);
reset=0;
contador=0;
}
else //no hay selección válida
{
lcd_putc("\fNO EXISTE EL DEPARTAMENTO\n");
delay_ms(1000);
lcd_putc(" VERIFIQUE SU ID..!");
delay_ms(1000);
}
salida=1; //para salir del bucle while
}
}
if (k=='*' || k=='#')
{ port_a=1;
reset=1;
}
if (contador>200||!BIT_TEST(port_a,5)||variable_pc==1)//reinicia puerta ( RA5)
{
lcd_putc("\fReiniciando.....\n");
delay_ms(1000);
reset=0;
int_conv=0;
contador=0;
salida=1;
}
if(cuenta==5) //concluye datos enviados del master
{ numero=eprom[0];
eprom[0]=eprom[0]*4-4; //determina posición en la eeprom
write_eeprom(eprom[0],eprom[1]); //escribe en la eeprom
write_eeprom(eprom[0]+1,eprom[2]);
write_eeprom(eprom[0]+2,eprom[3]);
write_eeprom(eprom[0]+3,eprom[4]);
cuenta=0; //reinicia para próximo cambio
lcd_putc("\fCLAVE HA CAMBIADO..!"); //mensaje de cambio de clave
printf(lcd_putc,"\n APARTAMENTO %u",numero);
*dir_status=28; //notifica al ordenador que se ha efectuado cambio
delay_ms(2000);
salida=1;
}
} //fin bucle while
return(int_conv); //retorna el código del apartamento
}

4.3.1.3.- La librería selclave.h .- Esta librería se encarga de recibir datos del teclado
correspondientes a la clave de acceso, compararlos con los almacenados en la
memoria eeprom y determinar si es válida o no. Si es válida envía una señal por el
pin A1, de lo contrario permite por dos ocasiones el ingreso de la clave, si es errónea
por tercera vez, se activa una alarma sonora, generada por el mismo
microcontrolador por el lapso aproximado de un minuto, luego de lo cual vuelve a su
estado inicial.

En la figura 4.19 se muestra el diagrama de flujo de esta función, donde se muestra


de forma general el flujo que siguen los datos hasta conseguir activar la cerradura
eléctrica o activar la alarma. Esta función recibe el dato recibido en la función
anterior sel_apart (int_conv) que es un entero de 8 bits, este dato es multiplicado por
cuatro y restado de de cuatro es decir:
dir _ eprom = int_ conv × 4 − 4
Por ejemplo si se ingresa al apartamento 12, la dirección de la eeprom será:
dir _ eprom = 11 × 4 − 4 = 40
y los datos del apartamento 11 se encuentran en las posiciones 40,41,42,43 de la
memoria eeprom del microcontrolador PIC.. En el siguiente cuadro se resume en
número de apartamento y sus respectivas posiciones iniciales de memoria.

A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
D 0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76
Tabla 4.2 número de apartamento y posiciones de memoria
Figura 4.19 Diagrama de flujo de la librería selclave

La memoria eeprom del microcontrolador 16F877A dispone de 256 localidades de


memoria de 8 bits desde la posición 0 hasta la FF en hexadecimal, de las cuales se ha
utilizado 80. Para leer la memoria eeprom se dispone de la instrucción
read_eeprom(value).

Por ejemplo para leer los valores correspondientes al apartamento 11 quedaría de la


siguiente forma:

Int clave[4];
Dir_eprom=int_conv*4-4;
For (int i=0;i>4;i++)
Clave[i]=read_eprom(dir_eeprom++)

Donde se lee en el primer ciclo la posición 40 y se almacena en el vector clave[0], en


el segundo ciclo dir_eprom aumenta en una unidad, por lo que leerá la posición 41,
hasta finalizar con el cuarto dígito que corresponde al valor 42 de la posición de la
eeprom. Una vez terminado el ciclo, la clave quedará almacenada en el vector clave[]
de la siguiente forma:

clave[0] = posición 40 de la eeprom


clave[1] = posición 41 de la eeprom
clave[2] = posición 42 de la eeprom
clave[3] = posición 43 de la eeprom

Luego, utilizando lazos “for”, se realiza la comparación con la clave ingresada, tal
como se muestra en el código fuente correspondiente, copiado a continuación:

in_clave(int int_conv) //recibe la dirección del apartamento


{
int i=0,j=0,c,u=0,f,salida=0,dir_eprom;
char k, clave[4];
dir_eprom=int_conv*4-4; //calcula la posición de la eeprom
for (c=0;c<=3;c++) //almacena en clave[c] la clave desde eeprom
{
clave[c]=read_eeprom(dir_eprom);
dir_eprom=dir_eprom+1;
}
lcd_putc("\fPARA SALIR PRESS '*'\n");
lcd_putc("DIGITE LA CLAVE:"); //solicita el ingreso de clave de usuario
delay_ms(200);
reset=1
while (salida==0)
{
k=kbd_getc(); //lee el teclado
if(u==3) //cuando se equivoca 3 veces en la clave
{
lcd_putc("\f USUARIO NO DESEADO\n");
delay_ms(500);
lcd_putc(" SISTEMA BLOQUEADO\n");
*dir_status=23;
delay_ms(1000);
for(f=0;f<5;f++)
{
lcd_gotoxy(1,1);
lcd_putc("** ALARMA ACTIVADA **");
port_a=4;
delay_ms(200);
lcd_gotoxy(1,1);
lcd_putc(" ");
port_a=0;
delay_ms(200);
}
lcd_gotoxy(1,1);
lcd_putc("** ALARMA ACTIVADA **");
alarma();
u=0; //reinicia la variable para nuevo conteo de equivocación
i=0; //cuenta la posición de clave[i]
j=0; //acumula conteo si clave es correcta
*dir_status=22;
salida=1;
k='*';
}
if(k=='*'||!BIT_TEST(port_a,5) || variable_pc==1) // si el usuario se equivoca
{
lcd_putc("\fReiniciando.....\n");
delay_ms(500);
salida=2;
i=0;
}
if(k!=0)
{
beep();
if (clave[i]==k) //verificación de la clave
{
j=j+1; //acumula cada vez que un dígito es correcto
}
lcd_putc("*"); //oculta el dígito ingresado
i=i+1;
if (i==4) //si termina de verificar los cuatro dígitos
{
if (j==4) //si clave es correcta j=4
{
*dir_status=int_conv;
lcd_putc("\f\n CLAVE CORRECTA");
delay_ms(800);
lcd_putc("\fPOR FAVOR ESPERE \n");
delay_ms(300);
port_A=3;
port_a=3;
lcd_putc("PUERTA ABIERTA...");
delay_ms(800);
port_a=1;
lcd_putc("\f CIERRE LA PUERTA");
lcd_putc("\n* FIN DE LA SESION *");
delay_ms(2000);
*dir_status=22;
delay_ms(100);
*dir_status=22;
delay_ms(400);
u=0;
salida=1; //para salir del bucle while
}
else //si la clave es incorrecta
{
lcd_putc("\f ** ERROR **\n");
lcd_putc("CLAVE ES INCORRECTA");
delay_ms(500);
lcd_putc("\fREVISE SU CODIGO...!\n");
lcd_putc("DIGITE LA CLAVE:"); //solicita nuevo ingreso de clave
i=0;
j=0;
contador=0;
u=u+1; //acumula los errores de clave
}
}
}
if (contador>200)
{
lcd_putc("\fReiniciando.....\n");
delay_ms(1000);
salida=1;
}
}
reset=0;
contador=0;
} //fin de la función
4.3.1.4.- programa principal esclavo.- Luego de haber analizado las librerías del
programa para los microcontroladores esclavos, se describe el programa principal,
que es el encargado de llamar a las funciones antes explicadas. En este caso se
analiza el diagrama de flujo del programa principal y luego se copia el código fuente
del programa principal y luego se analiza sus partes.

Figura 4.20 Diagrama de flujo del programa principal de los esclavos

Como se aprecia el diagrama de flujo el programa principal es muy sencillo, su


finalidad es llamar a las funciones descritas anteriormente. Lo primero que realiza es
llamar a los archivos de cabecera, donde se incluyen una librería propia para el
microcontrolador usado, para lo cual se llama a la librería 16F877A.h, en donde se
encuentran definidos pines y funciones propias de este dispositivo. Luego se define
la velocidad con la que se va a trabajar a través de la palabra delay(). El resto son
funciones ya analizadas con anterioridad, como la función para trabajar con el
módulo LCD, teclado y demás funciones desarrolladas para este programa.
A continuación se muestra el diagrama de flujo de la interrupción por I2C para los
esclavos. Esta interrupción se ejecuta cada vez que circula el maestro solicita recibir/
enviar datos a cualquiera de los esclavos.

INICIO

Declaración de variables

Lee estado de I2C (State)

NO
0>state<80

Recibe Byte de Dirección


(dir eprom)

NO
Dir_eprom!=100

Guarda dígitos de clave


(clave0,clave1,clave2,clave3)

Envía estado del PIC al Escribe nueva clave en la


PC a través de Maestro eeprom del PIC
Cambia valor de variable
Para abrir puerta desde
Informa al PC a través del
master del cambio de

FIN

Figura 4.21 Diagrama de flujo para la interrupción por I2C para los esclavos

En la siguiente gráfica se muestra el diagrama de flujo para la interrupción por


desbordamiento en los microcontroladores esclavos. Esta interrupción se produce
cada 0.066s y se encarga de reiniciar los microcontroladores por tiempo de espera
agotado y de sondear el bit RA5 (bit 5 del puerto A) para abrir la puerta.
INICIO

Declaración de variable

Contador (time_puerta)

NO
Reset=1

Contador ++

Contador >210 Contador =0

NO

NO
RA0=1

Abre puerta

Resetea variables

Envia estado al maestro

Time_puerta>10
NO

RA0=0

FIN
Figura 4.22 Diagrama de flujo para la interrupción por desbordamiento del timer1

Al llegar a la función main(), inicializa las funciones para el LCD y el teclado,


configura las interrupciones utilizadas en este programa (serán analizadas mas
adelante) y declara las variables locales para este procedimiento. La primera función
llamada es pantalla(), finalizada la misma entra a un bucle infinito, dentro del cual lo
que se hace es llamar a la función int_conv, encargada de convertir los dígitos de
apartamento en un entero de 8 bits, los datos son filtrados por medio de un bucle if-
else, en donde pasa a la siguiente función solo si el valor es válido (es válido si el
valor del apartamento está entre 1 y 20), si este valor es válido, se llama a la
siguiente función, que en este caso es in_clave, a través de la cual se envía el dato
recibido por la primera función, esta función ejecuta su tarea y finaliza una sesión,
después de lo cual regresa a la primera función llamada para iniciar una nueva
función. El programa fuente se muestra a continuación, incluidas las interrupciones.

#include <16F877A.h>
#use delay(clock=4000000)
#use i2c(slave,sda=PIN_C4,scl=PIN_C3,address=0xA0) //configuración de I2C
#include <lcd.c> //librería para manejo del LCD
#include <kbd.c> //librería para manejo del teclado
#include <tones.c>
#byte port_A=5
int *dir_status; //maneja la dirección del dato enviado al maestro
int dir_data; //dato que contiene la dirección apuntado por dir_status
int reset=0;
int contador=0,variable=0,variable_pc=0;

#include"pantalla.h"
#include "selapart.h"
#include "selclave.h"

/*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Interrupción I2C para comunicación con master
_________________________________________________________________*/
#int_SSP
void SSP_isr()
{
BYTE dato,state;
int dir_eprom;
state = i2c_isr_state(); //recibe comando escritura/lectura
if(state>0 && state < 0x80)
{
dir_eprom = i2c_read(); //lee el dato del maestro
if(dir_eprom != 100)
{
eprom[cuenta]=dir_eprom; //almacena información del maestro
cuenta=cuenta+1;
}
else
{
variable_pc=1; //Permite abrir la puerta desde el ordenador
}
}
if(state ==0x80)
{
i2c_write(dir_data); //envía al maestro el estado
}
} //fin de int #int_SSP

#int_rtcc //interrupción por desbordamiento del timer0

void isr()
{ int time_puerta;
time_puerta=time_puerta+1; //contador para reiniciar el sistema
if (reset == 1)
{ contador=contador+1;
if(contador>210)
contador=0;
}
if(!BIT_TEST(port_a,5) || variable_pc==1) //bit de reset (interruptor interno)
{ port_a=2; //abre la puerta pin A1=1
time_puerta=0;
variable=1;
*dir_status=25; //envía estado al PC a través del maestro
}
if(variable==1&&time_puerta>10) //temporizador para abrir puerta
{ port_a=0;
variable=0;
variable_pc=0;
}
variable_pc=0;
} //fin #int_rtcc

/*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PROGRAMA PRINCIPAL
_________________________________________________________________*/

main()
{
int int_conv,dir_eprom;
lcd_init();
kbd_init();

setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //int cada 66.6 ms


enable_interrupts(INT_RTCC); //habilita la interrupción de RTCC
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL); //habilita todas la interrupciones

set_tris_a(0b00110000);
ini_pant(); //pantalla de inicio
dir_status= &dir_data; //dirección de dir_data en dir_status

while(true)
{
*dir_status=0; //valor por defecto de dir_data
int_conv=code_usuario();
if(int_conv>0 && int_conv<21) //ingresa solo si el apart existe
{
dir_eprom=(int_conv); //calcula la dirección inicial
in_clave(dir_eprom);
}
}
}// Fin del programa principal

En el programa mostrado se observa dos interrupciones. La primera es una


interrupción para I2C, y la segunda es una interrupción RTCC interna.

La interrupción por I2C, se genera cuando hay actividad en el Bus I2C, es decir
cuando el master envía una petición de lectura o escritura. Esta interrupción se activa
por medio de la instrucción:

enable_interrupts(INT_SSP);

Si existe actividad de I2C, el contador del programa salta hasta la línea;

#int_SSP

A partir de la cual se crea una función, como se ve en el programa fuente, en la cual


se indica la actividad que debe realizar el microprocesador. En este caso se realiza
tres actividades. La primera es cambiar la clave, la segunda es abrir la puerta por
orden del PC y la última es informar al ordenador del estado de los esclavos. El
momento que el master envía información a un esclavo, primero especifica la
dirección del esclavo y luego envía la información. El primer dato recibido por el
esclavo es almacenado en status, en el cual si el valor es mayor de 80H, significa que
es petición de escritura, y si es menor de ese valor, implica que es petición de lectura
y el esclavo almacena el dato enviado por el maestro.

La segunda interrupción es una interrupción interna por desbordamiento del timer, y


se la configura a través de la siguiente línea:

setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
La interrupción RTCC se produce cada vez que el contador TIMER0 pasa de FFh a
00h.

El TIMER0 hace un cómputo completo de 00h a FFh cada 512 μS 5, sin embargo este
tiempo puede ser cambiado mediante un preescaler o sea un divisor ajustable. Los
tiempos generados para cada configuración son:

2 -> 512 μS al mínimo preescaler posible.


4 -> 1.0 mS
8 -> 2.0 mS
16 -> 4.0 mS
32 -> 8.1 mS
64 -> 16.3 mS
128 -> 33.3 mS
256 -> 66.6 mS al máximo preescaler posible, y que usamos en este caso.

4.3.2.- Programa microcontrolador maestro.-

El programa desarrollado para el microcontrolador PIC maestro, se encarga de


recibir información tanto del Ordenador como de los esclavos, y enviarlos a donde
sean requeridos. El programa es corto, y se ha requerido el uso de dos interrupciones,
para la comunicación RS 232 y una interrupción interna para regular la
comunicación con los esclavos.

Básicamente el programa principal realiza dos tareas (aun no se considera las


acciones de las interrupciones). La primera es solicitar información del estado a los
esclavos, y la segunda es enviar la información proveniente de los esclavos hacia el
ordenador. El diagrama de flujo del programa principal se lo presenta a continuación,
luego se muestra el diagrama de flujo de las interrupciones por RS-232 y por
desbordamiento del timer 1

5 Este valor corresponde para un reloj que trabaja a 4 Mhz


INICIO

Archivos de cabecera

Llamada de librerías

Declaración de variables

Configurar interrupciones

Solicita
Cont=9 información al
esclavo 2

NO

Solicita
Cont=19 información al
esclavo 2

NO

Envía estado
Data_slave1!=0 del esclavo 1 al
PC

NO

Envía estado
Data_slave2!=0 del esclavo 2 al
PC

NO

Espera 20 ms

Figura 4.23 Diagrama de flujo del programa principal maestro


INICIO

Declaración de variables

Obtener datos de PC
rcv_clave[7]

NO convertir número de
rcv_clave[0]=11 apartamento en
entero

Informa al PC NO Informa al PC
Apartamento 0>apart<21 Apartamento
existe No existe

Calcula dirección inicial de la


clave en la eeprom

Compara valor recibido del


PC con valor de eeprom

Informa al PC NO Informa al PC
Clave es Clave correcta Clave es
correcta incorrecta

NO
rcv_clave[0]=12
1

Calcula posición de la clave


en la eeprom

Cambia clave en maestro

Envía datos a esclavo1

2
CONTINUA…
2

Envía datos a esclavo2 1

Envia orden a
rcv_clave[0]=15 esclavo 1 abrir
puerta

NO

Envia orden a
rcv_clave[0]=16 esclavo 1 abrir
puerta

NO

FIN

Figura 4.24 diagrama de flujo de interrupción RS-232

INICIO

Incrementa variable cont

Cont =20 Cont =0

NO

FIN

Figura 4.25 diagrama de flujo de interrupción por desbordamiento de timer0

En interrupción interna RTCC, se ha dispuesto un contador de 0 a 19, a una


frecuencia de 66.6 milisegundos. Cuando el contador llega a 9, envía petición al
esclavo 1, luego, cuando el contador ha llegado a 19, envía petición al esclavo 2, esto
lo hace de forma permanente. Para enviar información al ordenador, espera a que las
variables slave1 y slave2 cambien a un valor distinto de cero (cuando no hay
novedades, los esclavos envían por defecto el valor de cero), toma ese valor y lo
envía al ordenador, el cual dependiendo del valor que sea este, desplegará la
información correspondiente.

La interrupción RS232, es un poco mas extensa, ya que el microcontrolador realizará


un corto dialogo con el ordenador, debido a que el validará la información que
provenga de él. A continuación se muestra el programa fuente del maestro y luego se
analiza la parte correspondiente a la interrupción RS232.

#include<16f877A.h>
#use delay (clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#use I2C(master,sda=PIN_C4,scl=PIN_C3)
#include <conversor.h>
int cont; //almacena número de vueltas de int_RTCC

/*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Interrupción RS232 para comunicación con el PC
__________________________________________________________________*/
#int_RDA //interrupción por RS 232
void RDA_isr()
{
int m,u,cuenta=0,l=3;
int ent_conv=0; //almacena el apart convertido en entero
int pos_mem=0; //posición inicial de la memoria
char rcv_clave[7]; //se almacena los siete caracteres del PC
//0= acción, 1-2 = apart, 3-6 = clave
gets(rcv_clave); //recibe la información del PC vía RS232
if(rcv_clave[0]==11) //verificar si apart y claves son correctas
{
ent_conv=conversor(rcv_clave); //convierte apart en entero
if(ent_conv>0 && ent_conv<21) //apart es mayor a cero o mayor a 20
putc(82); //2 = apartamento si existe
else
putc(83); //3 = apartamento no existe
pos_mem=ent_conv*4-4; //determina la posición inicial de la memoria
for(m=0;m<4;m++) //determina si la clave es correcta
{
if (read_eeprom(m+pos_mem)!=rcv_clave[m+3])
cuenta=cuenta+1; //si la clave es correcta cuenta =0
}
if(cuenta == 0) //cuenta es igual a 0 si la clave es correcta
putc(84);
//4 = clave correcta
else
putc(85); //5 = clave incorrecta
}
if(rcv_clave[0]==12) //dato del PC SI apart y clave son correctas
{
ent_conv=((rcv_clave[1]-48)*10)+(rcv_clave[2]-48); //convierte en int
dir=ent_conv*4-4; //posición inicial de la eeprom

write_eeprom(dir,rcv_clave[3]); //cambia clave en eeprom del maestro


write_eeprom(dir+1,rcv_clave[4]);
write_eeprom(dir+2,rcv_clave[5]);
write_eeprom(dir+3,rcv_clave[6]);
delay_ms(40);

//Envia información de claves a los esclavos


i2c_start(); //inicia comunicación I2C
i2c_write(0xA0); //direcciona a slave1
i2c_write(ent_conv);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicación I2C
i2c_write(0xB0); //direcciona a slave2
i2c_write(ent_conv);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicación I2C
i2c_write(0xA0); //direcciona a slave1
i2c_write(rcv_clave[3]);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicación I2C
i2c_write(0xB0); //direcciona a slave1
i2c_write(rcv_clave[3]);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicación I2C
i2c_write(0xA0); //direcciona a slave1
i2c_write(rcv_clave[4]);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicacion I2C
i2c_write(0xB0); //direcciona a slave1
i2c_write(rcv_clave[4]);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicación I2C
i2c_write(0xA0); //direcciona a slave1
i2c_write(rcv_clave[5]);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicación I2C
i2c_write(0xB0); //direcciona a slave1
i2c_write(rcv_clave[5]);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicación I2C
i2c_write(0xA0); //direcciona a slave1
i2c_write(rcv_clave[6]);
i2c_stop();
delay_ms(40);
i2c_start(); //inicia comunicación I2C
i2c_write(0xB0); //direcciona a slave1
i2c_write(rcv_clave[6]);
i2c_stop();
delay_ms(40);
ent_conv=0;
dir=0;
} if(rcv_clave[0]==15) //para abrir puerta1 con PC
{
i2c_start(); //inicia comunicación I2C
i2c_write(0xA0); //direcciona a slave1
i2c_write(100);
i2c_stop();
delay_ms(100);
}
if(rcv_clave[0]==16) //para abrir puerta1 con PC
{
i2c_start(); //inicia comunicación I2C
i2c_write(0xB0); //direcciona a slave2
i2c_write(100);
i2c_stop();
delay_ms(100);
}
} //fin de int #int_RDA
/*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Interrupción RTCC por desbordamiento
_________________________________________________________________*/
#int_rtcc
void isr()
{
cont=cont+1; //controla el sondeo del estado de los esclavos
if(cont==20) //cont = 9 envía petición al esclavo1
cont=0; //cont = 19 envía petición al esclavo2
} //fin #int_rtcc

/*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PROGRAMA PRINCIPAL
____________________________________________________________*/
void main()
{
int k;
int data_slave1; //recibe el estado del esclavo 1
int data_slave2; //recibe el estado del esclavo 2
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //int cada 66.6 ms
enable_interrupts(INT_RTCC);//habilita la interrupción de RTCC
enable_interrupts(int_rda); //habilita la interrupción de rs232
enable_interrupts(global); //habilita todas las interrupciones
while(true)
{ if(cont==9) //solicita estado a slave1
{
i2c_start();
i2c_write(0xA1);
data_slave1=i2c_read(0);
i2c_stop();
while(cont==9)
{} //permite que envié solo una vez la petición
}
if(cont==19) //solicita estado a slave2
{ i2c_start();
i2c_write(0xB1);
data_slave2=i2c_read(0);
i2c_stop();
while(cont==19)
{} //permite que envié solo una vez la petición
}
if(data_slave1!=0) //envía estado del esclavo 1 a PC
{
printf(lcd_putc,"\fSLAVE1: %u",data_slave1);
putc(data_slave1);
data_slave1=0;
}
if(data_slave2!=0) //envía estado del esclavo 1 a PC
{ printf(lcd_putc,"\fSLAVE2: %u",data_slave2);
putc(data_slave2+40);
data_slave2=0;
}
}
} //fin del programa

La comunicación desde el maestro hacia el ordenador, se realiza en el programa


principal, mientras que la comunicación desde el ordenador al maestro se realiza en
la interrupción RS 232.. Esta segunda comunicación se analizará ahora.

Para el envió de información al través de la interfaz RS232 se utiliza la instrucción


Putc() de la siguiente forma:
char dato= ‘a’;
Putc(dato);

O para enviar cadenas tenemos:


Char datos[5]={‘m’,’u’,’n’,’d’,’o’};
Puts(datos);

Para recibir información a través de la interfaz RS232 se utiliza getc() para el envío
de un carácter, pero si se desea enviar una cadena, se utiliza la instrucción Gets(); asi
como se muestra en el ejemplo:

Char datos_recibidos[5];
Datos_recibidos=gets();
Se había mencionado que solo a través del Ordenado se puede cambiar la clave de
los esclavos, para realizar este proceso se realiza el siguiente dialogo ordenador-
microcontrolador. Cuando un usuario desee cambiar la clave, en el ordenador hay
una opción para este propósito, en donde el usuario ingresa su número de
apartamento y su clave actual, se envía esta información hacia el microcontrolador,
el cual la recibe en forma cadena de 7 elementos tal como se muestra a continuación

char rcv_clave[7]; //se almacena los siete caracteres del PC


gets(rcv_clave); //0= accion, 1-2 = apart, 3-6 = clave

Aunque en el programa fuente se encuentra muy bien documentado el programa,


analizamos esta trama de siete caracteres:

El byte 0 se encarga de identificar la actividad que debe hacer si es verificar datos, o


ingresar nueva clave. 0 es para abrir la puerta desde el ordenador.

El byte 1 y 2 se encuentra el número de apartamento que se desea cambiar la clave


Byte 3, 4, 5, 6 se encuentra la clave, en primera instancia se encuentra la clave
antigua que se envía para verificar si es correcta o no y en segunda instancia se envía
la nueva clave para ser cambiada.

Una vez que llega la información, verifica si el primer byte es 11, 12, 15 o 16

Si es 11, indica que debe comprobar la información recibida, con la que se encuentra
almacenada en el microcontrolador. El programa verifica si el apartamento existe o
no, para ambos casos envía información al ordenador del resultado. De igual forma
se verifica si la clave ingresada es o no correcta, verificado esta información, el
resultado es enviado al ordenado, el cual definirá de acuerdo a los resultados
obtenidos si se permite o no el cambio de clave.

Si todos los datos han sido correctos, el ordenador envía la nuevamente información
en una paquete de bytes, de los cuales el byte 0 tiene una valor de 12, y los cuatro
últimos bytes la nueva clave. Si el programa determina que el valor es 12, entonces
ejecuta el cambio de clave: primero cambia su propia clave, y luego envía la orden y
la información a los esclavos para que ejecuten este cambio.

Si el valor del byte 0 es de 15 y 16, el procesador lo toma como operación de


apertura de puerta y descarta los bytes restante. , si el valor es de 15 envía la orden
para que se abra la puerta del esclavo 1 y si el valor es 16, envía la orden para que
se abra la puerta del esclavo 2

Es conveniente mencionar una pequeña librería creada para este programa, que
cumple la función de transformar los números de apartamento que son del tipo char,
en un valor entero de 8 bits, para aclararlo realizaremos un ejemplo: un usuario digita
el numero de apartamento 14, entonces:

‘1’ = 31 según la tabla de caracteres ASCII


‘4’ = 34 según tabla de caracteres ASCII

Se requiere convertir a estos dos dígitos ingresados por teclado en un solo valor
decimal (14 decimal en este caso), para lo cual nos aprovechamos del orden de
ingreso. Al primer valor que ingresa (en esta caso ‘1’) lo multiplicamos por 10,
puesto que va a ser decena. Y al segundo valor, que es una unidad, simplemente lo
adicionamos al primer valor:
1 x 10 = 10
4x1 = 04  Valor decimal = 14.

Esta es la función que cumple la siguiente función, aunque se han omitido algunos
detalles en la explicación, con el ejemplo será suficiente para su entendimiento.

//programa CONTROL_ACCESO
//proyecto de tesis (2006-09-19)
//Realizado: Eduardo Mendoza Merchán – Luís Chacón Buñay
//Revisado: Ing. Luís Córdova R.
//Función para la entrada y conversión del código del departamento en entero

int conversor(char apart[2])


{ int i=0,j=0,int_conv=0,k1=0,salida=0,cont=1;
char entrada[10]={'0','1','2','3','4','5','6','7','8','9'};
int valores[10]={0,1,2,3,4,5,6,7,8,9};
while (salida==0)
{
for (j=0;j<10;j++)
{
if (apart[cont]==entrada[j]) //si el valor coincide con entrada
k1=valores[j]; //k1 lleva su equivalente
}
if(i==0) //si i=0, son decenas
k1=k1*10; //convierte a decenas
int_conv=int_conv+k1; //almaceno las decena
i=i+1; //si i=2 es unidad y se almacena en int_conv
cont=cont+1;
if(i==2)
{
salida=1; //para salir del bucle while
k1=0;
}
}
return(int_conv); //retorna el code del apartamento
}

4.3.3 Programa del ordenador C# y SQL.-

El proyecto que se esta desarrollando, consta en forma general de dos partes. La


primera, analizada en párrafos anteriores que corresponde a la programación de los
microcontroladores y las segunda parte, que consta de un programa de computador,
desarrollado en un lenguaje Visual y que es el encargado de recibir y traducir los
mensajes del microcontrolador, así como alterar ciertas características de los mismos.
Además de recibir/enviar información, este programa debe manejar una base de
datos, en la que de una forma sistemática se van almacenando los datos relevantes
enviados desde el microcontrolador maestro, y que se debe incluir la hora y fecha de
la llegada al sistema de la información, con el fin de que sirva en la posteridad como
objeto de investigación en caso de que sucedan acciones anómalas.

4.3.3.1.-. Selección del lenguaje C#.-

Para desarrollar el programa se dispone de algunos lenguajes de programación visual


que permitan generar, compilar y corregir el código del programa, tal como es el
caso de visual C++, Visual Basic, Java, C#, Delphi, entre los mas conocidos. Y para
el manejo de base de datos de igual se maneja una lista bastante amplia de programas
de esta naturales y se mencionan los mas conocidos en nuestro medio SQL, MySQL,
Postgres, dBase, Visual FoxPro.

Seleccionar el lenguaje de programación a utilizar es una decisión muy importante,


puesto que la selección deberá estar en función del conocimiento que se posea del
lenguaje a utilizar, la ayuda que se pueda obtener a través de manuales y sobre todo
del Internet, la sencillez con que maneje las interfaces que se utilizan y muchas mas
características que se debe tomar en cuenta y que en este momento es posible que no
se las vea con la relevancia del caso. En este caso la selección del lenguaje de
programación se inclinó por C#, que aunque es un lenguaje nuevo, tiene una gran
popularidad debido a la sencillez de su interfaz, que es comparable a Visual Basic y
con la potencia que ofrece programas como C, C++ y Java, de los cuales hereda
muchas de sus propiedades tales como los punteros y control a bajo nivel, y que
además ofrece una gran integración con el desarrollo de aplicaciones Web, XML y
muchas tecnologías emergentes. Otra característica de importancia es que es un
programa de distribución gratuita, a diferencia de los demás lenguajes de
programación, por lo que puede ser descargado de su sitio Web, instalarlo en un
ordenador que cumplan los requerimiento de hardware e iniciar la labor de
programación.

4.3.3.2. Selección de la base datos.-

Para escoger el software que almacenará los datos del proyecto automáticamente se
elige “Microsoft Sql Server 2005”. Sql tiene la facilidad o permite realizar
procedimientos, los cuales no son más que consultas hechas en la misma base de
datos, lo que permite un menor tiempo de respuesta a cualquier programa que
consulte a la base, brindando así un mejor rendimiento y estabilidad del software. De
igual forma que C#, SQL es de distribución gratuita y los instaladores de este
programa pueden ser descargados de su sitio Web del Internet.

4.3.3.3.- Análisis del código fuente proporcionado en C#.-

El código fuente proporcionado es de mucha utilidad pues da la pauta a seguir con la


parte de la programación en el ordenador, pero para conseguir el objetivo del
proyecto se tuvo que hacer muchos cambios significativos como conectar la base de
datos, cambios en la presentación, añadir nuevas formularios, nuevos iconos, fecha,
hora, etc.

Programa guía 1:
Recibe datos a una longitud específica, esta parte controla el pic por lo que no es
necesario como la necesidad de comparar los datos recibidos.
private void textBoxSerial1_SerialDataArrived(object sender,
wclTextBoxSerial.SerialDataArrivedEventArgs e)
{ //En e.Data esta el grupo de caracteres recibidos desde el puerto serial
if (e.Data.Length == 14) //Si llegan 14 caracteres procesarlos
e.Data = e.Data.Substring(1, 10); //Solo deja pasar 10 caracteres
else
e.Handled = true; //Ignora los caracteres
}
Programa requerido 1:
Se requiere comparar datos numéricos, segun esto se toma decisiones en los
mensajes.
private void textBoxSerial1_SerialDataArrived(object sender,
wclTextBoxSerial.SerialDataArrivedEventArgs e)
{
int a = int.Parse(e.Data); //pasa de string a int
TextBoxSerial1.Text = "";
if (a == 1) //si el dato que recibe es 1 presentar apart1
textBox1.Text = "apartamento 1";
if (a == 15) //si el dato que recibe es 15 presentar apart2
textBox1.Text = "apartamento 2";
}

Programa requerido 2:
La programación no tenia originalmente el envío de datos, se tuvo la necesidad de
añadir.
private void button1_Clic(object sender, EventArgs e)
{
TextBoxSerial1.SendText(textBox1.Text); //envia lo que este en text
textBox1.Text = ""; //limpia text
}

Programa guia 3:
Esta configurado a otras necesidades.
private void Form1_Load(object sender, System.EventArgs e)
{
TextBoxSerial1.Port = 2; //Abro el com2
TextBoxSerial1.TimeToWaitForMoreData = 300;
TextBoxSerial1.Format =
wclTextBoxSerial.TextBoxSerial.FormatoDatos.Ascii; //Formato en que se
mostrará la información
TextBoxSerial1.TimeToWaitForMoreData = 300;
TextBoxSerial1.OpenPort(); //Abrir el puerto
}

Programa requerido 3:
Abrir com1, leer en formato decimal y cambiar tiempo de espera a 10ms.
private void Form1_Load(object sender, System.EventArgs e)
{
TextBoxSerial1.Port = 1; //Abro el com1
TextBoxSerial1.TimeToWaitForMoreData = 300;
TextBoxSerial1.Format =
wclTextBoxSerial.TextBoxSerial.FormatoDatos.Decimal//Esperar 10 milisegundos
TextBoxSerial1.TimeToWaitForMoreData = 10;
TextBoxSerial1.OpenPort(); //Abrir el puerto
}

4.3.3.4.- Análisis de librería wcltextboxserial.dll

La wcltextboxserial.dll está encaminada al uso del objeto textbox para leer y enviar
datos por el puerto serial, que de la forma tradicional esta versión de lenguaje no
permitiría con tanta facilidad como lo hace al trabajar conjuntamente con
wcltextboxserial.dll.

Aquí se aprecia muy claramente como la dll se encamina con el textbox a


comunicarse con la parte serial, observando en las propiedades del textbox a alterar
muy fácilmente la velocidad de comunicación, capacidad de envío de dato, tipo de
formato, la paridad, por que puerto se comunicará, cantidad de bit de parada, esperar
1500ms antes de considerar un tiempo out y esperar 300ms para dar tiempo a que
llegue un grupo de bytes., se usa estas características porque el periférico “PIC” a
conectarse funciona con esas especificaciones mencionadas.

Figura 4.26 propiedades de textBox

Si se compara con un textbox sin ser acoplado a la dll, como el textbox que se usa
para envío de datos desde la pc al exterior, se observa que no hay manera de
configurar para la comunicación serial., a pesar que visualmente son idénticos.
Figura 4.27 propiedades de textBox, sin dll

Para modificar las propiedades y grabarlas, sobre todo lo de la parte de comunicación


serial, se debe ingresar al código fuente para que tengan efecto.

4.3.3.5.- Pasos para la comunicación serial en C#.-

1 Poseer DLL llamada, wcltextboxserial.dll.


2 Abrir nuevo proyecto “new project” del tipo “empty project”.
3 Adjuntar al proyecto “Form1.cs”.
4 Poner un objeto serialPort1 en Form1.
5 Grabar el programa.
6 Copiar DLL(wcltextboxserial.dll) donde se grabo el programa, dentro de las
carpetas bin/debug.
7 Llamar la DLL desde "References”, dar clic derecho en references escoger la
“add references”, luego en la pestaña “Browse” buscar en la dirección en cual
fue grabada la DLL.
8 En Form1 añadir un textBox1 (TextBoxSerial1), mismo que permite recibir
datos desde pic a pc., luego adjuntar un botón y otro textBox2 a la misma
Form fin enviar datos de pc al pic, esta orden se activará con el botón.
9 Abrir class Form1, modificar a textBox1 con atributos DLL.
public partial class Form1 : Form
{ //private TextBox TextBoxSerial1; // sin DLL
private wclTextBoxSerial.TextBoxSerial TextBoxSerial1; // con DLL
}
10 Para la parte InitializeComponent de class Form1 inicializar con DLL a
TextBoxSerial1.
private void InitializeComponent()
{
//this.TextBoxSerial1 = new System.Windows.Forms.TextBox(); // sin DLL
this.TextBoxSerial1 = new wclTextBoxSerial.TextBoxSerial(); // con DLL
}
11 Copiar TextBoxSerial parte “Windows” de tamaño 5Kb, en el programa fin
evitar ejecute ventana DOS.
12 Adjuntar a la Form1, sirve para poder ejecutarlo.
private void InitializeComponent()
[STAThread]
static void Main()
{
Application.Run(new Form1()); // ejecuta aplicación
}
13 Escoger a textBox1 (TextBoxSerial1) y en la parte propiedades escoger la
casilla SerialDataArrived mediante un enter, esta parte permite recibir datos
de el pic a la pc.
private void TextBoxSerial1_SerialDataArrived(object sender,
wclTextBoxSerial.SerialDataArrivedEventArgs e)
{
int a = int.Parse(e.Data); //pasa de string a int
TextBoxSerial1.Text = "";
if (a == 2)
textBox1.Text = "apartamento 1";
if (a == 6)
textBox1.Text = "apartamento 2";
}
14 Para enviar datos PC a PIC, se utiliza el evento clik del botón.
private void button1_Clic(object sender, EventArgs e)
{
TextBoxSerial1.SendText(textBox1.Text); //envia información
textBox1.Text = ""; //limpia textbox
}
15 Cambiar en Form1_Load, para modificar propiedades del TextBoxSerial1
private void Form1_Load(object sender, EventArgs e)
{
TextBoxSerial1.Port = 1; //Abro com1
TextBoxSerial1.BaudRate = 9600; //9600 bits por segundo
TextBoxSerial1.DataBit = 8; //8 bits de datos
TextBoxSerial1.StopBit = wclTextBoxSerial.Rs232.DataStopBit.StopBit_1;
//Un bit de parada
TextBoxSerial1.Parity = wclTextBoxSerial.Rs232.DataParity.Parity_None;
//No paridad
TextBoxSerial1.TimeOut = 1500; //Esperar 1500 milisegundos
TextBoxSerial1.TimeToWaitForMoreData = 10;
TextBoxSerial1.Format =
wclTextBoxSerial.TextBoxSerial.FormatoDatos.Decimal;
TextBoxSerial1.OpenPort(); //Abrir el puerto
serialPort1.Encoding = System.Text.Encoding.ASCII;
16 A parte private void InitializeComponent(), modificar en Form1.
private void InitializeComponent()
{ // Form1
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.button1);
this.Controls.Add(this.TextBoxSerial1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
Con todos estos pasos a seguir se logra conseguir un programa similar al encontrado
en la Web.

4.3.3.6. Pasos para la conexión de C# con SQL.-

1 Crear una base de datos en SQL.


2 En la parte superior del código Form.cs, añadir:
using System.IO;
using System.Data.SqlClient;
3 Para la parte “public partial class Form1 : Form”, se añade:
private static DataTable Consulta(string Sql)
{
string cadenaConexion = "Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=Serial;Data Source=SALVAJE\\SQLEXPRESS";
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);
return dataTable1;
}
4 Añadir a Form1.cs[Design] desde la barra Toolbox, dataGridView1 y
bindingSource1.
5 Con doble click en Form1.cs[Design] se accede a Form1_Load, con el
propósito de mantener siempre visible la base, adjuntar:
private void Form1_Load(object sender, System.EventArgs e)
{
dataGridView1.AutoGenerateColumns = true;
bindingSource1.DataSource = Consulta("SELECT * FROM Depart ORDER
BY Cod ASC"); // presenta tabla Depart organizada de forma ascendente por
campo Cod.
dataGridView1.DataSource = bindingSource1;
}

4.3.3.7.- Pasos para abrir un archivo wav.-

1 Añadir al inicio de Form1.cs


using System.Media;
2 Crear una variable en public partial class Form1 : Form.
private SoundPlayer player;
3 En public Form1( ), añadir:
player = new SoundPlayer();
4 Al ejecutar las líneas a continuación se procede a escuchar el sonido elegido.
player.SoundLocation="C:\\Directorio\\Sub-directorioo\\canción.wav";
//ubicación del archivo wav //player.PlayLooping(); //toque contínuo
player.PlaySync(); //toque por una sola vez
5 Detiene al toque contínuo.
player.Stop();

4.3.3.8.- Programa principal de C#.-

El programa esta organizado en cuatro sub menús, tres de aquellos se ingresan a


travéz de acceso por clave y el último manipula cada una de las claves. En la figura
4.29 se aprecia el diagrama de flujo.

i) Menú abrir puertas desde ordenador


Para acceder al menú “Abrir puertas” se requiere ingresar la clave “123” la misma
que esta validada para tres oportunidades de ingreso, de lo contrario se cierra el
casillero abrir puertas, se ejecuta la orden con la tecla “enter” cuando el cursor esté
en la casilla respectiva.

Figura 4.28 Selección del menú abrir puertas

Al digitar la clave correcta se accede al menú abrir puertas, donde permite cambiar
de estado por un instante al led indicador “Puerta” de la tarjeta esclavo1 o esclavo2.

1
Escoger con un click una de los radiobutton “PUERTA 1” o “2” para efectuar la
orden con el botón “OK”. (ver figura 4.30).

INICIO

RECIBE DATOS SERIAL

ING. CLAVE ING .CLAVE ING. CLAVE


F F F
CAMBIAR MANTENI ABRIR
CLAVES PIC MIENTO PURTAS

V V V

GRABA CLAVE NUEVA EN INGRESA, ELIMINA ABRE PUERTAS 1, 2


MEM µC MODIFICA, BUSCA ENVÍO DATOS SERIAL
ENVÍO/RECIBE RS232 EN LA BASE DE DATOS

MODIFICA CLAVES PC
ALMACENADA
EN BASE

RECIBE DATOS
SERIAL

FIN

Figura 4.29 diagrama de flujo del programa principal

Figura 4.30 recuadro para abrir puertas desde el ordenador


INICIO

RECIBE DATOS RS232


CONT = 0

F
CLAVE = 123
CONT <= 3
CONT ++

MENU ABRIR PUERTA


CONT= 0
ENVIO RS232 PC a PIC
GRABA EN BASE DE
DATOS

FIN

Figura 4.31 Diagrama de flujo para abrir puerta

ii) Menú mantenimiento de la base de datos


Para acceder al menú “mantenimiento de la base de datos” se requiere ingresar la
clave “123” la misma que es valida para tres oportunidades, caso contrario se cierra
el casillero mantenimiento BD, se ejecuta la orden al presionar la tecla “enter”
cuando el cursor esté ubicado en la casilla respectiva.

Figura 4.32 Selección del menú mantenimiento

Se puede observar las opciones insertar, modificar, eliminar y buscar, cada una de
estas alternaticas facilitan manipular cualquier dato almacenado en la base de datos.
Figura 4.33 menú mantenimiento
Cada uno de los sub menús son habilitados con un click respectivo.

INICIO

RECIBE DATOS RS232


CONT = 0

CLAVE = 123
F
CONT<= 3
CONT ++

INSERTAR ELIMINAR BUSCAR MODIFICAR


ESCOGER PUERTA y ELEGIR ELEGIR FECHA ó ELEG. APARTAMENTO
APARTAMENTO COD_APARTAMENTO APARTAMENTO CAMBIA LA HORA
ALMACENA EN BASE REGISTRA EN BASE VISUALIZA EN BASE ALMACENA EN BASE

SALIR

RECIBE DATOS RS232

FIN

Figura 4.34 diagrama de flujo del programa mantenimiento de base de datos

iii) Menú cambiar claves en microcontrolador.-

Para acceder al menú “Cambiar clave pic” se requiere ingresar la clave “123” la
misma que es valida por tres oportunidades, caso contrario se pierde el casillero
cambiar clave pic, se ejecuta esta orden al presionar la tecla “ enter.
Figura 4.35 Selección del menú cambiar clave pic
Al ingresar en “Cambiar clave pic”, permite el envío/recepción de datos por el puerto
serial, se envía desde pc a pic “seis caracteres”, los 2 primeros equivalen al
departamento del cliente y el resto a la clave del mismo.

INICIO

RECIBE DATOS RS232


CONT = 0

F
CLAVE = 123
CONT <= 3
CONT ++

MENU
CAMBIAR CLAVE PIC
CONT= 0
ENVIO RS232 PC a PIC

F F
CLAVE CLAVE = DOS CLAVE
== DÍGITOS ==
CORRECTA CORRECTOS INCORRECTA

V V V

INGRESE APARTAMENTO APARTAMENTO


CLAVE NUEVA CORRECTO CLAVE NO EXISTE CLAVE
MOD MEMORIA PIC INCORRECTA INCORRECTA
RX / TX RS232 RECEPCIÓN RS232 RECEPCIÓN RS232

FIN

Figura 4.36 diagrama de flujo del programa cambiar clave pic


iv) Menú cambiar claves en el ordenador

Se ingresa directamente al menú “Cambiar clave ordenador” al dar click en el icono


respectivo.

Figura 4.37 Selección del menú cambiar clave ordenador

Permite manipular directamente las claves de ingreso a menús secundarios,


simplemente se necesita saber las claves actuales que es “123”, caso contrario no se
permite el acceso.

INICIO

RECIBE DATOS RS232

MENÚ CAMBIAR CLAVE


ORDENADOR

F
CLAVE = BD
CONT <=3
CONT ++

CAMBIA CLAVE
CONT= 0
GRABA EN BASE DE
DATOS

FIN

Figura 4.38 diagrama de flujo del programa cambiar clave ordenador


4.4.- Análisis del circuito eléctrico del sistema de control de acceso.-

Se ha explicado el programa lógico del sistema de control de acceso, ahora que se


tiene una idea clara del proceso lógico que se desarrolla en cada uno de los
microcontroladores, lo único que falta para completar su estudio es el análisis del
circuito eléctrico del sistema. El diagrama esquemático del circuito eléctrico del
Control de Acceso es bastante sencillo, debido a que se esta utilizando
microcontroladores, por lo que el esquema eléctrico queda relegado a energizar los
microcontroladores y conectar los distintos dispositivos de entrada/salida a los pines
del PIC.

4.4.1.- Microcontrolador maestro.- El la figura se 4.38, se observa el diagrama de


pines del PIC 16f877A, en el cual se han pintado de igual color los pines que
corresponden a un mismo puerto, además se distinguen con color rojo los pines que
se conectan a Vcc, de verde los pines que se conectan a tierra. Y de plomo los pines
en donde va conectado el cristal de cuarzo, que es el oscilador del microcontrolador.

Figura 4.39 Diagrama de pines del PIC 16f877a

El pin1 corresponde al Master clear, que es utilizado como un pin de reset, que se
utiliza para reiniciar el funcionamiento del sistema cuando sea necesario. Para que el
microcontrolador funcione normalmente es necesario que se encuentre conectado a
Vcc (5 voltios), y para que el sistema se reinicie es necesario llevar
momentáneamente este pin aun estado lógico bajo, es decir conectarlo a tierra, tal
como se muestra en el siguiente diagrama:

Figura 4.40 Diagrama de conexión del MasterClear

El Microcontrolador maestro esta conectado a dos tipos de comunicaciones, por


medio de la interfaz RS 232 y el Bus I2C, en el diagrama esquemático del circuito se
aprecia como están dispuestas las conexiones
Figura 4.41 Diagrama de Microcontrolador maestro y MAX 232
Para que el Microcontrolador pueda comunicarse con el ordenador, es necesario que
exista compatibilidad en los niveles de tensión, para lo cual es necesario un integrado
denominado MAX 232, que se lo describe en lo anexos, tema 3. Este integrado por
medio de un conjunto de capacitores eleva la tensión del Microcontrolador para que
pueda llegar al ordenador y del otro lado baja los niveles del ordenador a niveles
TTL (0 -5 V), para que el microcontrolador pueda acceder a la información. En el
diagrama mostrado se observa la conexión del microcontrolador al integrado MAX
232, y de este a un conector DB9, desde el cual a través de un cable apropiado se
conecta al puerto serial (COM1) del ordenador.

Otra detalle en este circuito, es que el microcontrolador analizado hace de maestro en


la comunicación por medio del Bus de Datos I2c, el cual se conecta en los pines 18 y
23 de los tres microcontroladores, es decir para la línea SCL se conectan todos los
pines 18 por medio de un cable, y de igual forma para la línea SDA todo los pines
23. Es importante hacer notar las resistencia de 10 K que se conecta desde cada una
de las líneas del bus hacia Vcc, debido a que son líneas de drenador abierto, similares
a las de colector abierto pero asociadas a un transistor de efecto de campo (ó FET).
Se deben poner en estado alto.

4.4.2.-Microcontroladores esclavos.-

Finalmente analizamos la conexión de los dos esclavos, para lo cual se ha impreso


solo uno para obtener mayor claridad en la presentación.

Los pines A0, A1, A2, BO, se destinan a salidas, para lo cual se ha dispuesto un
transistor en la salida de cada una de ellos, para que sean estos lo que se encarguen
de manejar la corriente de los dispositivos que manejen y evitar cualquier problema
por sobre corriente. El Pin B0 maneja el parlante, y su circuito ya se ha explicado
anteriormente, el pin A0 maneja la luz del LCD y fue explicado en la página 110. El
pin A1 esta destinado a abrir la puerta, en nuestro caso se ha colocado un led de
10mm, que lo simula, luego el último pin, es decir A2, supuestamente se activa al
igual que las alarmas, y su conexión es similar a las anteriores.

Ahora se analiza la conexión del teclado, que es similar en lo relacionado a las


conexiones tal como se aprecia en el diagrama, aunque en la realizada cambia el
orden de los pines, debido a que sus pines no están ubicados de forma organizada, a
continuación se aclara este detalle con un gráfico en el que aparece la asignación real
de los pines.
Figura 4.42 Diagrama de Microcontrolador Esclavo
Figura 4.43 Orden de los pines del teclado utilizado

Los pines A, B, C, D del teclado van conectados a una resistencia de 330 ohmios,
según lo solicita la lógica del programa. La parte de conexión de módulo LCD fue
ampliamente explicada al inicio de este capítulo, finalmente se puede observar en la
figura 4.43 el diagrama de todo el circuito que se lo ha analizado por partes.

4.4.3.- Lista de elementos.-

En la siguiente lista, constan todos los elementos utilizados en la realización práctica


del presente proyecto, con sus valores y numeraciones que permiten identifícalos
plenamente.

Microcontroladores:
3 microcontroladores PIC 16F877A
Módulo LCD
2 Módulos LCD de 2x20
Teclados
2 teclado matriciales de 3x4
Figura 4.44 Diagrama del Sistema de control de Acceso
Cristales de cuarzo:
3 Cristales de cuarzo a 4 Mhz
Bocinas:
2 Parlantes de 0.5 W 8 ohmios y 2 pulgadas de diámetro.
Transistores:
8 transistores 2N3904 (NPN)
Pulsadores:
5 Micropulsadores
Diodos Led
2 Diodos led verdes de 10mm
3 diodos led verde de 5 mm
2 diodos led rojos de 5 mm
Capacitores:
5 capacitores de 10 uFaradios
Resistencias ½ W
3 220 ohmios
6 1K
16 3.3 K
7 10 K
Zócalos:
3 zócalos de 40 pines

4.4.4.- Consumo de energía.-

El consumo de energía del sistema construido es muy reducido al punto que cada
microcontrolador requiere aproximadamente 0.6 mA según su hoja de datos, y los
valores que se tomaron del circuito armado consume en total 1.5 mA. De esta forma
hacemos una lista de los elementos y su respectivo consumo de corriente. Estos
valores han sido tomados del circuito armado y se han comparados con valores
teóricos de referencia de tablas y hojas de datos.

elemento Corriente ( mA)


PIC 16F877A 1,5
Módulo LCD (Sin luz) 9
Módulo LCD (Con luz) 61
Led 10mm 3.9
Led 5 mm 4.1
Bocinas 0.5 W 54
Tabla 4.3 Consumo de energía por elementos

El sistema completo funcionando en modo de espera, consume un total de 29.2 mA,


que es un valor tomado de el circuito armado, luego, una vez que se presiona una
tecla y se enciende un módulo LCD, la corriente que circula aumenta en
aproximadamente 52 mA, y si se enciende la bocina aumenta aproximadamente 54
mA.

En la siguiente tabla se muestra los consumos aproximados que se tendría en los tres
microcontroladores, considerando la activación de los elementos antes mencionado.

Dispositivo Consumo en Con Luz LCD Con la Bocina


espera Activa
Maestro 3.6 mA ----------- ----------
Esclavo 1 o 2 12.7 mA 63.7 mA 66.7 mA
Tabla 4.4 Consumo de energía por circuitos

Para que el sistema funcione se requiere muy poca corriente, por lo que si
alimentamos todo el sistema con una misma fuente, se requeriría de una fuente que
suministre como máximo 150 mA, con lo cual el sistema quedaría completamente
abastecido, aún en las condiciones mas extremas.

En este caso no se ha considerado el consumo que podría producir si se conecta una


bocina adicional o la corriente que se requiere para accionar la bobina de la chapa
eléctrica, no se la considera porque estos elementos funcionan a una tensión de 12 V,
por lo que para su funcionamiento se requiere de una fuente que disponga de este
nivel de tensión.
4.5.- Diseño de las placas de circuito impreso.-

Una vez que los circuitos ha sido probado en el ProtoBoard o tablilla de conexiones
y su funcionamiento es correcto, esta listo para proceder a diseñar la paca de circuito
impreso donde irán ubicados todos los elementos, basándose en las conexiones
realizadas en el ProtoBoard.

Para diseñar las pistas, se ha utilizado un programa especializado en este tipo de


tareas, que es Protel DXP 2002, creado por la empresa Altium Limited. Aunque
existen muchos programas dedicados al diseño de circuitos impresos, se ha recurrido
a este, principalmente porque disponemos del software, se lo ha utilizado
anteriormente, por lo se maneja los comandos principales, y el programa en si es
bastante intuitivo y ofrece muchas herramientas para el diseño.

Como consideraciones iniciales para diseñar las placas, se ha tomado en cuenta el


proceso de fabricación de las mismas. Este proceso se realiza por un medio de
fotograbado, a través de pintura fotosensible aplicada a la placa virgen de baquelita,
que es expuesta a luz infrarroja en una insoladora, con una transparencia de el
circuito diseñado(ver figura 4.44 ), luego es revelado con una sustancia basada en
sosa cáustica que elimina la pintura expuesta a la luz, y finalmente la placa es
expuesta a Cloruro férrico, un acido fuerte que corroe rápidamente el material de
cobre no protegido por la pintura fotosensible, quedando solo el cobre protegido por
la pintura, es decir la forma del circuito que fue impreso en la transparencia.

Figura 4.45 Placas finalizadas con sus respectivos fotolitos


Figura 4.46 Vista superior de la insoladora con placa finalizada.

Otra consideración que fue necesario tomar en cuenta, es que la pista se imprimirá
por un solo lado, y como los circuitos diseñados tienen bastantes líneas digitales,
habrá el inconveniente de líneas que se crucen, por lo que abra que recurrirá a los
denominados cortocircuitos, que son pedazos de hilo de cobre que unen una pista
cortada, por la cara que van los elementos.

Se recurre a colocar zócalos, para todos los circuitos integrados, a fin de proteger los
microcontroladores o de reemplazarlos con facilidad en caso de avería, y las
resistencias se han elegido de ¼ de vatio, por su tamaño.

Protel dispone de muchas librerías, que contienen las plantillas de una gran cantidad
de elementos eléctricos y electrónicos, y de circuitos integrados de las principales
casas fabricantes, por lo tanto antes de iniciar el diseño es conveniente buscar las
plantillas de los elementos que se requieren y evitar la engorrosa tarea de elaborarlos.
Por ejemplo para el conector DB9, la plantilla esta hecha, y solo se requiere llamarla,
tal como se ve en la figura 4.46, esta plantilla se encuentra en la librería
Miscellaneous Connectors.IntLib, en donde además se encuentra una gran cantidad
de otros tipos de conectores..

Las dimensiones en Protel se cuantifican por medio de una unidad denominada


“mil”, que corresponde a la milésima parte de una pulgada, que transformada a
milímetros queda de la siguiente forma:
1 _ pu lg ada = 25.4 _ mm
1
1 _ mil = pu lg ada
1000
25.4
1 _ mil = = 0.0254mm
1000
1 _ mm = 39.37 _ mil

Figura 4.47 Selección del conector DB9 para PCB

El diseño de las placas en Protel queda de la siguiente forma, tal como se muestra a
continuación:

Figura 4.48 Diseño final de la placa de circuito Maestro


Figura 4.49 Diseño final de la placa de circuito Esclavo

El ancho de las pistas se ha seccionado en 25 mil (0.625 mm) y de los círculos para
las patillas, resistencias, etc. tienen un diámetro exterior de 70 mil (1.78 mm) y un
diámetro interior de 30 mil (0.76 mm).

Finalmente, una vez que esta terminado el diseño, se imprime y se envía a personas
que realizan este tipo de trabajos, luego, el diseño es impreso en la placa y queda tal
como se muestra en la figura 4.49

Figura 4.50 Diseño final de la placa de circuito Esclavo


Una vez soldados los elementos en cada una de las placas, queda tal como se muestra
es la figura 4.50, vista desde las pistas.

Figura 4.51 Vista de la placa Maestro desde las pistas

En la figura 4.51, se aprecia la placa del microcontrolador maestro, con todos los
elementos soldados, destaca el microcontrolador, y el conector DB-9, que servirá
para la comunicación con el ordenador.

Figura 4.52 Placa terminada del Microcontrolador Maestro


Ahora en la figura 4.52, se encuentra una de las placas del microcontrolador esclavo,
se aprecia el microcontrolador y los conectores. El verde se utiliza para salida de
sonido hacia un parlante y el azul corresponde a la comunicación I2C.

Figura 4.53 Placa terminada del Microcontrolador Esclavo 2

En la figura 4.53 se aprecia una placa de circuito Esclavo conectada al LCD, parlante
y teclado, antes de ser montada en la maqueta preparada para el sistema.

Figura 4.54 Tarjeta Esclavo con su LCD, teclado y parlante.


En la siguiente figura se aprecia el sistema montado completamente, durante la fase
de pruebas, obsérvese la interfaz de comunicación RS-232 resaltado en azul y el Bus
de comunicación I2C, marcado en rojo.

Figura 4.55 Sistema de control de acceso en fase de prueba.

El LCD, El teclado, y el parlante se encuentran montados en las cajas como se


aprecia en la foto de la figura 4.56,

Figura 4.56 Detalle del montaje del LCD, Teclado y Parlante


En la siguiente figura se encuentra el sistema montado durante las pruebas finales de
software, en comunicación con el ordenador

Figura 4.57 Prueba final de sistema de control de acceso.


CAPÍTULO V

ANÁLISIS DE COSTOS

5.1.- Preliminares.-

Uno de los más importantes factores que debe considerarse en un proyecto, es el


costo total del producto, máquina o circuito a construir, puesto que de acuerdo a este
resultado se determinará si es rentable o no la fabricación del producto en cuestión,
o si es competitivo frente a sistemas fabricados por otras empresas, y es un factor
que debe ser considerado en el estudio de mercado. Además sirve como base para
asignarle un precio en el comercio.

Otro aspecto que es necesario comentar, esta relacionado con los productos de
características similares, que se venden en el mercado local o que existen en el
extranjero y puede solicitar su compra y envío hacia nuestro país, previo el pago de
alguno aranceles. Es necesario averiguar las características y los costos finales de
estos productos y comparar con el precio del producto fabricado para determinar si
somos competitivos en el sentido económico o si tenemos ventajas o desventajas con
respecto al performance y adaptabilidad del producto. Para determinar el costo del
control de acceso peatonal, es necesario tomar en cuenta los siguientes costos: Costo
de elementos, costo de fabricación de placas (incluido su diseño), costo de armado
del circuito, costo de programación del PIC, costo de programación del ordenador..

5.2.- Determinación del costo del proyecto.-

5.2.1.- Cálculo del costo de mano de obra.-

Para determinar el costo de mano de obra, se ha tomado como base el acuerdo


número 0022 del Ministerio de Trabajo y Empleo, expedido el 22 de febrero del
2007, en el cual se fija en 1.37 1 dólares americanos como valor mínimo en la

1 La información aquí expuesta, se encuentra publicada en la página Web del ministerio de


modalidad de contratación laboral por horas.

Habrá personas entendidas en la materia, que consideren que el valor de este rubro
es bajo, pero, esto se ve compensado en el valor final del producto, debido a que el
tiempo de programación va a ser mucho mayor de lo que lo realizaría un profesional
con experiencia, puesto que los lenguajes de programación utilizados se están
aprendiendo conforme avanza el desarrollo de esta obra lo cual implica una demanda
de mayor tiempo, por obvias razones. El objetivo de este capitulo es determinar una
valor tentativo al valor real del producto que se está desarrollando, tratando de
aproximarse al valor que tomaría en el mercado y poder realizar una comparación
objetiva con productos de similares características que existan tanto en el mercado
nacional como internacional.

Para realizar la labor expuesta, se determina el costo de mano de obra, para lo cual
se realiza la siguiente tabla en la que constan cada uno de los rubros de mano de
obra, el número de horas y su valor total.

Costo de mano de obra

Rubro Cant. prog Valor/ Hora Tiempo (h) TOTAL ($)

Código fuente C# 01 1.37 30 41.1

Código para Pic 01 1,37 40 54.8

Diseño placas 02 1,37 8 21.29

Armado de placas 3 1,37 4 16.44

Montaje y pruebas 1 1,37 16 21.92

TOTAL: 154.92

Tabla 5.1 Costo de mano de obra

trabajo y empleo (www.mintrab.gov.ec) bajo el titulo Acuerdo Ministerial 0022


Los valores que se exponen en la tabla 5.1 de tiempos, en cada uno de los rubros, es
un valor tentativo determinado en base a tiempos reales utilizados en el desarrollo del
proyecto. No se ha considera los tiempos de aprendizaje de los lenguajes de
programación, sino únicamente los tiempos utilizados en estas tareas que se nota son
un poco elevados debido a la falta de experiencia. El costo de mano de obra
estimado para el desarrollo del control de acceso peatonal es de 154.92 dólares
americanos.
5.2.2.- Cálculo del Costo de elementos y materiales.-

Ahora determinamos el costo de materiales, para lo cual realizamos una lista de


materiales, sus precios unitarios 2 y su costo total.

Costo de elementos
ELEMENTO CANT C UNITARIO C TOTAL $
PIC 16F877A 3 11,032 33,096
Modulo LCD 2x20 2 16,5 33
Cristal 4Mhz 3 0,7 1,5
Teclado 4X3 2 10 20
Micro pulsadores 5 0,1 0,5
Diodo Led 10 mm 2 0,1 0,2
Diodo Led 5 mm 5 0,4 2
Parlante 0,5 W 2 0,5 1
Resistencia 10KΩ 7 0,05 0,35
Resistencia 3,3KΩ 16 0,05 0,8
Resistencia 1 KΩ 6 0,05 0,3
Resistencia 220 KΩ 3 0,05 0,15
Resistencia 10 Ω 2 0,05 0,1
Potenciómetro 5KΩ 2 0,4 0,8
Max232 1 2,5 2.5
Conector hembra DB9 2 0,6 1
zócalos de 40 pines 3 0,2 0,6
Capacitores 5 0,1 0,5
pines 2x16 4 0,4 1,6

2 Los precios de microcontroladores, LCD, Teclados y MAX 232 son de la empresa


Tecompartes de la ciudad de Quito y ya esta incluido el IVA.
pines 1x8 4 0,3 1,2
correa plana 16 hilos 2 0,5 1
Conectores 2x16 4 0,5 2
correas plana 7 hilos 2 1 2
Transistores 2N3904 5 0,3 1,5
Cable UTP 1 0,5/m 0,5
Fuente de poder 5 V 1A 1 8 5
otros 1 3 3
Total: 116.96
Tabla 5.2 Costo de materiales
EL costo de elementos asciende a 123.7 dólares americanos. Cabe resaltar que
existen elementos que no se venden en la ciudad de Guayaquil y que es necesario
comprarlos en las ciudades de Quito o de Cuenca y esto implica un costo adicional
por envió, que se lo toma en cuenta en el ítem “otros”. Los elementos que se
compraron en la ciudad de Guayaquil, se cotizaron en la electrónica Velasco, ubicada
en Junín 514 y Boyacá.

5.2.3.- Cálculo del Costo de fabricación de tarjetas

Para la fabricación de tarjetas se tienen dos costos. Costo por diseño de las placas, el
cual se lo realiza mediante un software de computadora. Costo por fabricación de las
placas, es decir, una vez que se ha diseñado las placas en un ordenador, se envía a
lugares que se encargan de fabricar la placa en base al diseño realizado. El costo por
fabricación se lo detalla a continuación en la tabla 5.3, y el costo por diseño ya fue
tomado en cuenta en costo por mano de obra en la tabla 5.1.

Elaboración de Tarjetas

Elemento Cantidad Costo


Tarjeta esclavo1 1 7,00
Tarjeta esclavo2 1 7,00
Tarjeta master 1 6,00

TOTAL 20,00
Tabla 5.3 Costo de elaboración de tarjetas

5.2.4.- Cálculo del costo por uso del ordenador.-


Ahora se necesita determinar el costo por hora de alquiler de un ordenador, debido a
que su uso fue bastante extendido. Para realizar la labor expuesta se determina el
número de horas trabajadas en un año, para lo cual se realiza el siguiente cálculo:

Días trabajados al año 218


Horas trabajadas el día x 8
Horas trabajadas al año 1744

Ahora determinamos el costo de un ordenador en un año. Para determinar el costo de


maquinaria (hora-máquina), se toma en cuenta el costo o valor de la máquina (nueva)

Costo de un ordenador 3 $ 620,00

Luego, al costo de la máquina, le multiplicamos por un coeficiente de consumo


anual, a fin de obtener el costo debido a su uso en un año:

Costo de la máquina nueva: $ 620,00


Coeficiente de consumo: 0,30
Costo por uso: $ 186,00

Si la vida útil de un ordenador es de 4 años, entonces el costo por desgaste de la


máquina en un año resulta ser el costo total de un ordenador nuevo divido para
cuatro.
Costo de la máquina nueva: $ 620,00
Coeficiente de desgaste: 0,25
Costo por desgaste $ 155,00

El precio por kilovatio hora es de 12.67 centavos, según la Empresa Eléctrica


Regional del Sur (EERSSA) asignándole el coeficiente 1,17 a las pérdidas
responsables al hombre, 1,12 a las pérdidas por causa de la máquina y que un

3 El precio puesto corresponde a un ordenador Pentium IV, a 2.8 Ghz y 512 MB de memoria
RAM, suficiente para operar con los programas utilizados en este proyecto
ordenador (incluye el CPU y el monitor) consume aproximadamente 250 vatios en
una hora lo que es igual a 0.25 Kw./h, se tiene que la hora de ordenador por
concepto de consumo de energía eléctrica es:

1.12 x 1.17 x 0.1267dolares/Kw. x 0.25Kw.h= 4.15 centavos de dólar/hora.

Por lo que un ordenador en un año consumirá aproximadamente:

Consumo anual energía = 0.0415 x 1744 = 72,366 dólares

Ahora se suman todos los gastos calculados y determinamos el costo de alquiler de


un ordenador al año:

Costo en un año: $ 186,00


Costo debido a su uso: $ 155,00
Consumo de energía: $ 72,366
Total gastos: $ 413.366

Total gastos: $ 413.366


Horas trabajadas al año: 1744,00
Precio hora-máquina: $ 0.237

Con este valor, se puede determinar el costo por uso del ordenador. De la tabla 5.1 se
puede observar el número de horas que se han utilizado en programación y diseño de
las tarjetas, por lo que esos valores se retoman para calcular el costo por uso del
ordenador, y que se exponen en la tabla 5.4:

Costo por uso de ordenador

Rubro Horas Valor/ Hora Tiempo (h)

Código fuente C# 30 0.237 7.11

Código para Pic 40 0.237 9.48

Diseño placas 16 0.237 3.792


TOTAL 20.384

Tabla 5.4 Costo por uso de ordenador

5.2.5.- Cálculo del costo neto del sistema de control de acceso.-

Una vez calculado todos los costos que se han dado en el desarrollo del presente
proyecto, se procede a sumarlos y obtener el valor neto del proyecto. Cabe resaltar
que en estos costos no se ha incluido valores que desde nuestro punto de vista se
consideran superfluos, tales como son los programas de computadoras, por ejemplo
el sistema operativo Windows en nuestro medio acostumbran a instalarlo gratis en
los ordenadores, que aunque no es legal es un método muy difundido y en el
proyecto no se ha incluido gastos que no se han realizado en la práctica. Ahora se
obtiene el total de gastos y mano de obra para todo el proyecto. En la tabla 5.5 se
resumen estos valores:
Rubro
Costo de mano de obra 154.92
Costo de materiales 116.96
Elaboración de tarjetas 20
Costo de ordenador 20.384
TOTAL: 312.26
Tabla 5.5 Costo de elaboración de tarjetas

5.2.6.- Costo final del sistema.-

El costo del sistema de control de acceso peatonal es de 319 dólares, que son el
resultado de las sumatoria de mano de obra, materiales y maquinaria, por lo que
hasta este punto solo se devengan gastos y no existe ganancia alguna., es el valor real
de la máquina. Pero el fabricante debe obtener una utilidad o beneficio que
generalmente se toma el 15% del valor real.

Costo final: = Costo real + 15% (costo real).


COSTO FINAL: = $ 312,26 + 46.84
COSTO FINAL: $ 359.1
5.3.- Análisis de los costos en función del número de unidades fabricadas.-

En caso de fabricar mas de una unidad, el costo por unidad se reduce, debido a que
existen rubros que no son necesarios repetirlos o realizarlos de nuevo, por el simple
hecho de que ya están realizados, tal como es el caso de la programación, diseño de
placas y consumo por uso del ordenador, para analizar mejor esta situación
dividiremos en dos tipos de gastos. Gastos fijos, que son los gastos o costos que no
varían así se produzca una o mil unidades, tal como es el caso de la programación de
los microcontroladores. Gastos variables, que son los costos que dependen del
número de unidades que se produzcan, tal como es el caso de un módulo LCD que su
número aumenta de acuerdo a la cantidad de sistemas que se produzcan. En la
siguiente tabla muestra el costo del sistema de control de acceso, pero desglosado
desde el punto de vista de los gastos fijos y variables.

Gastos Fijos: SUBTOTAL

Código fuente C# 41.1

Código para PIC 54.8

Diseño placas 21.29

Montaje y pruebas 21.92

Costo de ordenador 20.384

Total gastos Fijos 158.86

Gastos Variables:

Materiales 116,96

Armado de placas 16.44

Elaboración de tarjetas 20

Total gastos variables 153.4

TOTAL 312.26
Tabla 5.5 Costo de elaboración de tarjetas

Ahora se realiza un grafico comparativo de los gastos fijos y variables, en donde se


puede apreciar la diferencia entre ambos valores para la producción de una sola
unidad:

Costos Fijos Vs Costos Variables

Costos
Variables; Costos Fijos;
153,4; 49% 158,86; 51%

Figura 5.1 relación costos fijos costos variables para una unidad

Si se produce 10 unidades, los costos fijos se reducen para cada unidad a la décima
parte, por lo que cada unidad el costo fijo será de:
Costo fijo = 158.86 / 10 = 15.87 dólares

En la tabla 5.6 se detalla los costos por unidad, en una producción de 10 unidades del
sistema de control de acceso.
Costo unitario (producción de 10 unidades)

Costos Fijos 15.87


Costos variables 153.4

Subtotal 169.27
Ganancia 25.39
Total 194.66
Tabla 5.6 Costo por unidad para producir 10 sistemas
Costos Fijos Vs Costos Variables

Costos Fijos;
15,88; 10,35%

Costos
Variables;
153,4; 89,6%

Figura 5.2 relación costos fijos costos variables para producir 10 sistemas

Por último, si se produce 1000 unidades, los costos fijos se reducen para cada unidad
a la milésima parte, esto reduce considerablemente el costo final del producto ya que
los costos fijos representaban más del 50 % en la producción para una unidad. El
costo fijo para cada unidad producida será de:
Costo fijo = 158.86 / 1000 = 0.1587 dólares

En la tabla 5.7se detalla los costos por unidad, en una producción de 1000 unidades

Costo unitario (producción de 1000 unidades)

Costos Fijos 0.1587


Costos variables 153.4

Subtotal 153.56
Ganancia 23.03
Total 176.6
Tabla 5.7 Costo por unidad para producir 1000 sistemas
Costos Fijos Vs Costos Variables

Costos Fijos;
0,159; 0,103%

Costos
Variables;
153,4; 99,896%

Figura 5.3 relación costos fijos costos variables para producir 1000 sistemas

Las graficas son claras en este aspecto, los costos fijos pasan a ser insignificantes
cuando la producción aumenta a 1000 unidades. Para tener una visión mas clara de
esta situación, se grafica nuevamente los tres casos analizados individualmente.

variacion de los Costos por la cantidad producida

100%

80%

60%
Costos Fijos
40% Costos variables

20%

0%
una unidad diez unidades mil unidades

Figura 5.4 relación costos fijos costos variables de los tres modelos
Cada barra representa el costo total del producto, la gráfica lo que intenta representar
es la relación porcentual entre los costos fijos y variables en cada uno de los casos
analizados. Se observa que al producir una unidad los costos fijos son incluso
mayores que los costos variables, pero al producir 10 unidades decrecen
significativamente, pero al llegar a las 1000 unidades, los costos fijos se vuelven casi
insignificantes.

En la siguiente grafica se aprecia el decrecimiento del los costos totales del sistema,
el mismo que baja de 312 dólares (costo para producir una unidad) a 153 dólares
(costo para producir 1000 unidades.). La diferencia es bástate grande, lo que hace
reflexionar la forma drástica con que bajan los costos de los productos que se
fabrican en grandes cantidades, como por ejemplo el microprocesador de un
ordenador cuyo costo es realmente insignificante frente a la tecnología que
representa tanto en su fabricación como en su funcionamiento, gracias a que los
costos fijos que son elevadísimos debido a los estudios, diseños, matrices,
maquinarias, etc. son absorbidos por el número de producto fabricados.

variación de costos de acuerdo a la producción

359,1
400
350
300
194,66 176,6
250
200
150
100
50
0
una unidad diez unidades mil unidades

Figura 5.5 variación de los precios debido al incremento de la producción

5.4.- Análisis de sistemas análogos al control de acceso peatonal.-

Se ha buscado bastante a través de la guía telefónica de Guayaquil y el Internet a fin


de localizar sitios donde distribuyan sistemas similares a que se ha propuesto en este
proyecto de tesis, lamentablemente en Internet se encuentran sistemas similares, pero
no existe información sobre el costos, y pedir información a los fabricantes es
bastante complicado debido a que son empresas que están en otros países y lograr
que den este tipo de información se consigue haciéndose pasar por distribuidor o un
comprador al por mayor. En las siguientes páginas se describen algunos sistemas de
control de acceso, que nos den una idea de los costos de estos productos.

5.4.1.- Control de acceso Intemperie.- La descripción de este sistema, se


encuentra en el recuadro de la página y el costo se encuentra en euros. Para obtener
el costo en dólares hacemos la transformación a una conversión de:

1 euro = 1.31dolares
Ahora: 112.25 euros será: 147 dólares

Un sistema de este tipo, en nuestro país podría estar costando valores cercanos a los
200 dólares americanos incluido gastos de envió e impuestos.

TECLADO DE ACCESO 2 SALIDAS S170132

Control de Acceso Intemperie


CERRADURAS ELECTRICAS Y CONTROLES DE ACCESO

112,25-Euros.

Control de acceso económico apto para su uso en el exterior. Este teclado es el


sistema ideal para crear un control de acceso mediante cables. Resulta
especialmente útil en residencias particulares, pequeños negocios, oficinas, etc.
Características: 1 salida de rele de 5A y otra de 1A independientes, con retardo
de apertura programable entre 0 y 99 segundos o bien de forma secuencial
marcha - parada. Alimentación 12V CA / CC, Max 200 mA. Estanqueidad: IP65.
Temperatura de funcionamiento: de -30º a 50º C. 60 códigos de 1 a 8 cifras
diferentes. Indicadores luminosos de estado, Teclado con iluminación
automática y teclas de poli carbonato autoextingible. Sistema anti descifrado. Se
instala en minutos. Mas de cien millones combinaciones.

http://www.superinventos.com/S170132.htm
5.4.2.- Teclado de combinación para puertas.-

El siguiente modelo, es una variante del anterior y es fabricado por la misma empresa,
en el cuadro de texto se aprecia sus características, y su precio en dólares es de: 97.54
x 1.31 = 127.74 dólares www.superinventos.com/S170130.htm

CONTROL DE ACCESO POR TECLADO S170130


Teclado de Combinacion para Puertas.
97,54-Euros.

La seguridad y la comodidad con un solo dedo.


Efectivamente, con un solo dedo usted puede dotar a su casa, negocio u
oficina de la seguridad y la comodidad necesaria que le proporciona este
elegante teclado. Permite controlar los accesos a viviendas y edificios
conectándolo a una cerradura eléctrica, sin necesidad de utilizar las llaves.

Dispone de tres salidas distintas, una de ellas un rele con capacidad para 10
A, que puede conectarse a una cerradura eléctrica, una salida auxiliar para
enviar una señal externa y un botón de pánico para situaciones de
emergencia.

Se le puede programar hasta 56 claves diferentes de 1 a 8 dígitos, lo que


permite establecer diferentes niveles de acceso, ideal para oficinas y centros
de trabajo. EL código es indescifrable ya que existen mas de 100 millones de
combinaciones y se puede programar para activar las diferentes salidas de
forma individual o conjunta.

El botón de pánico se activa al pulsar asterisco (*) y almohadilla (#) de


forma simultánea o introduciendo un código que abre la puerta y envía una
señal de pánico. Puede programarse para que los contactos se cierren de 1 a
98 segundos. Y se le puede asignar un código de cierre y otro de apertura,
no perdiéndose los códigos en caso de interrupción del suministro eléctrico,
ya que estos se quedan almacenados en memoria.

Todas las funciones se programan desde el teclado, indicándonos los leds el


modo en que se encuentra el teclado, si funcionamiento, programación, etc.
Si se le introducen tres códigos seguidos erróneos, el teclado se bloquea.

Este teclado es para ser usado en el interior, pero puede conectársele un


teclado de exterior, totalmente estanco y antivandálico
5.4.3.- Control de acceso AC-903.-

Es un modelo de procedencia inglesa, de mejores características que los anteriores, y


es un Terminal autónomo que sirve para controlar el acceso en una puerta. Su costo
es de 130.40 libras que transformados a dólares resulta 254,27 dólares americanos.

AC-903

Características

Tiene tres modos de Acceso: Armado


(acceso de acuerdo con base de datos del
usuario), Desarmado (acceso sin
restricción libre), y Bloqueado (ningún
acceso)

Hasta 240 expedientes en la base de


datos del usuario, cada uno con un código
de identificación individual y/o contraseña

Tres métodos de acceso (seleccionables


para cada usuario):
Contraseña
Tarjeta de Identificación (RFID)
Tarjeta + Contraseña de Identificación

El acceso al modo de programación es


protegido por una tarjeta de identificación
del supervisor y/o una contraseña
principal
Ayuda para los tipos normalmente
cerrados y normal-abiertos de cerraduras
eléctricas, de líneas de alarmas, de
sensores de puerta y de interruptores de
salida abiertos

Los parámetros editables tales como


tiempo y modo, alarma de la activación de
la cerradura habilitado/desabilitado, etc..

http://www.factorydirect.co.uk/ac903.html
CONCLUSIONES Y RECOMENDACIONES

CONCLUSIONES

En la culminación del presente proyecto de tesis, y después de haber analizado el


trabajo de una forma global y detenida, creemos que es un tiempo adecuado para
determinar los errores cometidos y analizar soluciones que en su momento hubiesen
resultado mas acertadas, así como observar que todo el conocimiento adquirido se
encuentra asociado en un solo proyecto que abarca algunas ramas del conocimiento
científico, y que es justamente su interrelación la que nos ha provocado mayores
dificultades. Como conclusiones del presente trabajo se tiene:

1. Se considera que la realización del proyecto de Titulación o Tesis, es el


trabajo más importante que un estudiante realiza a lo largo de su carrera
profesional, y que gracias a él se adquiere conocimientos y destrezas muy
importantes en un determinado campo.

2. El conocimiento de lenguaje Ensamblador para microcontroladores, es una


base, hasta cierto punto indispensable para el aprendizaje de lenguajes de
programación de alto nivel para microcontroladores, sobretodo en el lenguaje
C, que maneja funciones de bajo nivel.

3. Los programas para microcontroladores realizados en Lenguaje C, ocupan un


número de líneas mayor que un programa realizado en Lenguaje
Ensamblador debido a los archivos de cabecera que se cargan en cualquier
programa realizado en Lenguaje C, y que son obligatorios a si se trate de un
programa simple, y su diferencia va disminuyendo a medida que el programa
aumenta en números de líneas y que incluso en alguno casos puede llegar a
ser menor, gracias a la reutilización de funciones que ofrece el compilador de
lenguaje C.
4. La facilidad que presenta trabajar en lenguajes de alto nivel, sobre todo en
Lenguaje C, permite desarrollar aplicaciones para microcontroladores con
mayor facilidad y eficacia gracias a las potentes funciones que dispone,
disminuyendo tiempos de programación, permitiendo realizar
mantenimientos y mejoras en los programas desarrollados con mayor
sencillez por el mismo desarrollador o por otras personas, debido a que al ser
un programa estructurado es fácil entender las funciones y procedimientos
empleados.

5. El desarrollo de un sistema de control de acceso se basa principalmente en las


comunicaciones entre dispositivos, lo que permite un flujo continuo de
información bidireccional entre los mismos, que es necesario para conocer el
estado del sistema en cualquier momento, y que sirve como base para el
desarrollo de aplicaciones de cualquier naturaleza.

6. El precio final del sistema propuesto, resulta más económico que los sistemas
similares fabricados por empresas extranjeras, y que son importados al país
por diferentes comercializadoras.

7. El diseño de sistemas de cualquier índole, basados en microcontroladores,


resultan muy versátiles, prácticos y económicos, debido a la gran flexibilidad
que proporciona los microcontroladores al momento de programarlos, la gran
cantidad de modelos que existen en el mercado, diversidad de funciones,
variedad de medios de comunicación, memoria, interrupciones internas y
externas y finalmente su costo.
RECOMENDACIONES

Las recomendaciones que ha continuación se anotan, son aspectos importantes que se


dieron lugar durante el desarrollo del presente proyecto final, y de que de una u otra
forma intervinieron en el normal desenvolvimiento. Con el fin de evitar
inconvenientes en este tipo de proyectos es necesario que se tome en cuenta las
siguientes recomendaciones.

1. La elección del proyecto de tesis es un paso muy importante dentro de la


carrera de un estudiante, por lo tanto es necesaria que el alumno este bien
informado y asesorado de los temas que se encuentren a su alcance.

2. Antes de iniciar el trabajo teórico, es importante que el alumno presente un


esquema o un Índice en el que ubiquen los temas a desarrollar en la forma
como pretendan disponerlos, a fin de que el trabajo se lo realiza en forma
ordenada.

3. El hecho de que la programación en Lenguajes del alto nivel simplifiquen la


programación de un dispositivo puedo lleva al abuso en el uso de las
funciones, por lo que es recomendable realizar diagramas de flujo a fin de
optimizar el código del programa y que este resulte ordenado y no sea
demasiado pesado, tratando en lo posible el uso de funciones a fin de ahorrar
espacio y tiempo.

4. Antes de realizar algún tipo de comunicación entre dispositivos, es


conveniente tener claro la trama de datos y las normas a las que se sujeta
determinado protocolo de comunicaciones, a fin de respetarlas durante la
programación y que sirvan de guía durante la recepción o el envió de datos.
En este proyecto se ha incluido en los anexos documentos explicativos tanto
del Bus I2C como de la interfaz de comunicaciones RS 232.

5. Es necesario tener claro la conexión de los dispositivos tal como el módulo


LCD, que dispone de algunos pines de conexión, esto evitará contratiempos y
en muchos casos el daño permanente del dispositivos por mala conexión.
6. Es conveniente armar el circuito en ProtoBoard, con todos los elementos que
van a ir en la placa, sin omitir ninguno por mas insignificante que parezca sus
efectos, y verificar su funcionamiento detenidamente antes de diseñar el
circuito impreso, Puesto que existen funciones, como por ejemplo las
comunicaciones pueden ser afectadas por pequeñas caídas de tensión.

7. El uso de simuladores de microcontroladores es muy necesarios y facilita


mucho la depuración de la programación durante el desarrollo, se recomienda
su uso a fin de evitar contratiempos y hasta gastos innecesarios.
BIBLIOGRAFÍA
Libros.-

ANGULO José Maria y otros autores , Microcontroladores PIC- diseño practico de


aplicaciones., tercera edición en español, McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, 2003.

CHARTE Francisco, manual de Microsoft C# 2005 Express Edición, Microsoft,


México, 2005.

CCS C, C Compiler Reference Manual, Version 4. Noviembre del 2006

DUQUE Edison, Curso avanzado de microcontroladores, Cekit.

FERGURSON Jeff y otros autores, La Biblia de C#, Ediciones ANAYA


Multimedia, España 2003

GARDNER Nigel, An introduction to programming the Microchip PIC in CCS C,


PICmicro MCU C®, 2003

MALVINO Albert Paul, Principios de electronica, Mc Graw Hill, sexta edición.


1999

PAPPAS Chris H, Microsoft Visual C++ 6.0 - manual de referencia. McGraW-Hill,


México, 1999.

7.2.- Direcciones electrónicas.

Microchip Corporation
http://www.microchip.com

Custom Computer Services Inc. (CCS C)


http://www.ccsinfo.com
PIC micros and C - CCS C review
http://www.microchipc.com/reviews/CCS_C

Enciclopedia Wikipedia
http://es.wikipedia.org/wiki/Portada

Parallax. inc
http://www.parallaxinc.com

Mundo Electrónico: Enlaces.


http://www.htsoft.com/products/piclite/piclite.html

Programas para PIC:


http://www.micropic.arrakis.es/pag06.htm

Directivas MPLAB:
http://tinyurl.com/zdkj

IC-Prog Prototype Programmer (programador para PIC)


http://www.ic-prog.com/

PicManía by Redraven
http://picmania.garcia-cuervo.com/index.htm

Identificación biometría con huellas digitales


http://ciberhabitat.gob.mx/hospital/huellas/textos/identificacion.htm

Propic2: Programador de Pics.


http://www.propic2.com

Control de acceso y presencia basado en huellas dactilares


http://www.boxstoy.com/googlea.htm
Sistemas de control de acceso
http://www.syscom.com.mx/catalogos_seguridad_control_acceso.htm

Sistemas de control tiempo asistencia y acceso


http://www.es.tensor.co.uk/docs/access-control.htm

Aplicaciones de control de acceso


http://www.kimaldi.com/kimaldi/aplicaciones/control_de_acceso

Pc-News sistemas de control de acceso


http://www.pc-news.com/detalle.asp?sid=&id=11&Ida=1336

Identific-ar
http://identific-ar.com.ar/acceso.htm

Karnet C.A. Control de acceso


http://www.karnet.com.ve/control_acceso.html

Kimaldi - Identificación y Biometría


VOCABULARIO TÉCNICO

Glosario

ADC.-
Siglas de “analog-to-digital converter” (abreviado también como A/D or A to D).
Un conversor analógico-digital es un dispositivo electrónico capaz de convertir
un voltaje determinado en un valor binario, en otras palabras, este se encarga
de transformar señales análogas a digitales (0's y 1's).

ANSI.-
Significa: Instituto Nacional Estadounidense de Estándares (ANSI, por sus siglas en
inglés: American National Standards Institute) es una organización sin ánimo de
lucro que supervisa el desarrollo de estándares para productos, servicios, procesos y
sistemas en los Estados Unidos. ANSI es miembro de la Organización Internacional
para la Estandarización (ISO) y de La Comisión Electrotécnica Internacional
(International Electrotechnical Commission, IEC). La organización también coordina
estándares del país estadounidense con estándares internacionales, de tal modo que
los productos de dicho país puedan usarse en todo el mundo.

BIT.-
Es el acrónimo de Binary digit. (dígito binario). Un bit es un dígito del sistema de
numeración binario. La Real Academia Española (RAE) ha aceptado la palabra bit
con el plural bits.

CCITT.-
Son las siglas de Comité Consultivo Internacional Telegráfico y Telefónico
(Consultative Committee for International Telegraphy and Telephony - Comité
Consultivo Internacional de 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.
CISC.-
Es un modelo de arquitectura de computadores (del inglés Complex Instruction Set
Computer). Los microprocesadores CISC tienen un conjunto de instrucciones que se
caracteriza por ser muy amplio y permitir operaciones complejas entre operandos
situados en la memoria o en los registros internos, en contraposición a la arquitectura
RISC.

EIA.-
Acrónimo de “Electronic Industries Alliance”, que traducido es Alianza de Industrias
Electrónicas (EIA) es una organización comercial nacional que incluye el espectro completo
de los fabricantes de los Estados Unidos. La alianza es una sociedad de asociaciones de las
compañías electrónicas y de alta tecnología cuya misión es promover el desarrollo de
mercado y la competitividad de la industria de alta tecnología de los Estados Unidos con
esfuerzos domésticos e internacionales de la política.

EEPROM.-
Son las siglas de electrically-erasable programmable read-only memory (ROM
programable y borrable eléctricamente), en español o castellano se suele referir al
hablar como E²PROM y en inglés "E-Squared-PROM". Es un tipo de memoria ROM
que puede ser programado, borrado y reprogramado eléctricamente, a diferencia de la
EPROM que ha de borrarse mediante rayos ultravioletas. 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.

EPROM.-
Son las siglas de Erasable Programmable Read-Only Memory (ROM borrable programable).
Es un tipo de chip de memoria ROM inventado por el ingeniero Dov Frohman que retiene los
datos cuando la fuente de energía se apaga. En otras palabras, es no volátil.

DSP.-
el acrónimo de Digital Signal Processor, que significa Procesador Digital de
Señales. Un DSP es un sistema basado en un procesador o microprocesador que
posee un juego de instrucciones, un hardware y un software optimizados para
aplicaciones que requieran operaciones numéricas a muy alta velocidad. Debido a
esto es especialmente útil para el procesado y representación de señales analógicas
en tiempo real: en un sistema que trabaje de esta forma (tiempo real) se reciben
muestras (samples en inglés), normalmente provenientes de un conversor
analógico/digital (ADC).

ISO.-
La Organización Internacional para la Estandarización o International Organization for
Standarization (ISO), es una organización internacional no gubernamental, compuesta por
representantes de los organismos de normalización (ONs) nacionales, que produce normas
internacionales industriales y comerciales. Dichas normas se conocen como normas ISO y su
finalidad es la coordinación de las normas nacionales, en consonancia con el Acta Final de la
Organización Mundial del Comercio, con el propósito de facilitar el comercio, facilitar el
intercambio de información y contribuir con unos estándares comunes para el desarrollo y
transferencia de tecnologías.

LCD.-
Son las siglas de Liquid Crystal Display en inglés, que traducido al español es
Pantalla de Cristal Líquido, dispositivo inventado por Jack Janning, quien fue
empleado de NCR. 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.

LED.-
Son las siglas en inglés de 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 infrarrojo, recibiendo éstos últimos la denominación de IRED
(Infra-Red Emitting Diode).
PWM.-
La modulación por anchura de pulsos (ó PWM, de pulse-width modulation en inglés)
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) para portar información.
El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en
relación al período. Matemáticamente:

D es el ciclo de trabajo
τ es el tiempo en que la función es positiva (anchura del pulso)
T es el período de la función

RISC.-
En arquitectura computacional, RISC del inglés Reduced Instruction Set Computer
(Computadora con Conjunto de Instrucciones Reducido). Tipo de microprocesadores
con las siguientes características fundamentales:
1. Instrucciones de tamaño fijo y presentado en un reducido número de formatos.
2. Sólo las instrucciones de carga y almacenamiento acceden a la memoria por datos

ROM.-
Es el acrónimo de Read-Only Memory (memoria de sólo lectura). Es una memoria
de semiconductor no destructible, es decir, que no se puede escribir sobre ella, y que
conserva intacta la información almacenada, incluso en el caso de interrupción de
corriente (memoria no volátil). La ROM suele almacenar la configuración del
sistema o el programa de arranque del ordenador.

RAM
Es el acrónimo inglés de Random Access Memory (memoria de acceso aleatorio ó
memoria de acceso directo). 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. Se dicen "de acceso aleatorio" o "de acceso directo" porque los
diferentes accesos son independientes entre sí. Por ejemplo, si un disco rígido debe
hacer dos accesos consecutivos a sectores alejados físicamente entre sí, se pierde un
tiempo en mover la cabeza hasta la pista deseada (o esperar que el sector pase por
debajo, si ambos están en la misma pista), tiempo que no se pierde en la RAM.
Vocabulario.-

Acrónimo.-
Un acrónimo (del griego ἄκρος akros, 'extremo' y ὄνομα ónoma, 'nombre') es una
palabra que resulta de la unión de las letras iniciales de una o más palabras. Un
acrónimo constituye una palabra de nueva formación en una lengua. Normalmente,
aparecen con el objeto de abreviar la lectura de un concepto que precisa de varias
palabras para ser designado. El término hace referencia a un modo de formación de
palabras, no a una clase de palabras; por lo tanto, la palabra en sí puede ser
clasificada como sustantivo, adjetivo, etc.
Estos son unos ejemplos de acrónimos, con sus respectivos significados:
• ONU: Organización de las Naciones Unidas
• SIDA: Síndrome de Inmuno-Deficiencia Adquirida (debido a su gran uso ha terminado
por convertirse en un sustantivo común).

Byte.-
Voz inglesa, se pronuncia “báit”, que si bien la Real Academia Española ha
aceptado como equivalente a octeto, es decir a ocho bits, para fines correctos, un
byte debe ser considerado como una secuencia de bits contiguos, cuyo tamaño
depende del código de información o código de caracteres en que sea definido.

Embebido.-
Termino equivalente a sistema integrado, que a veces traducido del inglés se expresa como
embebido, empotrado o incrustado

Ensamblador.-
El término ensamblador (del inglés assembler) se refiere a un tipo de programa
informático que se encarga de traducir un fichero fuente escrito en un lenguaje
ensamblador, a un fichero objeto que contiene código máquina, ejecutable
directamente por la máquina para la que se ha generado. El propósito para el que se
crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que
escribir directamente en código binario, que es el único código entendible por la
computadora, es en la práctica imposible. La evolución de los lenguajes de
programación a partir del lenguaje ensamblador originó también la evolución de este
programa ensamblador hacia lo que se conoce como programa compilador

Compilador.-
Un compilador es un programa (o un conjunto de programas) que traduce un
programa escrito en un lenguaje de programación a otro lenguaje de programación,
generando un programa equivalente. Usualmente el segundo lenguaje es código de
máquina, pero también puede ser simplemente texto. Este proceso de traducción se
conoce como compilación.

Dactilar.-
Relativo a los dedos de la mano. Una huella dactilar o huella digital, es la impresión
visible o moldeada que produce el contacto de las crestas papilares

Emulador.-
En informática, un emulador es un software que permite ejecutar programas de ordenador en
una plataforma (arquitectura hardware o sistema operativo) diferente de la cual fueron
escritos originalmente. A diferencia de un simulador, que sólo trata de reproducir el
comportamiento del programa, un emulador trata de modelar de forma precisa el dispositivo
que se está emulando.

Escáner.-
Dispositivo para obtener o "leer" imágenes (escáner de ordenador o de barras) o encontrar un
objeto o señal (escáner de un aeropuerto, o de radio).

Facsimil.-
Reproducción (o copia; normalmente de imágenes). Se refiere sobre todo al envío de
imágenes sin movimiento a través de una línea de comunicación (Internet, BBS, cualquier
red, etc...). Su abreviatura es el FAX.

Ferromagnetismo.-
El ferromagnetismo es un fenómeno físico en el que se produce ordenamiento magnético de
todos los momentos magnéticos de una muestra, en la misma dirección y sentido. Un material
ferromagnético es aquel que puede presentar ferromagnetismo.
Firmware.-
Programación en Firme, es un bloque de instrucciones de programa para propósitos
específicos, grabado en una memoria tipo ROM, que establece la lógica de más bajo
nivel que controla los circuitos electrónicos de un dispositivo de cualquier tipo. Al
estar integrado en la electrónica del dispositivo es en parte hardware, pero también es
software, ya que proporciona lógica y se dispone en algún tipo de lenguaje de
programación. Funcionalmente, el firmware es el intermediario (interfaz) entre las
órdenes externas que recibe el dispositivo y su electrónica, ya que es el encargado de
controlar a ésta última para ejecutar correctamente dichas órdenes externas.

Hardware.-
Término del inglés que se utiliza generalmente para describir los artefactos físicos de
una tecnología. En un sentido más corto, el hardware puede ser equipo militar
importante, equipo electrónico, o equipo informático. En la informática se denomina
hardware o soporte físico al conjunto de elementos materiales que componen un
ordenador. Hardware también son los componentes físicos de una computadora tales
como el disco duro, CD-ROM, disquetera (floppy), etc... En dicho conjunto se
incluyen los dispositivos electrónicos y electromecánicos, circuitos, cables, tarjetas,
armarios o cajas, periféricos de todo tipo y otros elementos físicos.

Instrucción.-
Son un conjunto de datos insertados en una secuencia estructurada o especifica que el
procesador interpreta y ejecuta. En Informática, una instrucción normalmente se
refiere a una operación simple que se le da a un procesador y que este llevará a cabo.
Los tipos de instrucción permitidos están definidos y determinados dentro de cada
plataforma en la arquitectura del repertorio de instrucciones (ISA, instruction set
architecture), que también determina los registros de origen y destino de la CPU, y
en ocasiones un dato inmediato.

Interfaz.-
En términos generales, una interfaz es el punto, el área, o la superficie a lo largo de la cual
dos cosas de naturaleza distinta convergen.
Por extensión, se denomina interfaz a cualquier medio que permita la interconexión
de dos procesos diferenciados con un único propósito común.
Lenguaje (de programación).-
Un lenguaje de programación es un lenguaje que puede ser utilizado para controlar el
comportamiento de una máquina, particularmente una computadora. Consiste en un
conjunto de reglas sintácticas y semánticas que definen su estructura y el significado
de sus elementos, respectivamente.

Mascara.-
En informática, conjunto de datos que, junto con una operación, permiten extraer
selectivamente ciertos datos almacenados en otra. El término proviene, en sentido
figurado, de la capacidad de las máscaras para permitir a través de sus agujeros la
visualización de ciertas partes de aquello que cubren, a la vez que ocultan
(enmascaran) aquello tapado por las zonas no perforadas.

Microcontrolador.-
Un microcontrolador es un circuito integrado o chip que incluye en su interior las tres
unidades funcionales de un ordenador: CPU, Memoria y Unidades de E/S, es decir, se trata
de un computador completo en un solo circuito integrado. Aunque sus prestaciones son
limitadas, además de dicha integración, su característica principal es su alto nivel de
especialización. Aunque los hay del tamaño de un sello de correos, lo normal es que sean
incluso más pequeños, ya que, lógicamente, forman parte del dispositivo que controlan.

Microprocesador.-
El microprocesador, micro o "unidad central de procesamiento", CPU , es un chip
que sirve como cerebro del ordenador. En el interior de este componente electrónico
existen millones de transistores integrados. Suelen tener forma de prisma chato, y se
instalan sobre un elemento llamado zócalo[2]). También, en modelos antiguos solía
soldarse directamente a la placa madre. Aparecieron algunos modelos donde se
adoptó el formato de cartucho, sin embargo no tuvo mucho éxito. Actualmente se
dispone de un zócalo especial para alojar el microprocesador y el sistema de
enfriamiento, comúnmente se usa un ventilador (cooler). El microprocesador está
compuesto por: registros, la Unidad de control, la Unidad aritmético-lógica, y
dependiendo del procesador, una unidad en coma flotante.
Mnemónico.-
En Informática un 'Mnemónico es una palabra que sustituye a un código de
operación (Lenguaje de máquina), con lo cual resulta más fácil la programación, es
de aquí de donde resulta el concepto de lenguaje ensamblador.
Un ejemplo común de mnemónico es la instrucción MOV, que le indica al
microprocesador que debe de mover datos de un lugar a otro. El microprocesador no
entiende palabras, sino que números binarios, por lo que es necesaria la traducción
del mnemónico a código objeto.

Ordenador.-
Una computadora, conocida en algunos países como ordenador y en otros países como
computador, es un sistema digital con tecnología microelectrónica capaz de procesar datos a
partir de un grupo de instrucciones denominado programa. La estructura básica de una
computadora incluye microprocesador (CPU), memoria y dispositivos de entrada/salida (E/S),
junto a los buses que permiten la comunicación entre ellos. En resumen la computadora es
una dualidad entre hardware (parte física) y software (parte lógica), que interactúan entre sí
para una determinada función.

Periférico.-
Se denominan periféricos tanto a las unidades o dispositivos a través de los cuales el
ordenador se comunica con el mundo exterior, como a los sistemas que almacenan o
archivan la información, sirviendo de memoria auxiliar de la memoria principal.

Puerto.-
En computación, un puerto es una forma genérica de denominar a una interfaz por la
cual diferentes tipos de datos pueden ser enviados y recibidos. Dicha interfaz puede
ser física, o puede ser a nivel software (por ej: los puertos que permiten la
transmisión de datos entre diferentes computadoras)

PIC.-
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.
El nombre actual no es un acrónimo. En realidad, el nombre completo es PICmicro,
aunque generalmente se utiliza como Peripheral Interface Controller (Controlador
de Interfaz Periférico).

Radiofrecuencia.-
El término radiofrecuencia, también denominado espectro de radiofrecuencia o RF, se aplica
a la porción del espectro electromagnético en el que se pueden generar ondas
electromagnéticas aplicando corriente alterna a una antena.

Simulador.-
Un simulador es un aparato que permite la simulación de un sistema, reproduciendo
su comportamiento. Los simuladores reproducen sensaciones que en realidad no
están sucediendo. Un simulador pretende reproducir tanto las sensaciones físicas
(velocidad, aceleración, percepción del entorno) como el comportamiento de los
equipos de la máquina que se pretende simular. Para simular las sensaciones físicas
se puede recurrir a complejos mecanismos hidráulicos comandados por potentes
ordenadores que mediante modelos matemáticos consiguen reproducir sensaciones
de velocidad y aceleración. Para reproducir el entorno exterior se emplean
proyecciones de bases de datos de terreno. A este entorno se le conoce como
"Entorno Sintético”

Sistema integrado.-
Un sistema integrado () es un sistema informático de uso específico construido
dentro de un dispositivo mayor. Los sistemas integrados se utilizan para usos muy
diferentes de los usos generales para los que se emplea un ordenador personal. En un
sistema integrado la mayoría de los componentes se encuentran incluidos en la placa
base (motherboard) (la tarjeta de vídeo, audio, módem, etc.)

Software.-
Se denomina software, programática, equipamiento lógico o soporte lógico a todos
los componentes intangibles de un ordenador o computadora, es decir, al conjunto de
programas y procedimientos necesarios para hacer posible la realización de una tarea
específica, en contraposición a los componentes físicos del sistema (hardware). Esto
incluye aplicaciones informáticas tales como un procesador de textos, que permite al
usuario realizar una tarea, y software de sistema como un sistema operativo, que
permite al resto de programas funcionar adecuadamente, facilitando la interacción
con los componentes físicos y el resto de aplicaciones.

Ultravioleta (radiación).-
La radiación ultravioleta, cuyas longitudes de onda van aproximadamente desde los
400 nm, hasta los 15 nm, es emitida por el Sol en las formas UV-A, UV-B y UV-C
pero a causa de la absorción por parte de la atmósfera terrestre, el 99% de los rayos
ultravioletas que llegan a la superficie de la Tierra son del tipo UV-A. Estos rangos
están relacionados con el daño que producen en el ser humano. La radiación UV-C
no llega a la tierra porque es absorbida por el oxígeno y el ozono de la atmósfera, por
lo tanto no produce daño. La radiación UV-B es parcialmente absorbida por el ozono
y llega a la superficie de la tierra, produciendo daño en la piel.

http://www.kimaldi.com/kimaldi
Anexos

A) El Bus I2C (Inter Integrated Circuit)

Diseñado por Philips, este sistema de intercambio de información a través de tan


solo dos cables permite a circuitos integrados y módulos OEM interactuar entre sí a
velocidades relativamente lentas. Emplea comunicación serie, utilizando un
conductor para manejar el timming (pulsos de reloj) y otro para intercambiar datos.
Este bus se basa en tres señales:

• SDA (System Data) por la cual viajan los datos entre los dispositivos.
• SCL (System Clock) por la cual transitan los pulsos de reloj que
sincronizan el sistema.
• GND (Masa) Interconectada entre todos los dispositivos "enganchados" al
bus.

Las líneas SDA y SCL son del tipo drenador abierto, similares a las de colector
abierto pero asociadas a un transistor de efecto de campo (ó FET). Se deben poner en
estado alto (conectar a la alimentación por medio de resistores Pull-Up) para
construir una estructura de bus tal que se permita conectar en paralelo múltiples
entradas y salidas.

Figura a.1 Diagrama general del Bus I2C


En el diagrama se observa la configuración eléctrica básica del bus. Las dos líneas
de comunicación disponen de niveles lógicos altos cuando están inactivas.
Inicialmente el número de dispositivos que se puede conectar al bus es ilimitado,
pero obsérvese que las líneas tienen una especificación máxima de 400pF en lo que
respecta a capacidad de carga. La máxima velocidad de transmisión de datos que se
puede obtener es de aproximadamente 100Kbits por segundo. En la siguiente figura
se aprecia dos microcontroladores PIC 16F870 conectados por medio del bus I2C,
donde se han destacado las partes principales de las conexiones.

Figura a.2 Microcontrolador comunicado por medio del Bus I2C

Las definiciones o términos utilizados en relación con las funciones del bus I2C
son las siguientes:

• Maestro (Master): Dispositivo que determina la temporización y la


dirección del tráfico de datos en el bus. Es el único que aplica los pulsos de
reloj en la línea SCL. Cuando se conectan varios dispositivos maestros a un
mismo bus la configuración obtenida se denomina "multi-maestro".

• Esclavo (Slave): Cualquier dispositivo conectado al bus incapaz de generar


pulsos de reloj. Reciben señales de comando y de reloj proveniente del
dispositivo maestro.
• Bus Desocupado (Bus Free): Estado en el cual ambas líneas (SDA y
SCL) están inactivas, presentando un estado lógico alto. Únicamente en
este momento es cuando un dispositivo maestro puede comenzar a hacer
uso del bus.

• Comienzo (Start): Sucede cuando un dispositivo maestro hace ocupación


del bus, generando esta condición. La línea de datos (SDA) toma un estado
bajo mientras que la línea de reloj (SCL) permanece alta.

• Parada (Stop): Un dispositivo maestro puede generar esta condición dejando


libre el bus. La línea de datos toma un estado lógico alto mientras que la de
reloj permanece también en ese estado.

• Dato Válido (Valid Data): Sucede cuando un dato presente en la línea


SDA es estable mientras la línea SCL está a nivel lógico alto.

• Formato de Datos (Data Format): La transmisión de datos a través de este


bus consta de 8 bits de datos (ó 1 byte). A cada byte le sigue un noveno
pulso de reloj durante el cual el dispositivo receptor del byte debe generar
un pulso de reconocimiento, conocido como ACK (del inglés
Acknowledge). Esto se logra situando la línea de datos a un nivel lógico
bajo mientras transcurre el noveno pulso de reloj.

Figura a.3 Formas de onda de SDA y SCL en la comunicación I2C

• Dirección (Address): Cada dispositivo diseñado para funcionar en este bus


dispone de su propia y única dirección de acceso, que viene pre-establecida
por el fabricante. Hay dispositivos que permiten establecer externamente
parte de la dirección de acceso. Esto permite que una serie del mismo tipo de
dispositivos se puedan conectar en un mismo bus sin problemas de
identificación. La dirección 00 es la denominada "de acceso general", por la
cual responden todos los dispositivos conectados al bus.

• Lectura/Escritura (Bit R/W): Cada dispositivo dispone de una dirección de


7 bits. El octavo bit (el menos significativo ó LSB) enviado durante la
operación de direccionamiento corresponde al bit que indica el tipo de
operación a realizar. Si este bit es alto el dispositivo maestro lee información
proveniente de un dispositivo esclavo. En cambio, si este bit fuese bajo el
dispositivo maestro escribe información en un dispositivo esclavo.

Protocolo del Bus

Como es lógico, para iniciar una comunicación entre dispositivos conectados al bus
I2C se debe respetar un protocolo. Tan pronto como el bus esté libre, un dispositivo
maestro puede ocuparlo generando una condición de inicio. El primer byte
transmitido después de la condición de inicio contiene los siete bits que componen
la dirección del dispositivo de destino seleccionado y un octavo bit correspondiente
a la operación deseada (lectura o escritura). Si el dispositivo cuya dirección se
apuntó en los siete bits está presente en el bus éste responde enviando el pulso de
reconocimiento ó ACK. Seguidamente puede comenzar el intercambio de
información entre los dispositivos.

Cuando la señal R/W está previamente a nivel lógico bajo, el dispositivo maestro
envía datos al dispositivo esclavo hasta que deja de recibir los pulsos de
reconocimiento, o hasta que se hayan transmitido todos los datos.

En el caso contrario, es decir cuando la señal R/W estaba a nivel lógico alto, el
dispositivo maestro genera pulsos de reloj durante los cuales el dispositivo esclavo
puede enviar datos. Luego de cada byte recibido el dispositivo maestro (que en este
momento está recibiendo datos) genera un pulso de reconocimiento.

El dispositivo maestro puede dejar libre el bus generando una condición de parada
(Stop). Si se desea seguir transmitiendo, el dispositivo maestro puede generar otra
condición de inicio el lugar de una condición de parada. Esta nueva condición de
inicio se denomina "inicio repetitivo" y se puede emplear para direccionar un
dispositivo esclavo diferente ó para alterar el estado del bit de lectura/escritura
(R/W).

Conclusiones Finales:
Tanto Philips como como otros fabricantes de dispositivos compatibles con I2C
disponen de una amplia gama de circuitos integrados, incluyendo memorias RAM y
EEPROM, microcontroladores, puertos de E/S, codificadores DTMF, tranceptores
IR, conversores A/D y D/A, relojes de tiempo real, calendarios, etc.

Dado que no siempre se requiere alta velocidad de transferencia de datos este bus es
ideal para sistemas donde es necesario manejar información entre muchos
dispositivos y, al mismo tiempo, se requiere poco espacio y líneas de circuito
impreso. Por ello es común ver dispositivos I2C en video grabadoras, sistemas de
seguridad, electrónica automotriz, televisores, equipos de sonido y muchas otras
aplicaciones mas. Incluso, y gracias a que el protocolo es lo suficientemente
simple, usualmente se ven dispositivos I2C insertados en sistemas microcontrolados
que no fueron diseñados con puertos I2C, siendo el protocolo generado por el
firmware.

También hay dispositivos de adaptación que permiten conectar buses


originalmente paralelos a sistemas I2C. Tal es el caso del chip PCD 8584 de
Philips el cual incorpora bajo su encapsulado todo lo necesario para efectuar
dicha tarea.

Hay, además, circuitos integrados cuya única misión es adaptar los niveles presentes
en el bus I2C y convertirlos desde y hacia TTL, permitiendo resolver fácil y
rápidamente la interconexión de dispositivos de dicha familia con el I2C.

Autor: Manuel González García -mgg_798@hotmail.com


http://www.pablin.com.ar/electron/cursos/I2C/index.htm
B) Interfaz RS-232

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.

En particular, existen ocasiones en que interesa conectar otro tipo de equipamientos,


como pueden ser computadores. Evidentemente, en el caso de interconexión entre los
mismos, se requerirá la conexión de un DTE (Data Terminal Equipment) con otro
DTE.

El RS-232 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).

1.- Conexionados (Desde el DTE)

En la siguiente tabla podrás ver la lista de las señales RS-232 más comunes según los
pines asignados:
Signal DB-25 DE-9 (TIA-574) EIA/TIA 561 Yost RJ-50 MMJ

Common Ground G 7 5 4 4,5 6 3,4

Transmitted Data TD 2 3 6 3 8 2

Received Data RD 3 2 5 6 9 5

Data Terminal Ready DTR 20 4 3 2 7 1

Data Set Ready DSR 6 6 1 7 5 6

Request To Send RTS 4 7 8 1 4 -

Clear To Send CTS 5 8 7 8 3 -

Carrier Detect DCD 8 1 2 7 10 -

Ring Indicator RI 22 9 1 - 2 -
Tabla B1 Lista de señales RS-232
2.- Construcción física

La interfaz RS-232 está diseñada para distancias cortas, de unos 15 m o menos, y


para una velocidades de comunicación bajas, de no más de 20 KBaudios. A pesar de
ello, muchas veces se utiliza a mayores velocidades con un resultado aceptable. La
interfaz puede trabajar en comunicación asíncrona o síncrona y tipos de canal
simplex, half duplex o full duplex. En un canal simplex los datos siempre viajarán en
una dirección, por ejemplo desde DCE a DTE. En un canal half duplex, los datos
pueden viajar en una u otra dirección, pero sólo durante un determinado periodo de
tiempo; luego la línea debe ser conmutada antes que los datos puedan viajar en la
otra dirección. En un canal full duplex, los datos pueden viajar en ambos sentidos
simultáneamente. Las líneas de handshaking de la RS-232 se usan para resolver los
problemas asociados con este modo de operación, tal como en qué dirección los
datos deben viajar en un instante determinado.
Si un dispositivo de los que están conectados a una interfaz RS-232 procesa los datos
a una velocidad menor de la que los recibe deben de conectarse las líneas
handshaking que permiten realizar un control de flujo tal que al dispositivo más lento
le de tiempo de procesar la información. Las líneas de "hand shaking" que permiten
hacer este control de flujo son las líneas RTS y CTS. Los diseñadores del estándar no
concibieron estas líneas para que funcionen de este modo, pero dada su utilidad en
cada interfaz posterior se incluye este modo de uso.

a) Los circuitos y sus definiciones


Las UART o U(S)ART (Transmisor y Receptor [Síncrono] Asíncrono Universal) se
diseñaron para convertir las señales que maneja la CPU y transmitirlas al exterior.
Las UART deben resolver problemas tales como la conversión de voltajes internos
del DCE con respecto al DTE, gobernar las señales de control, y realizar la
transformación desde el bus de datos de señales en paralelo a serie y viceversa. Debe
ser robusta y deberá tolerar circuitos abiertos, cortocircuitos y escritura simultánea
sobre un mismo pin, entre otras consideraciones. Es en la UART en donde se
implementa la interfaz.

Para los propósitos de la RS-232 estandar, 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 duplex 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 se muestran los tres nombres junto al número de pin del
conector al que está asignado, los nombres de señal están desde el punto de vista del
DTE (por ejemplo para Transmit Data los datos son enviados por el DTE, pero
recibidos por el DCE:
PIN EIA CCITT Función DTE-DCE

1 CG AA 101 Chassis tierra

2 TD BA 103 -> Transmit Data

3 RD AA 104 <- Receive Data

4 RTS CA 105 -> Request To Send

5 CTS CB 106 <- Clear To Send

6 DSR CC 107 <- Data Set Ready

7 SG AB 102 --- Signal Ground

8 DCD CF 109 <- Data Carrier Detect

9* <- Pos. Test Voltage

10* <- Neg. Test Voltage

11 (no tiene uso)

12+ SCDC SCF 122 <- Sec. Data Car. Detect

13+ SCTS SCB 121 <- Sec. Clear To Send

14+ SBA 118 -> Sec. Transmit Data

15# TC DB 114 <- Transmit Clock

16+ SRD SBB 119 <- Sec. Receive Data

17# RC DD 115 <- Receive Clock

18 (no tiene uso)


19+ SRTS SCA 120 -> Sec. Request To Send

20 DTR CD 108,2 -> Data Terminal Ready

21* SQ CG 110 <- Signal Quality

22 RI CE 125 <- Ring Indicator

23* DSR CH 111 -> Data Rate Selector

CI 112 -> Data Rate Selector

24* XTC DA 113 -> Ext. Transmit Clock

25* -> Busy


Tabla B2 Asignación de pines según EIA y CCITT

En la tabla, el carácter que sigue a los de número de pin:


• Raramente se usa (*).
• Usado únicamente si se implementa el canal secundario (+).
• Usado únicamente sobre interfaces sincrónicas(#).
También, la dirección de la flecha indica que dispositivo, (DTE o DCE) origina cada
señal, a excepción de las líneas de tierra (---).

Sobre los circuitos, todos los voltajes están con respecto a la señal de tierra (SG).
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 B3 Niveles de voltaje para 1 y 0 lógico

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 activada. Por ejemplo si la línea DTR
está al valor 0 lógico, se encuentra en la gama de voltaje que va desde +3 a +25 V,
entonces DTR está listo (ready).
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 ms.

b).- Características eléctricas de cada circuito


Los siguientes criterios son los que se aplican a las características eléctricas de cada
una de las líneas:

1. La magnitud de un voltaje en circuito abierto no excederá los 25 V.


2. El conductor será apto para soportar un corto con cualquier otra línea en el
cable sin daño a sí mismo o a otro equipamiento, y la corriente de
cortocircuito no excederá los 0,5 A.
3. Las señales se considerarán en el estado de MARCA, (nivel lógico “1”),
cuando el voltaje sea más negativo que - 3 V con respecto a la línea de Signal
Ground. Las señales se considerarán en el estado de ESPACIO, (nivel lógico
”0”), cuando el voltaje sea más positivo que +3 V con respecto a la línea
Signal Ground. La gama de voltajes entre -3 V y +3 V se define como la
región de transición, donde la condición de señal no está definida.
4. La impedancia de carga tendrá una resistencia a DC de menos de 7000 Ω al
medir con un voltaje aplicado de entre 3 a 25 V pero mayor de 3000 Ω
cuando se mida con un voltaje de menos de 25 V.
5. Cuando la resistencia de carga del terminador encuentra los requerimientos
de la regla 4 anteriormente dicha, y el voltaje del terminador de circuito
abierto está a 0 V, la magnitud del potencial de ese circuito con respecto a
Signal Ground estará en el rango de 5 a 15 V.
6. El driver de la interfaz mantendrá un voltaje entre -5 a –15 V relativos a la
señal de Signal Ground para representar una condición de MARCA. El
mismo driver mantendrá un voltaje de entre 5 V a 15 V relativos a Signal
Ground para simbolizar una señal de ESPACIO. Obsérvese que esta regla
junto con la Regla 3, permite 2 V de margen de ruido. En la práctica, se
utilizan –12 y 12 V respectivamente.
7. El driver cambiará el voltaje de salida hasta que no se excedan 30 V/µs, pero
el tiempo requerido a la señal para pasar de –3 V a +3 V de la región de
transición no podrá exceder 1 ms, o el 4% del tiempo de un bit.
8. La desviación de capacitancia del terminador no excederá los 2500 pF,
incluyendo la capacitancia del cable. Obsérvese que cuando se está usando un
cable normal con una capacitancia de 40 a 50 F/Pie de longitud, esto limita la
longitud de cable a un máximo de 50 Pies, (15 m). Una capacitancia del cable
inferior permitiría recorridos de cable más largos.
9. La impedancia del driver del circuito estando apagado deberá ser mayor que
300 Ω.

Fig b.1.- estructura de una carácter que se trasmite a través de RS-232

Existen en el mercado dos circuitos integrados disponibles, (los chips 1488 y 1489)
los cuales implementan dos drivers y receptores TTL, (4 por chip), para una RS-232
de forma compatible con las reglas anteriores.

c).- Limitaciones de la RS-232 C


La RS-232 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 RS-232 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 RS-232 especifica que la capacidad en la
línea no debe superar los 2.500 picofaradios. Los cables que se suelen utilizar tienen
una capacidad de 120 a 150 pico faradios por metro de longitud, por lo que la RS-
232 tiene como límite de 15 m de distancia, como se vio anteriormente.

Una segunda limitación de la RS-232 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 RS-232 se desarrollaron nuevas interfaces que pretenden transmitir a


mayor velocidad alcanzando mayor distancia. Estas nuevas interfaces como la RS-
422 y la RS-423 eliminan algunas de las restricciones de la RS-232, por ejemplo, la
de poseer un retorno común para todas las señales.

El contenido del anexo B (interfaz RS-232), fue tomado de: http://www.i-micro.com


C) El Circuito MAX-232

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.

Figura c.1.- Disposición física de las patillas en el MAX232

Figura c.2.- Circuito básico con el MAX232

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 circuito integrado posee dos conversores de nivel TTL a RS232 y otros dos que, a
la inversa, convierten de RS232 a TTL. Estos conversores son suficientes para
manejar las cuatro señales más utilizadas del puerto serie del PC, que son TX, RX,
RTS y CTS.

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.

Figura c.3.- Foto del circuito integrado MAX232


D) Migración del PIC16F87x a PIC16F87xA
E.- Manual de Usuario

El presente manual, ha sido elaborado para usuarios que deseen utilizar el programa
Control Acceso para PC, que es parte del proyecto de titulación “Aplicación de Pic C
y C# en el desarrollo de un Sistema de Control de Acceso Peatonal” y que tiene por
finalidad supervisar el funcionamiento del sistema basado en microcontroladores, y
cambiar algunos parámetros dentro de estos dispositivos inteligentes.

El programa Control Acceso para PC, fue desarrollado con Microsoft Visual C#
2005 Express Edition, el cual, además de interactuar con los microcontroladores,
maneja una base de datos que ha sido creada con Microsoft SQL Server 2005, para el
manejo y almacenamiento de datos que serán recibidos por medio del puerto serial
del ordenador.
La pantalla principal del programa, presenta varias alternativas distribuidos de forma
estratégica en recuadros dentro del panel principal., que tienen funciones como
visualización de mensajes y varios submenús (ver figura E1).

Figura e.1 Pantalla principal del programa Control Acceso para PC


El programa, continuamente recibe datos vía serial desde los microcontroladores, los
mismos que son interpretados por el ordenador en diferentes mensajes escritos y
sonoros, con una de las tablas de la base de datos siempre visible, cada vez que se
ordene almacenar datos se generará un sonido, también cuando la clave ingresada sea
incorrecta., para algunos casos solo se permite ingresar caracteres tipo numérico
“int”.

Cada submenú requiere una clave específica y se abre por medio de un botón,
validados en tres intentos posibles, el programa esta orientado a que solo un
submenú este abierto, como se aprecia en la figura E2..

Accede a menú mantenimiento de base de datos

Accede a menú cambiar clave del microcontrolador

Accede a menú abrir puertas

Ingresa a cambiar claves del software.


Figura e.2 menús en el Panel Principal

Cada botón requiere de una clave tipo entero, que es “123”, la misma que puede ser
modificada desde el software por el usuario., a excepción del botón cambiar clave
del software., este ingresa directo, los botones que requieren clave deshabilitan al
botón cambiar clave del software y viceversa.

MENÚ MANTENIMIENTO, BASE DE DATOS.-

Al habilitar submenú “Mantenimiento”, permite


acceder a varios submenús, que interactúan con la
base de datos provocando un constante cambio en
esta.

Figura e.3 Menú de mantenimiento


Al activar cualquier opción, se ingresa a un nuevo recuadro, se muestran algunos
ejemplos posibles.

Permite insertar nuevo dato en la


base de datos.

Figura e.4 Submenú de mantenimiento insertar

Permite modificar, dato “hora”


del departamento escogido en la
base de datos.

Figura e.5 Submenú de mantenimiento modificar

Permite eliminar toda una fila de


la base de datos, tomando como
referencia el código único de
apartamento.

Figura e.6 Submenú de mantenimiento eliminar


Permite buscar algún dato
específico como: “apartamento” o
“fecha”, en la base de datos

Figura e.7 Submenú de mantenimiento buscar

MENÚ CAMBIAR CLAVE DEL MICROCONTROLADOR

Al habilitar el submenú “Cambiar clave”, permite el ingreso de datos por el puerto


serial “seis caracteres”, los 2 primeros son el departamento del cliente y el resto la
clave correspondiente.

Figura e.8 Submenú de cambio de clave

Mensajes para cambiar clave desde el ordenador al microcontrolador:

Indica, únicamente 2 primeros


dígitos son correctos, clave
incorrecta.

Figura e.9 mensaje de clave incorrecta

Indica, todos los dígitos son


incorrectos.

Figura e.10 mensaje de departamento incorrecta


Indica, todos los dígitos
ingresados son correctos.

Figura e.11 mensaje de clave correcta

Permite ingresar 4 dígitos, los


mismos que serán la clave nueva.

Figura e.12 recuadro para ingreso de nueva clave

MENÚ ABRIR PUERTAS

Permite abrir las puertas desde el ordenador y almacenar a la base, se activa por
medio del botón “OK” una vez que se haya seleccionado una de las puertas.

Figura e.13 recuadro para abrir puerta

MENÚ CAMBIAR CLAVES DEL SOFTWARE.

Permite manipular directamente las claves de ingreso a menús secundarios,


simplemente se necesita saber las claves actuales “123”, caso contrario no se permite
el acceso.
Figura e.14 Recuadro para cambio de clave de software

Significados de mensajes cuando recibe datos vía RS-232 :

Espera el ingreso de la clave

Figura e.15 Mensaje para ingreso de clave

Informando la presencia del usuario


en puerta 1.

Figura e.16 Mensaje de presencia en puerta 1

Se abre puerta 1, ingresa usuario


del apartamento 6.
Dato almacenado y emisión
sonora.

Figura e.17 mensaje de ingreso de persona

Clave ingresada incorrectamente


por tres ocasiones.
Emisión sonora.

Figura e.18 Mensaje de Alarma en puerta 2

También podría gustarte