Sei sulla pagina 1di 15

Instituto Universitario Politécnico

Santiago Mariño
Extensión Maracay

CLASE ON LINE PARA LA EVALUACION DEL SEGUNDO CORTE

DOCENTE: CESPEDES ROSAIRA


44 2007-1 INGENIERIA
ESPECIALIDAD: ELECTRÓNICA TURNO: Nocturno
ASIGNATURA: 4401347-SISTEMAS DIGITALES II SECCIÓN: FL

DISEÑO DE DIGITALES II POR PUERTO SERIAL

El Puerto serial

El puerto serial (serial port). Puerto para conectar un dispositivo a una computadora. La
información se transmite por un solo conducto y por lo tanto bit a bit de forma serial. Por
esta razón los puertos seriales tradicionales son sumamente lentos y son usados para
conectar el mouse o el teclado. En cambio el puerto paralelo puede enviar múltiples bits en
forma paralela La mayoría de los puertos serie de las PC obedecen el estándar RS-232C o
el RS-422. Las computadoras tienen dos puertos seriales: COM1 y COM2 Actualmente los
puertos seriales modernos poseen grandes velocidades como el puerto USB, el firewire o el
SATA.

El puerto serie está considerado como una de las conexiones externas más básicas de un
ordenador, y ha sido una parte integral de la mayoría de ordenadores durante más de 20
años. Aunque muchos de los nuevos sistemas están prescindiendo de los puertos serie a
favor de las conexiones USB, muchos modems siguen usando un puerto serie, como
también los hacen algunas impresoras, PDAs y cámaras digitales. Pocos equipos tienen más
de dos puertos serie.

Esencialmente, proveen una conexión estándar y un protocolo para que puedas conectar
dispositivos como los nombrados anteriormente. Existen ciertas diferencias con respecto a
los puertos paralelos, los cuales intentaremos aclarar aquí.

Todos los sistemas operativos de los ordenadores que están es uso hoy en día, soportan los
puertos serie, ya que han estado en funcionamiento durante décadas. Los puertos paralelos
son una invención más reciente y son mucho más rápidos que los puertos serie. Los puertos
USB solo tienen unos pocos años de antigüedad, y con el tiempo seguramente reemplazarán
a los puertos serie y paralelo en los próximos años.
La conexión serie

La conexión externa de un puerto serie puede ser de nueve pines o de 25 pines.


Originalmente, el uso principal de un puerto serie era conectar un modem a un ordenador.
Un aspecto importante de las comunicaciones serie es el concepto del control de flujo. Esto
es la habilidad de un dispositivo de decirle a otro dispositivo que pare de enviar datos por
un rato. Los comandos RTS (Request to Send), CTS (Clear To Send), DTR (Data Terminal
Ready) y DSR (Data Set Ready) son utilizados para habilitar el control de flujo.

Con un ejemplo podemos ver mejor como funciona el control de flujo. Tienes un modem
que se comunica a 56 Kbps. La conexión serie entre tu ordenador y tu modem transmite a
115 Kbps, lo cual es el más de la mitad. Esto significa que tu modem está recibiendo más
datos viniendo de tu ordenador, que lo que puede transmitir por la línea de teléfono.
Incluso, aunque el modem tuviera un buffer de 128 K para almacenar datos, se quedaría sin
espacio en el buffer rápidamente y no sería capaz de funcionar adecuadamente con todo ese
flujo de datos.

Con control de flujo, el modem puede parar el flujo de datos de tu ordenador antes de que
desborde el buffer del modem. El ordenador está constantemente enviando una señal en el
pin RTS, y comprobando si hay señal en el pin CTS. Si no hay una respuesta del CTS, el
ordenador para de enviar datos, esperando al CTS para reanudar los datos. Esto permite al
modem mantener el flujo de datos de manera fluida.

