23
OBJETIVO: Mostrar el armado de un circuito simple, mediante el puerto serial para encender y apagar los led´s por medio de un programa establecido en C++. MARCO TEÓRICO: Dev-C++ es un entorno de desarrollo para los lenguajes C y C++. Además del consabido editor, añade un compilador y otras utilidades menos evidentes que lo convierten en un gran aliado en la programación. Dev-C++ integra utilidades como un debugger, un explorador de clases y paquetes, un depurador de código y un asistente de proyecto. Todo ello junto al completo editor con realce de sintaxis y predictor de expresiones. La inclusión de bibliotecas estáticas y DLL, además de otras plantillas de Dev-C++, ayuda a que los primeros pasos en la programación sean más sencillos. FASES DE UN PROGRAMA EN DEV C++: 1.- Arranque de la aplicación 2.- Escritura del código fuente 3.- Compilación 4.- Montaje 5.- Ejecución 6.- Depuración En el arranque se da doble click en el icono de Dev C++, la escritura del código en C el cual codifica el programa (menú archivo nuevo código fuente). En la compilación el código fuente es comprobado sintácticamente por Dev C++ y traducido al lenguaje maquina ( aun no ejecutable y denominado código objeto). CONCEPTOS GENERALES DE PUERTOS Se dividen en 2 tipos: a) Puertos físicos de la computadora: son conectores integrados en tarjetas de expansión ó en la tarjeta principal “Tarjeta Madre" de la computadora; diseñados con formas y características electrónicas especiales, utilizados para interconectar una gran gama de dispositivos externos con la computadora, es decir, los periféricos.

Trabajo.u.8term

Embed Size (px)

Citation preview

OBJETIVO:

Mostrar el armado de un circuito simple, mediante el puerto serial para encender y apagar los led´s por medio de un programa establecido en C++.

MARCO TEÓRICO:

Dev-C++ es un entorno de desarrollo para los lenguajes C y C++. Además del consabido editor, añade un compilador y otras utilidades menos evidentes que lo convierten en un gran aliado en la programación.

Dev-C++ integra utilidades como un debugger, un explorador de clases y paquetes, un depurador de código y un asistente de proyecto. Todo ello junto al completo editor con realce de sintaxis y predictor de expresiones.

La inclusión de bibliotecas estáticas y DLL, además de otras plantillas de Dev-C++, ayuda a que los primeros pasos en la programación sean más sencillos.

FASES DE UN PROGRAMA EN DEV C++:

1.- Arranque de la aplicación

2.- Escritura del código fuente

3.- Compilación

4.- Montaje

5.- Ejecución

6.- Depuración

En el arranque se da doble click en el icono de Dev C++, la escritura del código en C el cual codifica el programa (menú archivo nuevo código fuente). En la compilación el código fuente es comprobado sintácticamente por Dev C++ y traducido al lenguaje maquina ( aun no ejecutable y denominado código objeto).

CONCEPTOS GENERALES DE PUERTOS

Se dividen en 2 tipos:

a) Puertos físicos de la computadora: son conectores integrados en tarjetas de expansión ó en la tarjeta principal “Tarjeta Madre" de la computadora; diseñados con formas y características electrónicas especiales, utilizados para interconectar una gran gama de dispositivos externos con la computadora, es decir, los periféricos. Varía la velocidad de transmisión de datos y la forma física del puerto acorde al estándar y al momento tecnológico.

Anteriormente los puertos venían integrados exclusivamente en tarjetas de expansión denominadas tarjetas controladoras, posteriormente se integraron en la tarjeta principal “Tarjeta Madre" y tales controladoras perdieron competencia en el mercado, pero actualmente se siguen comercializando sobre todo para servidores.

b) Puertos lógicos de la computadora: son puntos de acceso entre equipos para el uso de servicios y flujo de datos entre ellos, ejemplos el puerto 21 correspondiente al servicio FTP (permite el intercambio de archivos) ó el puerto 515 que está asociado con el servicio de impresión.

Los puertos generalmente tienen más de un uso en la computadora e inclusive en dispositivos que no se conectan directamente al equipo, por lo que no hay una clasificación estricta, sin embargo se pueden dividir en 7 segmentos básicos:

1) Puertos de uso general: son aquellos que se utilizan para conectar diversos dispositivos independientemente de sus funciones (impresoras, reproductores MP3, bocinas, pantallas LCD, ratones (Mouse), PDA, etc.)

Puerto eSATAPuerto USBPuerto FireWire ó IEEE1394Puerto SCSIPuerto paralelo / LPTxPuerto serial / COMx

2) Puertos para impresoras: soportan solamente la conexión de impresoras y algunos Plotter.

Puerto Centronics para impresora

Nombre de Servicio

Número de puerto

Protocolo Alias

SMTP* 25 TCP*** Mail

Nameserver 42 UDP**** Name

FTP** 21 TCP -

Printer 515 TCP Spooler

USO DE INSTRUCCIONES PARA EL MANEJO DEL PUERTO PARALELO

Distinguimos dos elementos: la parte transmisora y la parte receptora

La parte transmisora coloca la información en las líneas de datos e informa a la parte receptora que la información (los datos) está disponible; entonces la parte receptora lee la información en las líneas de datos e informa a la parte transmisora que ha tomado la información (los datos).

Aquí en la transmisión ambas partes sincronizan su respectivo acceso a las líneas de datos, el receptor no podrá leer las líneas de datos hasta que la parte transmisora no se lo permita o indique y de la misma forma la parte transmisora no colocará nueva información en las líneas de datos hasta que la parte receptora quite la información y le indique a la parte transmisora que ya ha tomado los datos y enviado a otro punto, a ésta coordinación de operaciones se le llama acuerdo ó entendimiento.

Los sistemas operativos basados en DOS y compatibles gestionan las interfaces de puerto paralelo con los nombres LPT1, LPT2 y así sucesivamente, Unix en cambio los nombra como /dev/lp0, /dev/lp1, y demás. Las direcciones base de los dos primeros puertos son: LPT1 = 0x378 Y LPT2 = 0x278.

Nombre del puerto Interrupción # Dirección de inicio E/S Dirección final de E/S

LPT1 IRQ 7 0x378 0x37f

LPT2 IRQ 5 0x278 0x27f

*SMTP: Simple Mail Transfer Protocol ó protocolo de transferencia simple de correo, permite el intercambio de texto por correo electrónico.** FTP: File Transfer Protocol ó protocolo de transferencia de archivos, permite la carga de archivos hacia y desde un equipo a otro.*** TCP: protocolo de control de transmisión, permite el flujo de datos entre los equipos conectados en una red.**** UDP: protocolo de datagramas de usuario, permite el intercambio de datagramas ó paquetes de datos con suficiente información sobre el origen, destino y contenido, sin que se haya realizado una conexión previa.

LPT3 IRQ 7 0x3bc 0x3bf

COMUNICACIÓN CON EL PUERTO PARALELO EN LENGUAJE C.

El lenguaje C permite tanto la lectura como la escritura de los puertos paralelo. Para leer el puerto existen las instrucciones inport e inportb, mientras que para escribir están las instrucciones outport y outportb. La sintaxis de estas instrucciones es la siguiente:

unsigned inport (unsigned portid); unsigned char inportb (unsigned portid); void outport (unsigned portid, unsigned value); void outportb (unsigned portid, unsigned char value);

Ejemplo: Palabra = inport(puerto); outport (puerto, Palabra); Byte = inportb (puerto); outportb (puerto, Byte);

Las instrucciones que terminan en b ese refieren a la lectura o escritura de un byte, mientras que las que no terminan en esta letra se refieren a una palabra (dos byte). La variable puerto debe contener la dirección de memoria del puerto paralelo, este valor puede ser 378h, 3BCh ó 278h. Por último no hay que olvidar colocar la siguiente directiva del preprocesador que le indica al C que se usarán las funciones inport, outport, inportb u outportb, declaradas en el archivo dos.h. #include <dos.h>

PUERTO SERIE

