Está en la página 1de 56

ÍNDICE

Introducción ................................................................................................4

Comunicación serie (RS-232)......................................................................5


Transmisión serie/paralelo ................................................................5
Transmisión síncrona/asíncrona ........................................................5
Uso de un único reloj en la transmisión síncrona .........................7
Sincronización del principio de cada carácter en la transmisión
Asíncrona....................................................................................7
RS-232...............................................................................................8
Mecánicos...................................................................................8
Eléctrica......................................................................................9
Funcional: (sobre norma asíncrona )............................................9
Primer bloque ....................................................................10
Segundo bloque: "Control de flujo"....................................10
Tercer Bloque: “Transmisión/recepción de datos”..............11
Gestión Simplex, Half-duplex y Full-duplex de un canal de
comunicación.....................................................................................11
Conexionado DTE-DTE: Null-Modem ...............................................11
Bloque 1 .....................................................................................12
Bloque 2 .....................................................................................12
Bloque 3 .....................................................................................12
Terminales y emuladores de terminal.................................................13
Control de flujo con RS232 ................................................................13

Circuito eléctrico .........................................................................................15

Programa del microcontrolador .................................................................18

Programa de comunicación en Visual Basic ..............................................24

Conclusión ...................................................................................................28

Bibliografía..................................................................................................28

Anexo I. Datasheet del MAX232.................................................................29

Anexo II. Datasheet del 74245 ....................................................................36

Anexo III. Datasheet del 74373 ...................................................................42

Anexo IV. Datasheet del ULN2803 .............................................................50

Anexo V. Circuito eléctrico del control por voz .........................................58

3
INTRODUCCIÓN
El avance de las nuevas tecnologías ha provocado el desarrollo de nuevos
métodos de fabricación para conseguir un mayor número de piezas y un menor coste,
esta evolución se ha producido, entre otras cosas, a la automatización industrial que
consiste en construir un sistema que controle todas las máquinas encargadas de la
fabricación del producto para que funcionen sin un operario y gobernadas por un control
para que todo funcione correctamente.
En la actualidad, los procesos de automatización han llegado a los hogares
mediante la domótica, estos sistemas se encargan de controlar distintos sistemas de la
casa como la calefacción , el aire acondicionado… para conseguir que la casa se haga
más habitable cuando los habitantes lleguen a su hogar.
El problema de todo esto es el gran número de sensores (aparatos que controlan
las variables, como la temperatura), actuadores (aparatos que modifican el sistema,
como los radiadores), buses para la comunicación, un sistema para visualizar los
sensores y actuadores, etcétera. Todo esto se puede simplificar gobernando todo desde
un mismo lugar o puesto de control que puede ser cualquier ordenador personal (no
hace falta que sea moderno) conectado por una interfaz apropiada y comunicado por un
software específico. Esta interfaz y este software es el proyecto propuesto a
continuación, un sistema que controla ocho entradas digitales activas por alto por
niveles TTL (el “0” lógico es con 0V y el “1” con 5V), ocho salidas activas por relees
por lo que se pueden poner actuadores de potencia, comunicado mediante puerto serie
(RS-232) y gobernado por el microcontrolador PIC16F84.
El microcontrolador PIC16F84 tiene 1Kb de memoria FLASH de programa, 68b
de memoria RAM y 64b de memoria EEPROM para datos, una pila de ocho niveles,
trece líneas de entrada/salida divididas en dos puertos, uno de cinco bits y otro de ocho;
cuatro interrupciones, un temporizador y un perro guardián (WDT) que es un
temporizador que si se desborda el microcontrolador se resetea. En el proyecto no se
utilizan los temporizadores ya que las temporizaciones se realizan por software ni las
interrupciones, en el trabajo lo que se utiliza es la comunicación serie que este chip no
posee por lo que está desarrollada por software.
La aplicación que comunica la interfaz con el ordenador está realizada en Visual
Basic gracias al componente mscomm32.ocx que es un método para comunicarse por el
puerto serie mandando caracteres en código ASCII y recibiendo también en ASCII o en
decimal, por lo que en la transmisión se ha tenido que transformar de binario a ASCII y
en la recepción de decimal a binario.
En esta memoria están detallados los métodos de comunicación por el puerto
serie, el circuito eléctrico de la interfaz y los programas, el del microcontrolador y el de
comunicación con el ordenador.

4
COMUNICACIÓN SERIE (RS-232)
RS232 es el nombre del interfaz de comunicación serie más utilizado del mundo.
La norma serie está disponible en prácticamente el 99% de los ordenadores. Entre ellos
el IBM PC compatible que habitualmente está equipado con dos puertos serie RS232,
uno de ellos utilizado para conectar el ratón. El Apple Macintosh es una notable
excepción, utilizando otra norma serie, la RS422.
La norma RS232 fue originalmente diseñada para conectar terminales de datos
con dispositivos de comunicación (como módems y AITs). Desde un principio, fue
también utilizada para conectar casi cualquier dispositivo imaginable. Los usos de la
RS232 en el entorno doméstico son muchos y ampliamente conocidos. Desde la
conexión del ratón, el modem/fax, agendas electrónicas de bolsillo, impresoras serie,
grabadores de memoria (tipo EPROM), digitalizadores de vídeo, radios de AM/FM, etc.
La lista sólo está limitada por la imaginación de los diseñadores.
En el entorno industrial el peso de la RS232 es también muy importante. Si bien
existen soluciones de comunicación serie más robustas y versátiles, como la RS422 o la
RS475, la RS232 sigue siendo por su sencillez, su diseño económico y, sobre todo, por
su gran difusión, la norma más frecuente. Así, es fácil ver cómo robots industriales,
manipuladores, controles de todo tipo, utilizan la RS232. Existen hasta cafeterías
industriales (de las utilizadas en bares y restaurantes) que disponen de una RS232 para
ser conectadas a un PC e informar de cuántos cafés han hecho en el transcurso del día,
permitiendo al gerente de la empresa un control de caja, estadísticas de uso, etcétera.

TRANSMISIÓN SERIE/PARALELO

Conceptualmente una transmisión paralelo consiste en utilizar simultáneamente


varios circuitos de transmisión serie. Dejando al margen problemas específicos de una
transmisión en paralelo, como puede ser el efecto crosstalk o interferencia inducida de
símbolos, la transmisión paralelo es el recurso lógico cuando un solo circuito no
proporciona un ancho de banda suficiente. Si en un diseño, un problema de transmisión
puede resolverse (a coste similar) con una transmisión serie, esta opción es en principio
deseable frente a una paralelo. Piénsese que en una transmisión con múltiples circuitos
la probabilidad de fallo de línea y la necesidad de mantenimiento es proporcional al
número de líneas utilizadas.