Puerto serial, puerto COM, puerto de comunicaciones y puerto RS-232 ("Recomended


Standard-232"), hacen referencia al mismo puerto. Se le llama serial, porque permite el
envío de datos, uno detrás de otro, mientras que un paralelo se dedica a enviar los datos de
manera simultánea. La sigla COM es debido al término ("COMmunications"), que
traducido significa comunicaciones. Es un conector semitrapezoidal de 9 terminales, que
permite la transmisión de datos desde un dispositivo externo (periférico), hacia la
computadora; por ello es denominado puerto.

Compitió directamente en el mercado contra el puerto LPT.

Este puerto está siendo remplazado por el puerto USB para el uso en PDA´s y ratones, pero
aún viene integrado en la tarjeta principal (Motherboard) actual.

Figura 1. Puerto serial COM integrado


en la tarjeta principal Figura 2. Símbolo del puerto COM.
("motherboard").
Figura 3. Conector hembra serial del
cable del dispositivo.
CARACTERISTICAS DEL PUERTO SERIAL COM

 En el ámbito de la electrónica comercial se le denomina como conector DB9 ("D-


subminiature type B, 9 pin"), esto es D-subminiatura tipo B, con 9 pines.
 Se utilizaba principalmente para la conexión del ratón (Mouse), algunos tipos
antiguos de escáneres y actualmente para dispositivos como PDA´s ("Personal
Digital Assistant") ó asistentes personales digitales.
 Cada puerto, permite conectar solamente 1 dispositivo.
 Para conectar y desconectar los dispositivos, así como para que la computadora los
reconozca de manera correcta, es necesario apagar y reiniciar la computadora.

TERMINAL ELECTRICAS DEL PUERTO SERIAL

El puerto serial cuenta con 9 contactos tipo pin; se muestran las líneas eléctricas y su
descripción básica.

 1.- DCD (Detecta la portadora)

 2.- RxD (Recibe datos)

 3.- TxD (Transmite datos)

 4.- DTR (Terminal de datos listo)

 5.- SG (Tierra)

 6.- DSR (Equipo de datos listo)

 7.- RTS (Solicita enviar)


Figura 1. Esquema de las líneas del puerto serial COM.
 8.- CTS (Disponible para enviar)

 9.- RI (Indica llamada)

Líneas eléctricas del puerto serial COM.

Comunicación serial RS232

Este ejemplo muestra cómo utilizar el módulo EUSART del microcontrolador. La conexión
entre el microcontrolador y una PC se establece de acuerdo con el estándar de
comunicación RS-232. El programa funciona de la siguiente manera. Cada byte recibido
por medio de la comunicación serial se visualiza al utilizar los LEDs conectados al puerto
PORTB y después se devuelve automáticamente al transmisor. La manera más fácil es
comprobar el funcionamiento del dispositivo en la práctica al utilizar un programa estándar
de Windows denominado Hyper Terminal.

Comunicación serial

Nos dedicaremos a estudiarla comunicación serial asíncrona, la cual resulta muy útil
cuando necesitamos transmitir o recibir datos entre circuitos gobernados por
microcontrolador pic, o inclusive cuando deseamos establecer una comunicación entre
nuestros circuitos y nuestro pc.

Las instrucciones en pic Basic para comunicaciones serial, se rigen bajo el protocolo de
comunicación RS-232 el cual es una norma o estándar mundial que define los parámetros
en comunicación serial. Este protocolo define estándares como velocidad de transmisión en
baudios (300, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200 y
128000 bps) niveles de voltaje, distancia entre otros.

Es importante tomar en cuenta los voltaje entre la pc y el microcontrolador deben ser


acoplados, ya que el puerto serial de un pc los niveles de voltajes están comprendido entre
+12v y -12v, y en un microcontrolador los niveles de voltaje están comprendido entre 0v y
5v.

Estudiaremos las instrucciones serln y serout estas instrucciones son capaces de emular
una comunicación RS-232 en cualquier microcontroladorque no posea en su hardware
USART (Universal Synchronous/ asynchoronus Receiver/ transmitter).

Instrucción Serln: la instrucción Serln se encarga de recibir uno o más valores a través de
un pin específicos, usándolo el formato asíncrono estándar 8N1 que significa 8 bits de
datos, sin revisión de paridad y bit de parada (stop). Serln trabaja por defecto con un
oscilador de 4 MHZ, y para tener transferencia de datos segura con otros ocsiladores de
mayor valor, será necesario utilizar la directiva “define osc” al inicio de programa.

Ejemplo:

Define Osc 20 (para un oscilador de 20 mhz)

Sintaxis: serin pin modo {tiempo, etiqueta}, variable

Pin: en este campo definiremos cual el pin de entrada entre los puertos disponibles del
microcontrolador ejemplo: PortB. 1

MODO: Define la velocidad de transmisión en baudios.

Valor Numérico MODO Tasa de Bps


0 T2400 2400
1 T1200 1200
2 T9600 9600
3 T300 300
4 N2400 2400
5 N1200 1200
6 N9600 9600
7 N300 300

Tabla 1

Ejemplo:

Serin PortC. 1,0 variable Velocidad de transmisión: 2400 bps

Serin PortA. 1,1 variable Velocidad de transmisión: 1200 bps

Serin PortE. 0,2 variable Velocidad de transmisión: 9600 bps

Serin PortC. 4,3 variable Velocidad de transmisión: 300 bps

En el campo “modo” también puede ser definido como se muestra en la columna 2 de la


tabla 1. Incluyendo la librería MODEDEFS.BAS en el inicio del programa ( Include.
“modedefs.bas”), o utilizando directamente la instrucción “SYMBOL”como se muestra a
continuación:

Symbol T2400 = 0 ‘dato verdadero (driven true)

Symbol T1200 = 1 ‘dato verdadero (driven true)

Symbol T9600 = 2 ‘dato verdadero (driven true)

Symbol T300 = 3 ‘dato verdadero (driven true)

Symbol N2400 = 4 ‘dato Invertido (driven Inverted)

Symbol N1200 = 5 ‘dato Invertido (driven Inverted)

Symbol N9600 = 6 ‘dato Invertido (driven Inverted)

Symbol N300 = 7 ‘dato Invertido (driven Inverted)


Tiempo este campo es opcional al igual que el campo “etiqueta”, y su objetivo es establecer
un tiempo en milisegundo definido por el programador, el cual una vez vencido, hará que se
realice un salto a la “etiqueta”, también definida por el programador. Ejemplo:

Serin porta. 3, 2, 10, inicio, variable

Este ejemplo se interpreta de la siguiente forma: microcontrolador recibe los datos por el
pin RA3 A 9600 bps en formato de dato verdadero; si no se recibe datos durante 10
milisegundo, salta a la etiqueta “inicio” si recibe datos lo almacena en la variable y
continua con el programa.

Variable: en este campo se especifica la variable en el cual se desean almacenados los datos
recibidos. Ejemplo

Serin PortC. 7, 4, dato

Proyecto

En este proyecto vamos a transmitir datos desde un pc hacia un microcontrolador


PIC16F877, utilizando un circuito integrado MAX232 entre ambos dispositivos y donde los
datos enviados desde el pc será visualizado en una pantalla LCD.

Para enviar datos desde el pc hacia el microcontrolador, explicaremos como realizar un


pequeño proyecto en visual basic, en el cual haremos un teclado matricial 3x4, que enviara
un dato por cada tecla presionada a través del puerto serial COM1.

Se debe tomar en cuenta la polaridad de los condensadores de 1uF, ya que una polaridad
invertida afectara negativamente el funcionamiento del MAX232 .

Entre los pines 15 (Gnd) y 16 (Vcc) del MAX232 se debe conectar un condesador de 1uF
ya que la ausencia de este componente también afectara el funcionamiento del circuito
produciendo errores en la recepción de datos.

Procedimiento

Se conectara la pantalla LCD en el puerto a. el MAX232 se conectara en el pin RC6 TXCK


y RC7 RX DT va al pin del MAX232 T1IN Y R1OUT , Y al puerto serial van conectado
T1OUT Y RIIN DE MAX232 al puerto 2 RXD Y 3 TXD del puerto serial

Programación

‘Programación en pic basic pro

Define Osc 4 ‘ define el oscilador de 4mhz


Symbol T9600 = 2 ‘ dato verdadero (drive true)

Dato var Byte ‘ define la variable “dato ” como byte

Pause 500 ‘ pausa de 500 milisegundo para la LCD

LCDOut $fe, 1 ‘ limpia la LCD

Inicio:

Serin PORTC.7, T9600, dato ’ espera dato durante 1ms

LCDOUT $fe, 2, “dato:” ‘ espera datos durante 1ms

LCDOUT $fe, $CO, # DATO,”

GOTO inicio ‘ salta a inicio

End

Como velocidad de transmisión, hemos elegido utilizando 9600 bps, por el cual debemos
definir este valor en nuestro programa

La señales con las que actua el puerto del pc son digitales y la tensión con el trabaja es
+12v y -12v; adicionales resulta importante saber que la lógica es invertida es decir:

+12v lógica = “0”

-12v lógica = “1”

De ahí la importancia de saber cual será el formato que debemos utilizar a la hora de definir
los parámetros para la comunicación (dato verdadero, o de dato invertido).

En este caso y como se puede observa en la segunda línea de programa (symbol T9600 =
2), estaremos utilizando el formato “driven true”, debido a que el MAX232 tiene en sus
salidas un inversor para los datos proveniente del puerto serial del PC hacia el
microcontrolasdor y viceversa.

*** se debe bajar el programa visual basic 6.0 y usar tutorial para su manejo.
*****ejemplos bajados del internet se recomienda como guía y observar configuración del
diseño electrónico, el docente no se hace responsable de la programación y diseño solo se
debe usar como guía. ********
' Cabecera******************************************************
program programación con puerto serial ' Nombre de programa
dim i as byte ' Variable es de tipo byte
main: ' Inicio de programa
UART1_Init(19200) ' Inicializar el módulo USART
' 8 bits, tasa de baudios 19200, no hay bit de paridad...)
while 1 ' Bucle infinito
if UART1_Data_Ready() then ' Si se ha recibido un dato
i = UART1_Read() ' leerlo
UART1_Write(i) ' y enviarlo atrás
end if
wend

end. ' Final de programa


Para que este ejemplo funcione apropiadamente, es necesario marcar la librería UART en la
ventana Library Manager antes de compilar el programa:

 UART

EJEMPLO

Medición de temperatura por medio del sensor DS1820. Uso del protocolo ‘1-wire’...

La medición de temperatura es una de las tareas más frecuentes realizadas por el


microcontrolador. En este ejemplo, se utiliza un sensor DS1820 para medir. Es capaz de
medir en el rango de 55 °C a 125 °C con exactitud de 0.5 °C. Para transmitir los datos al
microcontrolador se utiliza un tipo especial de la comunicación serial denominado 1-wire.
Debido al hecho de que estos sensores son simples de utilizar y con una amplia gama de
aplicaciones, las funciones almacenadas en la librería One_Wire ponen en marcha y
gobiernan estos sensores.

Esta librería contiene en total tres funciones:

 Ow_Reset se utiliza para reiniciar el sensor;


 Ow_Read se utiliza para recibir los datos del sensor; y
 Ow_Write se utiliza para enviar los comandos al sensor.

Este ejemplo muestra la ventaja de utilizar librerías con las funciones listas para ser
utilizadas. Concretamente, no tiene que examinar la documentación proporcionada por el
fabricante para utilizar el sensor. Basta con copiar las funciones apropiadas en el programa.
Si le interesa saber cómo se declaran, basta con pulsar sobre alguna de ellas y seleccionar la
opción Help.

' Cabecera******************************************************
program diseño con puerto serial ' Nombre de programa

dim LCD_RS as sbit at RB4_bit ' Conexiones del módulo LCD


LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit ' Final de conexiones del módulo
LCD

' Ajustar la constante TEMP_RESOLUTION a la resolusión correspondiente


del sensor:
' DS18x20 utilizado: 18S20: 9 (ajustes por defecto pueden ser 9,10,11 o
12); 18B20: 12

const TEMP_RESOLUTION as byte = 9 ' Constante TEMP_RESOLUTION es de tipo


byte

dim text as char[9] ' Variable text es de tipo char


temp as word ' Variable temp es de tipo word
sub procedure Display_Temperature( dim temp2write as word )
const RES_SHIFT = TEMP_RESOLUTION - 8
dim temp_whole as byte ' Variable temp_whole rd fr tipo byte
temp_fraction as word ' Variable temp_fraction es de tipo
word
text = "000.0000"

if (temp2write and 0x8000) then ' Comprobar si la temperatura es


negativa
text[0] = "-"
temp2write = not temp2write + 1
end if

temp_whole = word(temp2write >> RES_SHIFT) ' Extraer temp_whole

if ( temp_whole div 100 ) then ' Convertir temp_whole en caracteres


text[0] = temp_whole div 100 + 48
else
text[0] = "0"
end if
text[1] = (temp_whole div 10) mod 10 + 48 ' Extraer dígito de
decenas
text[2] = temp_whole mod 10 + 48 ' Extraer dígito de
unidades
temp_fraction = word(temp2write << (4-RES_SHIFT)) ' Extraer
temp_fraction
temp_fraction = temp_fraction and 0x000F ' y convertirlo en
temp_fraction = temp_fraction * 625 ' unsigned int
text[4] = word(temp_fraction div 1000) + 48 ' Extraer dígito de
miles
text[5] = word((temp_fraction div 100) mod 10 + 48) ' Extraer dígito de
centenas
text[6] = word((temp_fraction div 10) mod 10 + 48) ' Extraer dígito de
decenas
text[7] = word(temp_fraction mod 10) + 48 ' Extraer dígito de
unidades
Lcd_Out(2, 5, text) ' Visualizar
temperatura en el Lcd

end sub

main: ' Inicio de programa


ANSEL = 0 ' Configurar pines analógicos como digitales de E/S
ANSELH = 0

text = "000.0000"
Lcd_Init() ' Inicializar el Lcd
Lcd_Cmd(_LCD_CLEAR) ' Borrar el Lcd
Lcd_Cmd(_LCD_CURSOR_OFF) ' Apagar el cursor
Lcd_Out(1, 1, " Temperature: ")

Lcd_Chr(2,13,178) ' Visualizar el carácter de grado, 'C' para centígrados


' Distintos visualizadores LCD tienen diferentes códigos de caracteres
para el grado
Lcd_Chr(2,14,"C") ' si ve la letra griega Alfa, introduzca 178 en vez de
223

while 1 ' Leer la temperatura en el bucle principal


Ow_Reset(PORTE, 2) ' Señal de reinicio de Onewire
Ow_Write(PORTE, 2, 0xCC) ' Ejecutar el comando SKIP_ROM
Ow_Write(PORTE, 2, 0x44) ' Ejecutar el comando CONVERT_T
Delay_us(120)

Ow_Reset(PORTE, 2)
Ow_Write(PORTE, 2, 0xCC) ' Ejecutar el comando SKIP_ROM
Ow_Write(PORTE, 2, 0xBE) ' Ejecutar el comando READ_SCRATCHPAD

temp = Ow_Read(PORTE, 2)
temp = (Ow_Read(PORTE, 2) << 8) + temp

Display_Temperature(temp) ' Formatear y visualizar el resultado en el


LCD

Delay_ms(520) ' Retardo de 520 ms


wend
end. ' Final de programa
Para que este ejemplo funcione apropiadamente, es necesario marcar las siguientes librerías
en la ventana Library Manager antes de compilar el programa:

 One_Wire
 LCD

EJEMPLO

Generación de sonido, librería de sonido...

Las señales de audio se utilizan con frecuencia cuando se necesita llamar la atención de
usuario para hacer algo, confirmar que alguno de los botones se ha pulsado, avisar que se
ha llegado hasta los valores mínimos o máximos etc. Pueden ser una simple señal de pitido
así como melodías de una duración más larga o más corta. En este ejemplo se muestra
cómo generar un sonido por medio de funciones que pertenecen a la librería Sound.

Además de estas funciones, la función Button que pertenece a la misma librería se utiliza
para probar los botones de presión.

' Cabecera******************************************************
program diseño para puerto serial ' Nombre de programa

sub procedure Tone1()


Sound_Play(659, 250) ' Frecuencia = 659Hz, duración = 250ms

end sub

sub procedure Tone2()


Sound_Play(698, 250) ' Frecuencia = 698Hz, duración = 250ms
end sub

sub procedure Tone3()


Sound_Play(784, 250) ' Frecuencia = 784Hz, duración = 250ms
end sub

sub procedure Melody() ' Tocar una melodía divertida 1


Tone1() Tone2() Tone3() Tone3()
Tone1() Tone2() Tone3() Tone3()
Tone1() Tone2() Tone3()
Tone1() Tone2() Tone3() Tone3()
Tone1() Tone2() Tone3()
Tone3() Tone3() Tone2() Tone2() Tone1()
end sub

sub procedure ToneA() ' Tonos utilizados en la función Melody2


Sound_Play( 880, 50)
end sub

sub procedure ToneC()


Sound_Play(1046, 50)
end sub

sub procedure ToneE()


Sound_Play(1318, 50)
end sub

sub procedure Melody2() ' Tocar Melody2


dim counter as byte
for counter = 9 to 1 step -1
ToneA()
ToneC()
ToneE()
next counter
end sub

main: ' Inicio de programa

ANSEL = 0 ' Configurar pines analógicos como digitales de E/S


ANSELH = 0

C1ON_bit = 0 ' Deshabilitar los comparadores


C2ON_bit = 0

TRISB = 0xF0 ' Configurar los pines RB7..RB4 como entradas y RB3 como
salida

Sound_Init(PORTD, 3)
Sound_Play(880, 5000)

while TRUE ' Bucle infinito


if (Button(PORTB,7,1,1)) then ' Si se presiona PORTB.7 tocar Tone1
Tone1()
while (RB7_bit <> 0)
nop ' Esperar que se suelte el botón
wend
end if

if (Button(PORTB,6,1,1)) then ' Si se presiona PORTB.6 tocar Tone1


Tone2()
while (RB6_bit <> 0)
nop ' Esperar que se suelte el botón
wend
end if

if (Button(PORTB,5,1,1)) then ' Si se presiona PORTB.5 tocar Tone1


Melody2()
while (RB5_bit <> 0)
nop ' Esperar que se suelte el botón
wend
end if

if (Button(PORTB,4,1,1)) then ' Si se presiona PORTB.4 tocar Tone1

Melody()
while (RB4_bit <> 0)
nop ' Esperar que se suelte el botón
wend
end if
wend

end. ' Final de programa

Para que este ejemplo funcione apropiadamente, es necesario marcar las siguientes librerías
en la ventana Library Manager antes de compilar el programa:

 Button
 Sound

************************************************************************

Potrebbero piacerti anche