Un puerto serie o puerto serial es una interfaz de comunicaciones de datos digitales, frecuentemente utilizado por computadoras y periféricos, donde la información es transmitida bit a bit enviando un solo bit a la vez, en contraste con el puerto paralelo que envía varios bits simultáneamente.1 La comparación entre la transmisión en serie y en paralelo se puede explicar usando una analogía con las carreteras. Una carretera tradicional de un sólo carril por sentido sería como la transmisión en serie y una autovía con varios carriles por sentido sería la transmisión en paralelo, siendo los vehículos los bits que circulan por el cable.

En tecnologías básicas, un puerto serie es una interfaz física de comunicación en serie a través de la cual

se transfiere información mandando o recibiendo un bit. A lo largo de la mayor parte de la historia de

los ordenadores, la transferencia de datos a través de los puertos de serie ha sido generalizada. Se ha

usado y sigue usándose para conectar los ordenadores a dispositivos como terminales o módems. Los

ratones, teclados, y otros periféricos también se conectaban de esta forma.

Mientras que otras interfaces como Ethernet, FireWire, y USB mandaban datos como un flujo en serie,

el término "puerto serie" normalmente identifica el hardware más o menos conforme al estándar RS-

232, diseñado para interactuar con un módem o con un dispositivo de comunicación similar.

Actualmente en la mayoría de los periféricos serie, la interfaz USB ha reemplazado al puerto serie por

ser más rápida. La mayor parte de los ordenadores están conectados a dispositivos externos a través de

USB y, a menudo, ni siquiera llegan a tener un puerto serie.

El puerto serie se elimina para reducir los costes y se considera que es un puerto heredado y obsoleto.

Sin embargo, los puertos serie todavía se encuentran en sistemas de automatización industrial y algunos

productos industriales y de consumo.

Los dispositivos de redes, como los enrutadores y switches, a menudo tienen puertos serie para

modificar su configuración. Los puertos serie se usan frecuentemente en estas áreas porque son

sencillos, baratos y permiten la interoperabilidad entre dispositivos. La desventaja es que la

configuración de las conexiones serie requiere, en la mayoría de los casos, un conocimiento avanzado

por parte del usuario y el uso de comandos complejos si la implementación no es adecuada.

PUERTO SERIE ASINCRÓNICO

A través de este tipo de puerto la comunicación se establece usando un protocolo de transmisión asíncrono. En este caso, se envía en primer lugar una señal inicial anterior al primer bit de cada byte, carácter o palabra codificada. Una vez enviado el código correspondiente, se envía inmediatamente una señal de stop después de cada palabra codificada.

La señal de inicio (start) sirve para preparar al mecanismo de recepción o receptor, la llegada y registro de un símbolo, mientras que la señal de stop sirve para predisponer al mecanismo de recepción para que tome un descanso y se prepare para la recepción del nuevo símbolo.

La típica transmisión start-stop es la que se usa en la transmisión de códigos ASCII a través del puerto RS-232, como la que se establece en las operaciones con teletipos.

El puerto serie RS-232 (también conocido como COM) es del tipo asincrónico, utiliza cableado simple desde 3 hilos hasta 25 y conecta computadoras o microcontroladores a todo tipo de periféricos, desde terminales a impresoras y módems pasando por mouses.

La interfaz entre el RS-232 y el microprocesador generalmente se realiza mediante el chip UART 8250 (computadoras de 8 y 16 bits, PC XT) o el 16550 (IBM Personal Computer/AT y posteriores).

El RS-232 original tenía un conector tipo DB-25, sin embargo la mayoría de dichos pines no se utilizaban, por lo que IBM estandarizó con su gama IBM Personal System/2 el uso del conector DB-9 (ya introducido en el AT) que se usaba, de manera mayoritaria en computadoras. Sin embargo, a excepción del mouse,

el resto de periféricos solían presentar el DB-25La norma RS-422, similar al RS-232, es un estándar utilizado en el ámbito industria.

LOS LED´S.

LED es la abreviatura en lengua inglesa para Light Emitting Diode, que en su traducción al español correspondería a Diodo Emisor de Luz.