TRANSMISIÓN SÍNCRONA/ASÍNCRONA

Independientemente de si la transmisión es serie o paralelo, ésta puede ser


síncrona o asíncrona. Para entender la diferencia es interesante fijarse en la etimología
de las palabras. Ambas vienen del griego cronos --tiempo (reloj)--. Síncrona significa
"mismo reloj" y asíncrona lo contrario, es decir, relojes distintos.
Entre dos equipos, emisor y receptor, existe un problema básico en la
identificación de los distintos símbolos (bits en este caso) que se transmiten por una
línea de transmisión. Supongamos dos computadores A y B, y una línea de transmisión
por la que se comunican. Supongamos que A manda a B 50 bits a una velocidad de
1000 bits/s. Esto quiere decir que cada bit estará en la línea de transmisión una milésima
de segundo. La máquina B necesita conocer este dato y necesita un reloj, o base de
tiempos, que le permita medir con precisión esa milésima de segundo para saber cuándo
ésta en la línea el segundo bit, el tercer bit, etcétera. El lector debe conocer que la forma

5
normal en que el equipo receptor decide si un bit es "0" o "1" es muestreando (haciendo
un muestreo de) la línea de transmisión durante el intervalo del bit, preferiblemente a
mitad del intervalo.
Es evidente que si el reloj utilizado por el receptor no mide el tiempo con
precisión y la secuencia de bits es lo suficientemente larga, entonces cometerá un error
en el muestreo de la línea e identificará una secuencia de bits incorrecta. Si, por
ejemplo, el reloj receptor atrasa y cuando indica al sistema que ha pasado 1 ms en
realidad ha pasado 1,1 ms (un error del 10%, sin duda un poco exagerado) entonces se
producirá un primer error de muestreo en el 6º a 7º bits transmitido (si asumimos que el
primer bit lo muestreó correctamente en el centro del intervalo del bits) (ver figura).
2º bit
Tiempo 1º bit

1,1ms 1,1ms

Error de lectura.
El muestreo del
flanco no garantiza Deriva respecto
una lectura correcta al punto medio
del bit. del intervalo.
La figura muestra claramente cuál es el problema. Debe quedar claro que aunque
el planteamiento del ejemplo hace culpable al reloj del receptor, en una situación real
encontraremos que, de usar dos relojes, es imposible garantizar que ambos midan el
tiempo (batir segundos) exactamente igual. Y aunque el error entre ambos sea mucho
menor, nótese que si la secuencia de bits es lo suficientemente larga, el error de
muestreo terminará por ocurrir.
Problema: determinar la diferencia (error) máxima admisible entre los relojes
del emisor y receptor para transmitir un carácter de ocho bits (suponemos
existe un mecanismo que permite siempre leer el primer bit de cada
carácter correctamente).
De esta situación se pueden deducir dos conclusiones:
1. La transmisión síncrona (emisor y receptor comparten el mismo reloj)
permite que el receptor pueda interpretar (muestrear) sin error de
sincronismo una secuencia (bloque) arbitrariamente larga de bits.
2. La transmisión asíncrona, a diferencia de la síncrona, esta orientada a la
transmisión de caracteres (bloque mínimo de tan sólo siete u ocho bits).

6
USO DE UN ÚNICO RELOJ EN LA TRANSMISIÓN SÍNCRONA
1. Si se utiliza el reloj de una de las dos máquinas (o un reloj tercero) se puede
transmitir la señal de reloj por una línea auxiliar a la otra máquina. La figura
muestra como a partir de la señal de reloj el muestreo es siempre exacto.
0 1 0 1 0 1 0 0 1

Datos

Reloj
2. El emisor puede utilizar una codificación para los datos de las denominadas
"auto-reloj",como por ejemplo el código Manchester (utilizado por ejemplo en
redes locales Ethernet).
La figura muestra una secuencia de bits codificada en código Manchester.
0 1 0 1 0 1 0 0 1
Datos

Código
Mánchester
Se puede observar que la codificación Manchester tiene la propiedad de que
existe siempre una transmisión en la mitad del intervalo del bit. El receptor aprovecha
esta propiedad para sincronizarse en cada bit. Es como si hubiera un reloj entre los datos
que marca el ritmo del muestreó que debe hacer el receptor, de ahí el nombre de auto-
reloj.

SINCRONIZACIÓN DEL PRINCIPIO DE CADA CARÁCTER EN LA TRANSMISIÓN


ASÍNCRONA
Cuando el emisor no transmite, en el periodo entre caracteres, la línea se
mantiene a "1" lógico. Cuando decide transmitir un carácter, primero transmite un "0"
que se denomina bit de START y sirve para que el receptor sincronice (empieza a
contar tiempos desde ese momento). El instante de sincronismo es el flanco de bajada
de la señal (ver figura). Tras el bit de START se transmiten los bits de datos y después
es obligatorio al menos un bit de STOP a "1" lógico. La secuencia se repite tantas veces
como caracteres se transmitan. Obsérvese que este mecanismo de sincronización con el
bit de START impide que la deriva de muestreo por diferencias entre los relojes
continúe en el siguiente carácter. Se asume que la deriva de muestreo no debe ser tan
grande que provoque un error de muestreo en los bits de cada carácter.
START

Datos
STOP

1 0 0 1 1 0 1 0

Sincronización y
muestreo del caracter

7
RS-232

La norma serie RS232 fue diseñada para conectar DTEs (Data Terminal
Equipment) o equipos terminales de datos (como un terminal, un ordenador,...) con
DCEs (data communication equipment) o equipos de comunicación de datos, como
módems, codecs, AITs, etcétera.
La diferenciación entre DTE y DCE es fundamental para la comprensión de la
norma como se verá más adelante.
La RS232 permite la transmisión síncrona y asíncrona. La subnorma asíncrona
es sin duda la más frecuente por lo que nos centraremos en ella.
La transmisión asíncrona se lleva a cabo tal y como se describe en el punto
anterior. En concreto además del bit de START utiliza:
• 5, 6, 7 o 8 bits de datos,
• 0 o 1 bit de paridad (la paridad puede ser "par"(Even), "impar"(Odd),
"siempre a cero"(Reset) y "siempre a uno"(Set).
• 1, 1.5 o 2 bits de STOP.
Para agilizar el lenguaje se suele emplear una nomenclatura abreviada como, por
ejemplo, "8N1" que indica que la transmisión serie RS232 se ha configurado para
transmitir 8 bits de datos, No paridad y 1 bit de STOP. Otro ejemplo sería "6E2" que
indica 6 bits de datos, paridad par y 2 bits de STOP.
El estándar RS232 normaliza los aspectos mecánicos, eléctricos y funcionales.

MECÁNICOS:
La RS232 utiliza un conector Cannon DB-25 (ISO 2110) macho para el DTE y
hembra para el DCE (ver figura).
Pin 1 Sheild Pin 14 Secondary
Transmitted Data
Pin 2 Transmitted Pin 15 Transmit
Data Clock
Pin 3 Recieved
Data Pin 16 Secondary
Received Data
Pin 4 Request
to Send Pin 17 Receive Clock
Pin 5 Clear
Pin 5 Ground to Send Pin 18 Local
Loopback
Pin 6 DCE
Pin 9 Ringing Ready Pin 19 Secondary
Pin 4 Data Indicator Pin 7 Signal Request to Send
Terminal Ready Ground Pin 20 Data
Pin 8 Clear Pin 8 Carrier Terminal Ready
to Send Detect
Pin 3 Transmit Pin 21 Remote Loop/
Data Pin 9 Reserved Quality Detect
Pin 7 Request for Testing
to Send Pin 22 Ring
Pin 2 Recieve Pin 10 Reserved Indicator
Data for Testing
Pin 6 Data Set Pin 23 Data Rate
Ready Pin 11 Unassigned Selector
Pin 1 Data Carrier Pin 24 Transmit
Detect Pin 12 Secondary Clock
Carrier Detect
Cannon DB-9 Pin 25 Test
Pin 13 Secondary
Clear to Send Made
Cannon DB-25
La conexión entre DTE y DCE es simple. Cada pin conecta con su par (el 1 con
el 1, el N con el N) existen versiones de DB-25 para cable plano que simplifica el
mecanizado de las conexiones. Cada pin tiene asignado una función tal y como se
muestra en la figura. Los nombres de las líneas están puestos desde el punto de vista del
DTE. Así, el pin 2 es la línea TxD (transmisión de datos) pero obviamente eso no es
cierto en ambos equipos, sólo en el DTE. En el DCE, por el contrario, es la línea por la
que recibe los datos del DTE. Cuando sólo se utiliza la transmisión asíncrona, sólo es
necesario utilizar nueve líneas. Se puede utilizar el conector Cannon-DB-9. Igualmente

8
el macho es el DTE y la hembra el DCE. (Desgraciadamente esta norma, y otras de la
RS232, no siempre es seguida por todos los fabricantes, razón por la cual no siempre es
fácil manejar esta interfaz).
La longitud máxima del cable entre DTE y DCE depende de la calidad de éste y
de la velocidad de transmisión utilizada. En principio la norma recomienda que no sea
superior a 15 metros para una velocidad de 20 Kb/s.

ELÉCTRICA:
La subnorma eléctrica de la RS232 es la V28. La norma fija una transmisión en
modo común (cada circuito tienen una referencia a tierra y esta es común para todos los
circuitos). Los circuitos son punto a punto, es decir, un driver con un sólo receptor de la
señal.
La señal es bipolar con lógica invertida, utilizando los siguientes valores:
• 1 lógico =-3 a - 15 voltios
• 0 lógico = + 3 a + 15 voltios
La ausencia de señal (0 voltios) queda diferenciado del 0 y 1 lógicos.
La RS232 es cortocircuitable. Esto quiere decir que, al menos teóricamente, los
drivers de salida de las puertas disponen de un mecanismo de auto-protección contra
sobrecalentamientos. La tensión máxima de operación es +/-25voltios y la carga
máxima es de 3 KΩ a 7 KΩ, con una corriente máxima de 500 mA.

FUNCIONAL: (SOBRE NORMA ASÍNCRONA )


La norma asíncrona la forman nueve líneas.
PIN DTE DCE DCE DTE PIN
DB-9 DB-25 DB-9 DB-25
2 2 TxD TxD TxD TxD 2 2
Bloque 3
3 3 RxD RxD RxD RxD 3 3

7 4 RTS RTS RTS RTS 7 4


8 5 CTS CTS Bloque 2 CTS CTS 8 5

1 8 DCD DCD DCD DCD 1 8

4 20 DTR DTR DTR DTR 4 20


6 6 DSR DSR Bloque 1 DSR DSR 6 6
9 22 RI RI RI RI 9 22

5 5 GND GND GND GND 5 5


Red telefónica
conmutada

La línea GND conecta la masa de ambos equipos y no merece mayor


comentario. Las restantes ocho líneas pueden ser agrupados en tres bloques funcionales

9
que se explican fácilmente si recordamos que la norma fue diseñada para conectar un
PC (DTE típico) con un modem (DCE típico).

PRIMER BLOQUE
Lo denominaremos "de establecimiento de conexión". Está formado por las
líneas:
DTR (Data Terminal Ready): Terminal de datos preparado. (El PC y su
RS232 están listos).
DSR (Data Set Ready): Equipo de comunicación preparado. (El modem está
listo).
RI (Ring Indicator): Indicador de llamada. (El modem indica a su PC que ha
recibido una llamada).
El objetivo es que ambos ordenadores sepan que se ha establecido un canal de
comunicación (normalmente a través de la línea telefónica).
Las líneas DTR y DSR del equipo local y del remoto deben estar activas (set)
durante todo el proceso. (De hecho cuando un PC desea dar por terminada una conexión
basta con que, momentáneamente, desactive (reset) su DTR).
La conexión se inicia manualmente (el usuario llama con el teléfono al modem
remoto) o automáticamente (el modem tiene capacidad de marcar un número de
teléfono – dialling ) y se gestiona en los módems (que negocian, de forma automática,
los parámetros de transferencia como la velocidad, compresión, etc).
Se asume que el usuario del PC que llama activará el proceso que va a utilizar la
conexión (un programa de transmisión de ficheros, por ejemplo). En el PC llamado se
asume que el proceso homólogo está ya activo (porque, por ejemplo, lo está
permanentemente) o se puede activar automáticamente al recibir de su modem la señal
de RI. Sea como fuera, la conexión queda establecida. A partir de este momento los
ordenadores pueden intercambiar información.

SEGUNDO BLOQUE: "CONTROL DE FLUJO"


Estas líneas tienen sentido en el caso de que el canal de comunicación
establecido tenga una gestión half-duplex (ver a continuación “gestión simplex, half-
duplex y full-duplex...”). Si el canal está establecido, el protocolo software de nivel de
enlace de datos que se esté utilizando (Xmodem, Ymodem, HDLC,...) fijará cuál de los
dos DTEs debe comenzar a hablar/transmitir.
Las líneas en este bloque son usadas de la siguiente manera:
RTS (Request To Send): Petición de transmisión. El PC indica a su modem
que quiere transmitir a la máquina remota.
CTS (Clear To Send): Canal libre para la transmisión. El modem indica a su
PC que puede transmitir. Previamente habrá transmitido una señal
portadora por el canal de comunicación para avisar al otro modem que
ocupa el canal.
DCD (Data Carrier Detected): Detectada portadora. El modem indica a su
PC que el canal de comunicación está ocupado por el equipo remoto.
El PC que quiere transmitir activa RTS, entonces su modem manda una señal
portadora (sin modular, sin datos) para avisar al modem remoto que se reserva el canal.
Una vez reservado el canal comunica a su DCE que ya puede transmitir activando la
línea CTS.
Cuando un PC haya terminado de transmitir, desactivará RTS, el modem quitará
la portadora y desactivará CTS. Entonces el otro modem podrá reservar el canal si su
PC desea transmitir.

10
En caso de que la gestión del canal sea full-duplex todo es más sencillo. Cuando
un PC quiere transmitir activa su RTS. Automáticamente su modem le da paso
activando CTS.

TERCER BLOQUE: “TRANSMISIÓN/RECEPCIÓN DE DATOS”


El funcionamiento de las líneas de este bloque es obvio.
TxD: Transmisión de datos.
RxD: Recepción de datos
La transmisión serial de los datos, tal y como se ha explicado, con el bit de
START, de STOP, etcétera, se produce en estas líneas.

GESTIÓN SIMPLEX, HALF-DUPLEX Y FULL-DUPLEX DE UN CANAL DE


COMUNICACIÓN

Un canal de comunicación puede ser gestionado de tres maneras: simplex, semi-


duplex (o half-duplex) y duplex (o full-duplex).
Simplex: La comunicación sólo es posible en un sentido. Por ejemplo, las
emisiones de radio o televisión gestionan el éter en modo simplex.
Half-duplex: La comunicación es posible en ambos sentidos pero de modo
alternado, nunca simultáneamente. Por ejemplo un walkie-talkie
gestiona el éter en modo half-duplex.
Full-duplex: La comunicación es posible en ambos sentidos
simultáneamente. Por ejemplo los teléfonos móviles utilizan el éter en
modo full-duplex.
Debe quedar claro que se trata de un modo de gestión del canal, no de una
propiedad de éste. En los ejemplos queda claro que un mismo medio, el éter, puede ser
gestionado de modos distintos.

CONEXIONADO DTE-DTE: NULL-MODEM

Como ya se ha mencionado, es frecuente que la norma RS232 se utilice para


otros propósitos distintos de los originales. Uno de los más frecuentes es conectar un
DTE con otro DTE. En este caso el cableado normal DTE a DCE no tiene sentido y
estaríamos cortocircuitando las líneas de salida. Existe una solución, un cableado
cruzado que se conoce como Null-modem. Es fácil de entender si lo analizamos usando
los tres bloques funcionales.

11
BLOQUE 1:
Conectar DTR con DSR remoto y RI remoto.
De esta manera cuando un PC activa su RS232 se lo comunica al remoto.

BLOQUE 2:
RTS con CTS local y DCD remoto.
Para entender la lógica de este cableado debe observarse (ver figura a
continuación) que hay dos líneas independientes de transmisión de datos, una en cada
sentido. Por lo tanto la comunicación es potencialmente Full-duplex. Esto implica que
cada DTE puede transmitir cuando lo desee, independientemente de que el otro DTE lo
esté haciendo o no. Por lo tanto cuando un PC quiere transmitir activa su RTS, esto
activa también su propia CTS lo que le permite transmitir inmediatamente. Además
indica que está transmitiendo a la máquina remota activando el DCD remoto.

BLOQUE 3:
TxD con RxD remoto.
Como habíamos mencionado, la comunicación es potencialmente Full-Duplex.

12
TERMINALES Y EMULADORES DE TERMINAL

Una terminal es un conjunto formado por un teclado, una pantalla y un interfaz


serie (típicamente RS232) que permite conectar ambos a un ordenador central o host. El
terminal en sí no posee ninguna capacidad de cálculo, se limita a sacar por pantalla la
información que recibe del host y a transmitir al host la información/comandos
introducida por teclado. Cada vez son menos frecuentes estos equipos. En su lugar se
utiliza un ordenador personal con un programa de emulación de terminal (como el
TELIX, el PROCOMM+, el HYPERTERMINAL de Windows95, etc.).
Un terminal puede ser Full-Duplex (FD) o Half-duplex (HD) en función de
como proceda para mostrar por pantalla las pulsaciones del teclado. Si la pantalla recibe
directamente del teclado el código a visualizar entonces es HD (ver dibujo). El modo
FD es algo más complejo pues requiere la participación del host. Consiste en que el host
haga eco de la información que recibe del teclado. De esta forma el código pulsado "va
y viene" al/del host antes de ser mostrado en pantalla (y de ahí que se denomine
terminal full-duplex).