Un LED consiste en un dispositivo que en su interior contiene un material semiconductor que al aplicarle una pequeña corriente eléctrica produce luz. La luz emitida por este dispositivo es de un determinado color que no produce calor, por lo tanto, no se presenta aumento de temperatura como si ocurre con muchos de los dispositivos comunes emisores de luz.

El color que adquiera la luz emitida por este dispositivo dependerá de los materiales utilizados en la fabricación de este. En realidad dependerá del material semiconductor, que dará una luz que puede ir entre el ultravioleta y el infrarrojo, incluyendo en el medio toda la gama de colores visibles al ojo humano.

PIC

El sistema se comunica por medio del puerto serie, enviando información hacia un Pic.

El Pic es un dispositivo electrónico, el cual está programado, para enviar y recibir información.

MATERIALES

8 leds de diferentes colores

1 Protoboard

2 Conector macho (paralelo y serial)

1 resistencias de 1 [k?]

Cables de cobre de diferentes colores

C++

2 capacitores

1 potenciómetro

Compuerta TLL

PIC 4017

555

PROCEDIMIENTO

Es recomendable tener unos cuantos leds más y unas resistencias. Con esos antecedentes ahora vamos a explicar los detalles del circuito:

El Circuito

Donde dice "Pin puerto paralelo" puede ser cualquier Pin del 2 al 9. No olvidar hacer una conexión al pin 25 que es tierra

El circuito consiste en un led con una resistencia, la resistencia se usa para

limitar la intensidad y no pedir más de la que el puerto paralelo es capaz de dar (5 mA). Cuando se active el pin el led se encenderá.

En este proyecto lo que se quiere mostrar es como, con un simple circuito, se puede controlar mediante la computadora una fila de LEDs los que se van a encender en una secuencia que nosotros vamos a controlar con un pequeño programa escrito en el lenguaje de programación Turbo C++.

El circuito que se va armar será montado sobre una plaqueta, la cual conduce la corriente eléctrica, llamada "protoboard".

Como nuestro objetivo es controlar los diodos LEDs con la computadora, esto es encenderlos y apagarlos según como queramos. Los LEDs son diodos que tienen la capacidad de emitir luz cuando circula una corriente por ellos. Esta corriente debe ser del orden de los 10 mA (miliampers). Para limitar la corriente que pasa por los LEDs se usan las resistencias que se oponen al paso de ella.

Para controlar un circuito externo con la computadora se usará el puerto paralelo de ella, para conectar el puerto con el circuito se necesitará el cable paralelo o conector DB-25.

El paso siguiente es soldar cable fino UTP a los pines internos del conector. Como los pines están numerados del número 1 al 25, solo usaremos los pines numerados del 2 al 9, también se tiene que soldar un cable al pin 25 (que es el pin de masa o tierra eléctrica) para tener una descarga a tierra común, para nuestro circuito y la computadora.

Una vez construido el cable se lo puede conectar al protoboard.

Solo se deben usar cinco entradas y cinco salidas, ya que son solo cinco LEDs los que controlamos.

Las cinco salidas están conectadas por medio de una resistencia limitadora de corriente a una LED cada una. Estas resistencias son de un valor de 1[k?] y permite que circule una corriente de 10 mA (miliampere) por cada diodo.

La siguiente imagen puede ayudar a apreciar mejor la conexión del circuito:

*Nota: A fin de que todo funcione bien se recomienda primero solo armar en el circuito con un solo led a fin de que el programa no sea engorroso y fin de verificar el armado de los circuitos y de verificar que la estructura de control este bien hecho.

El siguiente paso es escribir las directivas y comandos en el programa:

PROGRAMA DEL CIRCUITO CON PUERTO PARALELO

#include <stdio.h>

#include <conio.h>

#include <windows.h>

typedef short _stdcall (*inpfuncPtr)(short portaddr);

typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)