La ventaja del método FD es que permite al usuario comprobar si ha habido


error de transmisión. Si el código en pantalla es el deseado, también es el que ha leído el
host. Esto no pasa en HD. Si en HD existiera un error de transmisión y el código de la
tecla pulsada no llega o llega mal al host, el usuario no puede, en principio, saberlo.

CONTROL DE FLUJO CON RS232

Existen dos posibilidades de control de flujo de datos con la RS232: Una


hardware mediante las líneas RTS/CTS (que ya se ha descrito) y otra software
XON/XOFF.
RTS/CTS: la línea CTS indica al PC si puede transmitir o no. En
aplicaciones como la conexión de un PC a una impresora serie
(dispositivo este normalmente bastante lento) la línea CTS está
gobernada por la impresora para impedir que el PC desborde su buffer
de entrada.

13
XON/XOFF: Otra posibilidad es usar el protocolo software XON / XOFF
que consiste en lo siguiente:
1. Cuando la impresora está dispuesta para recibir datos (buffer de
entrada vacío o casi vacío) transmite al PC la marca XON (XON y
XOFF son códigos ASCII predefinidos).
2. Si el PC transmite demasiado rápido para la impresora y el buffer
está próximo a llenarse, entonces se manda la marca XOFF.
3. El PC transmite sólo si la última marca recibida fue XON.
Dependiendo de las características de los equipos a conectar se puede hacer un
control de flujo RTS / CTS, XON / XOFF, ambos o ninguno.
Cuando se utilizan ambos, normalmente es porque hay que controlar dos buffers
de recepción, el del dispositivo físico (UART), que se hace por RTS / CTS, y el buffer
de la aplicación que está recibiendo los datos, que se hace con XON / XOFF.

14
+5V

+5V
10KΩ
20

1µF
Vcc
+ 2 18
A1 B1 10KΩ
3 17

Bus de salida
A2 B2

+5V

Bus de entrada
4 16
A3 B3

Terminal -
10KΩ

Terminal +
5 15
A4 B4 +5V
6 14

Bus de entrada / salida


A5 B5
7 13 10KΩ
A6 B6

Línea de Recepción de datos


8 12

Línea de Transmisión de datos

Línea de Activación del 74373


Línea de Activación del 74245
A7 B7
9 11 10KΩ
+5V A8 B8
+5V 19
CIRCUITO ELÉCTRICO

16 G
14
1
1 Vcc 10KΩ
Vdd DIR

+
C1+ 12 Tx 17
T1IN 6
1µF RA0 RB0/INT GND
R1OUT Rx 18
3 11 7 10
C1- RA1 RB1 10KΩ
10 1 8

+
4 RA2 RB2
C2+ T2IN 74245
1µF R2OUT 2 9
9 RA3 RB3
1 5 C2- 10KΩ
7 3 10
6 T2OUT +5V
2 Rx 14
RA4/TOCKI RB4
7 T1OUT R2IN 11
3 8
8 Tx 13
R1IN 10KΩ 4
RB5
4 12 +5V +5V
2
9 5 V+ MCLR RB6
6 13 20 10
V- RB7

+
16 3 Vcc Vcc
1µF 1µF OSCI1/CLKIN 2 1 18

+
DB9 15 4 D0 O0 IN0 OUT0
4MHz OSCI2/CLKOUT 5 2 17
GND 7
D1 O1 IN1 OUT1
Vss 6 3 16
15 33pF 8
D2 O2 IN2 OUT2
5
33pF 9 4 15
13
D3 O3 IN3 OUT3
MAX232 12 5 14
PIC16F84 D4 O4 IN4 OUT4
14
15 6 13
D5 O5 IN5 OUT5
17
16 7 12
D6 O6 IN6 OUT6
18
19 8 11
D7 O7 IN7 OUT7
11
LE
1
OE
GND GND
10 9

74373 ULN2803

15
El circuito se alimenta mediante una fuente de corriente continua de 5V, se
comunica al ordenador por el conector Cannon DB-9 explicado anteriormente.
Todos los integrados excepto el PIC16F84 tienen conectados entre el terminal
positivo y el negativo un condensador electrolítico para filtrar las posibles corrientes
parásitas, y que no afecten a su funcionamiento.
Las entradas son los interruptores que se pueden sustituir por cualquier sensor
que cuando se active haya entre sus terminales 5V para que el circuito reconozca un “1”
lógico, ya que el circuito utiliza los niveles de tensión TTL.
Las salidas son los relees que activan sus conmutadores, por lo que el circuito,
cuando una salida está desactivada, puede accionar un actuador y al seleccionar esta
misma salida puede encender otro actuador. Otra ventaja de ser relees es que la tensión
máxima es de 250V en alterna, 50V en continua y una corriente máxima de 10A por lo
que se pueden activar aparatos de potencia elevada.
Como todos los circuitos integrados funcionan con niveles lógicos TTL, y la
comunicación por el puerto serie utiliza sus propios niveles, hay que adaptarlos todos
para que los circuitos se puedan comunicar entre ellos, de esto se encarga el MAX232,
que transforma los niveles de RS232 a TTL.
Los condensadores que tiene conectados son los especificados por el fabricante
en el Datasheet (ver anexo I).
Los terminales que no están conectadas se pueden utilizar para la adaptación de
las líneas DSR y DTR pero no están conectadas por que no se utilizan en las rutinas del
microcontrolador.
Las líneas Tx y Rx se conectan a los terminales R1IN y T1OUT porque son los
especificados por el fabricante como terminales de entrada y salida respectivamente, sus
homólogos con tensiones TTL son el R1OUT y el T1IN respectivamente que se
conectan a los terminales del PIC programados para que funcionen como las línea Rx y
Tx, esto se explica en software del microcontrolador.
Como el 16F84 sólo tiene un puerto de 8 bits, el Puerto B, las entradas y salidas
se efectúan por él.
Cuando el circuito lee las entradas se activa el integrado 74245 (que es un bus
transmisor que se puede seleccionar el sentido de transmisión si de las puertas A a las B
o al contrario) por estar conectado al terminal RA2 del microcontrolador, cuando por
este terminal sale un “0” lógico se activa el 74245 leyendo los datos en sentido B a A,
como especifica el fabricante en el datasheet (ver anexo II), enviando los datos
recogidos por los sensores (en este caso interruptores) al 16F84 que, anteriormente, se
ha programado el puerto B como lectura; al recibir los datos los envía por la línea Tx al
ordenador. Se ha elegido este circuito por que cuando se envía la orden de escritura en
las salidas las entradas no intervengan ya que el integrado permanece en alta
impedancia (no dan ni un “0” lógico ni un “1”, el circuito lo reconoce como resistencias
muy elevadas).
Los interruptores de las entradas tienen conectados en paralelo una resistencia
para que cuando se pulse y cambie su valor, en el momento en que no está haciendo
contacto con ningún terminal, el 74245 reconozca un “0” lógico en vez de alta
impedancia.
Cuando, al microcontrolador, se le ordena que escriba en las salidas, este activa
el 74373 enviando un “1” lógico por el terminal RA3, que es el que está conectado al
LE del 74373, y después, manda el dato de los relees que hay que activar.
El 74373 es un bus en el que, si se desactiva el terminal LE, sus salidas
permanecen con el estado anterior y si se modifican las entradas, las salidas no varían,
ya que tiene un flip-flop tipo D en cada salida, esto se ve en la tabla del datasheet (ver

16
anexo III). El terminal OE está conectado a tierra para que el circuito funcione, si no las
salidas estarían en alta impedancia. Se ha elegido este chip para que cuando el
microcontrolador lea las entradas las salidas sigan activas o desactivadas como eligió el
usuario anteriormente.
Las salidas del 74373 están conectadas a las entradas del ULN2803, que es un
integrado compuesto por transistores en etapa Darlinton, lo que provoca que soporte una
elevada carga en su salida, esto quiere decir que el ULN2803 se utiliza para amplificar
los niveles de corriente de la salida del 74373 para que se puedan accionar los relees.
Este integrado soporta una carga de hasta 50V este dato está expuesto en el datasheet
(ver anexo IV).