{

HINSTANCE hLib;

inpfuncPtr inp32;

oupfuncPtr oup32;

/* Load the library */

hLib = LoadLibrary("inpout32.dll");

if (hLib == NULL) {

printf("LoadLibrary Failed.\n");

getchar();

return -1;

}

oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

if (oup32 == NULL) {

printf("GetProcAddress for Oup32 Failed.\n");

getchar();

return -1;

}

/***** Write the data register */

(oup32)(0x378,128);

sleep(500);

(oup32)(0x378,64);

sleep(500);

(oup32)(0x378,32);

sleep(500);

(oup32)(0x378,16);

sleep(500);

(oup32)(0x378, 8);

sleep(500);

(oup32)(0x378,4);

sleep(500);

(oup32)(0x378,2);

sleep(500);

(oup32)(0x378,1);

sleep(500);

(oup32)(0x378,0);

FreeLibrary(hLib);

getchar();

system("pause");

return 0;}

Compilación del programa para el puerto paralelo.

PROCEDIMIENTO DE CIRCUITO EN SERIE

Se monta el circuito, ya con el pic 4017, y 555, resistencia, potenciómetro y capacitores, se realiza el programa con las librerías adecuadas la conexión en serie.

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <commdlg.h>

#include <windef.h>

#include <iostream>

using namespace std;

#define READ_TIMEOUT 500

void main()

{

int n;

int k;

cout << "0=Apagar la secuencia de leds - 1= Para Mantener Prendidala secuencia" << endl;

cin >> k;

if(k==0)

{

TCHAR* currentuser = L"COM1";

LPCWSTR *lstr = (LPCWSTR *)(&currentuser);

HANDLE hComm;

DWORD dwRead;

OVERLAPPED osReader = {0};

DWORD dwRes;

hComm = CreateFile(

*lstr,

GENERIC_READ | GENERIC_WRITE,

0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);

if (hComm == INVALID_HANDLE_VALUE) printf("*Error opening port\n");

else printf("*Port opened succesfully\n");

osReader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

if (osReader.hEvent == NULL) printf("*Error creating overlapped event; abort\n");

CloseHandle(osReader.hEvent);

//wait for user

int a;

cout << "Presione 1 para volver a encender la secuencia " << endl;

scanf("%d", &a);

}

else if (k==1)

{

cout << " La secuencia Sigue Prendida " << endl;

Compilacion del programa ejecucion del programa

Circuito

PROGRAMA EN GRAFICO: “LEDS”

#include <winbgim.h>

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <math.h>

#include <dos.h>

#include <cstdio>

#include <iostream>

using namespace std;

int h=0;

int main()

{

int monitor=DETECT;

int modo;

initgraph(&monitor, &modo, "");

do{

delay(400);

for(h=0; h<=40; h=h+40)

{

cleardevice();

setcolor(YELLOW);{

circle(50+h, 50, 20);

setfillstyle(1, YELLOW);

floodfill(50+h, 50, YELLOW);

delay(400);

}

}

delay(400);

for(h=0; h<=120; h=h+40)

{

cleardevice();

setcolor(GREEN);{

circle(130+h, 50, 20);

setfillstyle(1, GREEN);

floodfill(130+h, 50, GREEN);

delay(400);

}

}

delay(400);

for(h=0; h<=40; h=h+40)

{

cleardevice();

setcolor(RED);{

circle(290+h, 50, 20);

setfillstyle(1, RED);

floodfill(290+h, 50, RED);

delay(400);}

}

}while(h!=2);

getch();

closegraph();

}

Compilacion del grafico

Ejecucion del programa

I N S T I T U T O T E C N O L O G I C O D E P I E D R A S N E G R A S

P R O G R A M A C I O N B A S I C A

U N I D A D V I I I : ” P U E R T O S ” .

C A T E D R A T I C O : I N G . HECTOR CARLOS VALEDEZ MOYEDA

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

E Q U I P O # 2 :

B R E N D A I V E T T E H E R N Á N D E Z M T Z .J A Z M I N V E R A G U E V A R AO M A R A L E J A N D R O B O R R E G OC R I S T I A N O R L A N D O M A R T I N E Z I B A R R AF R A N C O M O N D R A G O N E S Q U I V E LJ O S E D A N I E L R A M O S A L V A R A D O

P I E D R A S N E G R A S C O A H U I L A A , 0 7 D E J U L I O D E 2 0 1 3 .