17
PROGRAMA DEL MICROCONTROLADOR

Inicio En el programa principal se configura el


microcontrolador, programando los registros que
necesitamos.
El programa es el siguiente:
Espera
de la list p=16F84
orden
radix HEX
El dato recibido El dato recibido
es un 1 es un 0 En esta primera parte se elige que el
microcontrolador es el PIC16F84 y que los números se
Orden Orden
de de introducen en hexadecimal.
lectura escritura

Estado EQU 0x03


PA_TA EQU 0x05
Activación
del
Activación
del
PB_TB EQU 0x06
74245 74373 Intcon EQU 0x0B

Lectura Espera
Rxdreg EQU 0x0C ;registro de recepción
de las
entradas
del
dato
Txdreg EQU 0x0D ;registro de transmisión
Cont EQU 0x0E ;contador de bits
Transmitidos
Dlycnt EQU 0x0F ;contador de retraso
Envio Activación
del de los Aquí se han declarado los registro específicos que se
Dato relees
utilizan, además de los utilizados por el programa que son
designados por el programador:
Desactivación Desactivación
del del
74245 74373

• Estado: Se utilizará para seleccionar el banco en el que estamos, para


poder programar las puertas como entrada o como salida.

18
• Tris A: Es el registro utilizado para programar el puerto A como entrada
o como salida. En el programa se denomina PA_TA ya que si estamos en
el banco 0 este registro es el Puerto A y si estamos en el banco 1 es el
Tris A.

• Tris B: Lo mismo que el Tris A pero con el puerto B.

• Intcon: Es el encargado de la habilitación o deshabilitación de las


interrupciones.

Los demás registros son los específicos del programa, y están explicados al lado,
sus bits no modifican el funcionamiento del microcontrolador, son utilizados para
almacenar datos.
#define RXport PA_TA,1 ;llamamos RXport a PA1 configurado como
la señal RX
#define TXport PA_TA,0 ;llamamos TXport a PA0
configurado como la señal TX
#define SAport PA_TA,3 ;llamamos SAport a PA3
configurado como la señal que
activa las salidas
#define ENport PA_TA,2 ;llamamos ENport a PA2
configurado como la señal que
activa las entradas
Esto es la definición de los bits utilizados de la puerta A, se han nombrado
porque son muy utilizados y así hacer el programa más legible.
ORG 0

19
La instrucción ORG se utiliza para seleccionar en que dirección se empiece a
grabar el programa, aquí se ha seleccionado la dirección de memoria 0.
clrf Intcon ;prohibición de las interrupciones
bsf Estado,5 ;selección del banco 1
clrf PA_TA ;Programación del PA
clrf PB_TB ;Programación del PB
bcf Estado,5 ;selección del banco 0
Se prohíben todas las interrupciones porque no se necesitan en el programa.
Después, se programan los dos puertos como salidas.
bsf TXport ;Activación de Tx porque si no estaría
transmitiendo
La norma RS232 dice que cuando no transmite la línea Tx está a “1”, y que
cuando cambia de “1” a “0” es cuando recibe el bit de inicio.
bsf ENport ;reseteo de las salidas del circuito
clrf PB_TB
bsf SAport
bsf Estado,5 ;selección del banco 1
bsf RXport ;Programación de RX port como entrada
bcf Estado,5 ;selección del banco 0
bcf Saport
Lo primero que se hace el activar el 74373 para que reconozca los datos que se
le envían, después se envían todos los bits a cero para desactivar todos los relees.
Inicio
call RxD
btfss Rxdreg,0 ;Comprueba que orden se le ha mandado de
lectura o escritura
goto Salida
goto Entrada
Se declara la rutina de inicio, lo que hace es buscar la instrucción de lectura o
escritura y, una vez recibida, saltar al programa de escritura o lectura.
Salida
bsf SAport ;se activa el 74373
call RxD ;leemos dato del ordenador
bsf Estado,5 ;selección del banco 1
clrf PB_TB ;programación del PB como salidas
bcf Estado,5 ;selección del banco 0
movf Rxdreg,W ;Movemos el dato recibido a la salida
movwf PB_TB
borra
bcf SAport ;desactivación del 74373
btfsc SAport ;comprueba que se ha desactivado el 74373
goto borra
goto Inicio
Este es el programa de escritura, lo primero que hace es activar el 74373,
después recibe el byte programa las salidas y desactiva el 74373 para que no se
modifiquen hasta la próxima vez que reciba datos.
La subrutina “borra” comprueba que el 74373 no este activo, si estuviese activo
volvería a borrar el bit SAport.

20
Entrada
bcf Enport ;activación del 74245
clrf Txdreg ;reseteo del registro de transmisión
bsf Estado,5 ;selección del banco 1
movlw 0xFF ;programación de PB como entrada
movwf PB_TB
bcf Estado,5 ;selección del banco 0
movf PB_TB,W ;llevamos dato de PB al registro de
transmisión
movwf Txdreg
call TxD ;transmisión del dato
bsf ENport ;desactivación del 74245
bsf Estado,5 ;selección del banco 1
clrf PB_TB ;programación del PB como salidas
bcf Estado,5 ;selección del banco 0
clrf PB_TB ;reseteo de las salidas
goto Inicio
Lo primero que se hace es activar el 74245 para poder leer las entradas, después
resetea el registro de transmisión para evitar errores. Lo siguiente que hace es programar
el puerto B como entradas y leer el dato. Por último envía el dato y se desactiva el
74245. Se programa el puerto B otra vez en salida para evitar posibles errores al tenerlo
en entrada.
RxD
Espera
del Bit clrf Rxdreg ;reseto del registro de
de inicio
recepción
btfsc RXport ;comprueba que se ha
mandado el bit de inicio
Retardo
del Bit goto RxD ;si no se ha mandado espera
de inicio
a que lo manden
call Dly_Ini ;si se ha mandado hace el
retardo correspondiente al
Lectura
de un Byte bit de inicio
movlw 0x08 ;mueve el número de bits a
recibir al contador
movwf Cont
Rotar el
registro RxD_Bit
call Dly_bit ;hace el retardo del bit
btfsc RXport ;comprueba que dato se le
Retardo de
ha mandado
un bit bsf Rxdreg,7 ;si es un uno se activa el bit
7 del registro de recepción
btfss RXport
Decremento bcf Rxdreg,7 ;si es un cero se desactiva el
del
contador bit
Ha leido 8 Bits No ha leido 8 Bits decfsz Cont,W ;decrementa el contador y lo
guarda en W para rotar sólo
Regreso
a donde 6 veces
realizó
el salto rrf Rxdreg,f ;rota a la derecha el registro
de recepción si el resultado
anterior no es cero

21
decfsz Cont,f ;decrementa el contador para
ver si ha terminado
goto RxD_Bit ;va a leer otro bit
call Dly_bit ;hace el retardo del bit de stop
return ;regresa al salto
Esta es la rutina de recepción, en la primera parte, antes de la subrutina, lo único
que trata es el bit de Inicio, cuando la línea Rx cambia de “1” a “0” hace el retardo del
bit de inicio que es 1,5 veces mayor que el resto de los bits, ya que primero hace un
retardo de la mitad de un bit (el llamado Dly_Ini), carga el contador y vuelve a hacer un
retardo de bit Este retardo es mayor porque el ordenador espera la orden de que la línea
está libre, si no recibe contestación transcurrido este tiempo envía el dato.
La parte en la que rota el registro se hace para reducir el programa, ya que sólo
se modifica un bit y después se rota. Donde decrementa y lo guarda en el acumulador
(W), se hace porque si el resultado es cero, no tiene que rotar el registro porque sino
guardaría el bit 0 en el bit de acarreo (C) del registro estado.
TxD
Mando
del Bit movlw 0x08 ;mueve el número de bits a
de inicio
transmitir al contador
movwf Cont
Retardo
bcf TXport ;envía el bit de inicio
de un Bit
call Dly_bit ;hace el retardo del bit
Txd_Bit
btfsc Txdreg,0 ;comprueba si es un 0 o un 1 lo
Envio
de un Bit que hay que enviar
bsf TXport ;si es un 1 activa el puerto de
transmisión
Rotar el
registro
btfss Txdreg,0
bcf TXport ;si es un 0 desactiva el puerto
rrf Txdreg,f ;rota a la derecha el registro de
Retardo de
transmisión
un bit
call Dly_bit ;hace el retardo
decfsz Cont,f ;decrementa el contador de bits
goto Txd_Bit ;si no se han mandado todos los
Decremento
del
contador
bits va a seguir enviando
Ha leido 8 Bits No ha leido 8 Bits bsf TXport ;envió del bit de STOP
call Dly_bit
Retardo de
un bit
call Dly_bit ;se hacen dos retardos para
centrar tiempos
return
Regreso
a donde
En la rutina de transmisión no hay que enviar el bit de
realizó
el salto inicio más largo que los demás puesto que el ordenador está no
espera a que se le de la orden de puerto libre, recibe lo que va
llegando.
La rotación se efectúa por el mismo motivo que en la recepción, con lo que sólo
se chequea el bit 0 del registro de transmisión.

22
Carga
del Byte Dly_bit
de retardo
movlw 0x1D ;se hace un retardo de
833us que es el
tiempo que se tarda
Salto en transmitir un bit a
a la
rutina de 9600 baudios
retardo movwf Dlycnt
goto Dly ;salto a la rutina de
temorización
El salto de las rutinas del bit de inicio y de
decrementa
y compara bit normal a Dly se realiza sólo para reducir la
Ha termiando No ha termiando
programación puesto que en los dos casos es la
misma
Dly_Ini
movlw 0x08 ;retardo equivalente a
Regreso
mitad del tiempo
que tarda entre bit
bit
movwf Dlycnt
goto Dly ;salto a la rutina de temporización
Esta es la rutina del bit de inicio, como la anterior, carga el dato y después
salta.
Dly
decfsz Dlycnt,f ;decrementa el contador de temporización, si el resultado
es 0 salta
goto Dly ;si es 1 vuelve a decrementar
return ;si es 0 regresa a donde se hizo el salto
Esta es la rutina que realiza el retardo.
END
Esta instrucción se utiliza para indicar que el programa ha terminado.

23
PROGRAMA DE COMUNICACIÓN EN VISUAL BASIC
El programa hecho en Visual Basic se desarrolla gracias al componente
mscomm32.ocx que permite la comunicación entre máquinas de forma rápida y sencilla.
Los componentes se cargan en el menú
proyecto haciendo clic en componentes y
seleccionando el apropiado, en nuestro caso
Microsoft Comm Control 6.0, ahora aparece en la
barra de herramientas, se selecciona y se dibuja en
el form. Los componentes tienen una serie de
propiedades que se pueden modificar bien en la
ventana de propiedades o bien en el programa
poniendo el nombre elegido para el componente,
un punto y la propiedad, como cualquier otra
herramienta.
El form del proyecto es muy sencillo, tiene
una matriz de checkbox llamada salida para
activar los relees agrupados en un frame, las
matrices se crean dando el mismo nombre a una
herramienta y cambiando en propiedades la
opción index o bien dando a copiar y pegar. La opción index es el número de fila de la
matriz.
Se han elegido checkbox puesto que se pueden seleccionar más de uno.
Para indicar que entradas hay activas hay una matriz de label agrupada en un
frame que lo que hace es cambiar el color del fondo, a rojo cuando esta activada y en
negro cuando no lo esta, el cambio de color se hace con los dos labels que no pertenecen
a la matriz, el llamado negro y el rojo.
Por último, un botón que mande la orden de recibir.
La programación es la siguiente:
Option Explicit
Esta instrucción obliga a que las variables se hayan creado anteriormente.
Dim valor As Integer
Dim cont As Integer
Se declaran valor y cont como variables de números enteros.
Private Sub Form_Load()

MSComm1.CommPort = 1 'Al iniciar el programa


MSComm1.Settings = "9600,n,8,1" 'se cargan los parámetros
MSComm1.PortOpen = True 'y se abre el puerto 1

End Sub
Rutina que se ejecuta cuando se carga el form.
Private Sub Recibir_Click()

MSComm1.Output = "1" 'Manda la acción de leer

End Sub
Cuando se hace clic en el botón recibir se envía al microcontrolador la orden de
transmisión y el ordenador espera a que le llegen los datos.

24
Private Sub Salida_Click(Index As Integer)
Dim caracter As String

If Salida(Index).Value = 1 Then 'Chequea si el valor pulsado es activo o no


valor = valor + 2 ^ Index 'y lo transforma a decimal
Else
valor = valor - 2 ^ Index
End If
MSComm1.Output = "0" 'Manda la acción de escritura en PB del µC
caracter = Chr(valor) 'transforma el dato de decimal a ASCII
MSComm1.Output = carácter 'Envía el dato en ASCII

End Sub
Cuando se hace clic en cualquier elemento del la matriz de checkbox, lee el
valor de todos sus elementos, lo transforma a decimal y después a ACII para enviarlo en
este formato.
Se ha declarado la variable carácter como una matriz de caracteres, la diferencia
entre esta variable y las declaradas al principio del programa es que esta solo se puede
utilizar dentro de esta subrutina, y las otras en cualquier parte de la programación del
form. Si tuviésemos otros forms y necesitásemos una variable para todos habría que
crear un módulo y declarar una variable pública.
Private Sub MSComm1_OnComm()

Dim datoE() As Byte

Select Case MSComm1.CommEvent 'Espera a que el detector de tranmisión del


puerto se active
Case 2 'En el caso de que reciba un dato haga lo
de debajo
datoE() = MSComm1.Input 'recibe el dato
valor = datoE(0)
cont = 0
Do 'paso de decimal a binario activando los
cuadrados oportunos
If valor Mod 2 Then
Bit(cont).BackColor = rojo.BackColor
cont = cont + 1
Else
Bit(cont).BackColor = Negro.BackColor
cont = cont + 1
End If
valor = valor \ 2
Loop Until valor = 0
End Select

End Sub

25
Esta subrutina se ejecuta cuando hay algún cambio en el puerto, pueden ser de
distintos tipos:
Valor Evento
1 Enviar datos
2 Recibir datos
3 Cambio en la línea CTS
4 Cambio en la línea DSR
5 Cambio en la línea CD
6 Detección de llamada
7 Fin de fichero
1001 Señal de interrupción recibida
1002 Tiempo de espera de CTS sobrepasado
1003 Tiempo de espera de DSR sobrepasado
1004 Error de trama
1006 Pérdida de información en el puerto
1007 Tiempo de espera de CD sobrepasado
1008 Desbordamiento del buffer de recepción
1009 Error de paridad
1010 Buffer de transmisión lleno
1011 Error al recuperar el DCB para el puerto
En el programa sólo se ha elegido el valor 2 porque sólo nos interesa el caso en
el que recibe algún dato.
Se ha definido la variable DatoE como una matriz de un número no definido de
bytes, se ha escogido así aunque sólo se utiliza el elemento 0, porque el compilador
reconoce como una matriz de bytes la orden input del componente que estamos
utilizando.
La operación mod lo que hace es calcular el resto de una división, por eso si
existe, es que el bit es un uno y si no es un cero. Después se utiliza la división entera
que se define con la barra invertida (\) para que el número no tenga decimales.
Las opciones que aparecen el la ventana propiedades son:
• Nombre: El nombre que se le da al componente para acceder a él desde
la programación. En nuestro caso por defecto.
• CommPort: El puerto serie que se va a utilizar. En nuestro caso el 1.
• DTREnable: Habilitación o deshabilitación de la línea DTR. En nuestro
caso por defecto.
• EOFEnable: Habilitación o deshabilitación de la búsqueda del carácter
EOF (final del fichero). En nuestro caso por defecto.
• Handshacking: Selección del protocolo a utilizar puede ser: sin
protocolo, protocolo XON/XOFF, protocolo RTS/CTS o los dos últimos.
En nuestro caso sin protocolo.
• InBufferSize: tamaño del buffer de entrada. En nuestro caso por defecto.
• Index: Índice de la matriz. En nuestro caso por defecto.
• InputLen: Número de caracteres que la propiedad input lee del buffer de
recepción. En nuestro caso 0.
• InputMode: Como lee el uerto si reconociendo caracter o en binario. En
nuestro caso en binario.
• Left: Distancia hacia la izquierda.
• NullDiscard: Determina si se transmiten los caracteres nulos desde el
puerto al buffer de recepción. En nuestro caso por defecto.

26
• OutBufferSize: Tamaño del buffer de salida. En nuestro caso por
defecto.
• ParityReplace: Símbolo que aparece cuando no recibe bien un carácter.
• RThreshold: Número de caracteres a recibir. En nuestro caso 1 porque
si pusiésemos 0 deshabilitaríamos el evento 2.
• RTSEnable: Habilitación de la línea RTS. En nuestro caso por defecto.
• Settings: Propiedades del puerto, primero la velocidad, segundo la
paridad, tercero el número de bits por carácter y por último el número de
bits de STOP. En nuestro caso 9600,n,8,1.
• Sthreshold: Número de bits a transmitir. En nuestro caso 0, para
desactivar el evento 1.
• Tag: Contiene información para el programa.
• Top: Distancia a la parte superior.

27
CONCLUSIÓN
La asignatura me ha parecido muy interesante ya que me llamaba mucho la
atención el mundo de los PICs. En lo referente a la forma de impartirla, creo que es una
buena manera ya que se puede participar abiertamente en clase.
El trabajo, es tan complicado como uno quiera ya que lo elige él mismo por lo
que no me puedo quejar.
Mi trabajo me gusta ya que nunca había desarrollado nada comunicándolo al
ordenador por lo que he aprendido otras muchas cosas que no conciernen a los
microcontroladores como el manejo del puerto RS232, programación en Visual Basic
de este puerto, que no siempre funcionan bien los circuitos integrados comprados…

BIBLIOGRAFÍA
La mayoría de los datos referentes a los microcontroladores están sacados de los
apuntes de clase, y el resto de Internet sobretodo de foros como:
• http://www.codes-sources.com: foro francés sobre programación en
muchos lenguajes, con ejemplos de aplicaciones.
• http://miarroba.com: foro argentino de electrónica en general
Para la programación de Visual Basic he utilizado los apuntes de clase de la
asignatura programación visual, el libro “Enciclopedia de Microsoft Visual basic 6” de
Francisco Javier Ceballos de la editorial Ra-Ma y foros de internet como
www.portalvb.com.
Para el desarrollo del circuito lo que he utilizado es el catálogo de Farnell y los
datasheet descargados de www.alldatasheet.com, además de buscar ejemplos
construidos en Internet como el teclado controlado por el PIC16F84 de la página
www.viddata.com/keypad_hadware.htm.
Todas las búsquedas las he realizado desde www.google.es.

28
ANEXO I. DATASHEET DEL MAX232

29
30
31
32
33
34
35
ANEXO II. DATASHEET DEL 74245

36
37
38
39
40
41
ANEXO III. DATASHEET DEL 74373

42
43
44
45
46
47
48
49
ANEXO IV. DATASHEET DEL ULN2803

50
51
52
53
54
55
56
57
ANEXO V. CIRCUITO ELÉCTRICO DEL CONTROL POR VOZ

58

También podría gustarte