# Prender led por Puerto Serial



## clay (May 16, 2010)

Hola,

Disculpen que pregunte esto, ya que he visto varios hilos de conversacion con referencia al puerto serial, pero el problema es que estoy encontrando programas bastante elaborados y algo complicados de entender para alguien no sabe mucho sobre la comunicacion de datos por el puerto serie.

Bueno, yo comumenmente uso el puerto paralelo y como sabran es bastante sencillo pasar datos por ahi, con un simple outport(registro, dato) (en Turbo C++) ya puedes prender un led, sin ningun circuito adicional.

Ahora, mi intencion es pasar a dominar el puerto usb, pero supongo que primero he de pasar a comprender el puerto serial, y buscando en la web encontré muchas formas -creo.

Encontré bastante teoria pero no me termina de ser muy claro todo esto, es decir, me gustaria encontrar una comparacion con el puerto paralelo, como para que sirve cada pin del puerto serial (el de 9 pines) y como simplemente prender un led desde un lenguaje de programacion X. Es decir, se usa alguna funcion tipo outport()? o alguna direccion de registro que haya que pasar como argumento?. Me gustaria me pusieran un ejemplo, lo mas simple que se pueda para poder comenzar a entender este tipo de transmision de datos.

Disculpen por toda la verborrea inicial, pero creo que a veces se molestan porque se tocan temas ya tratados.

Saludos.


----------



## masterk (May 16, 2010)

simplemente asi, outportb(0x3fc,1) con esto encenderas el pin DTR del puerto serie si mal no recuerdo es el pin 4 y para encender el RST outportb(0x3fc,2) que creo que es el pin 7 y para apagarlo simplmente envias un 0, esto por supuesto en C y no en c++ por que la funcion outportb ya no existe pero se puede utilizar el API de Windows.

por si las moscas 0x3FC es la direccion para el manejo de los bit de control de flujo


ojo!!!!!!!!
la salida de los bits en un inicio se encuentra alrededor de -9v
cuando envias un 1 pasa alrededor de +9v esto es por que maneja el protocolo RS232


----------



## cosmefulanito04 (May 16, 2010)

Para resumir, el puerto paralelo ya no sirve para nada, es lento, necesitas muchos pines, y poco practico.

El puerto serie, si bien es viejo, la comunicacion se realiza por cables Rx y Tx, y despues tenes varios pines que son de control (para empezar, no le des bola y usa el protocolo rs232). Entonces tu cable debera ser este:

Dispositivo 1 - Dispositivo 2
Tx1 -> Rx2
Rx1 <- Tx2
Gnd <-> Gnd

Es importante no equivocarse al conectar Tx1 con Tx2, ya que podrias quemar el puerto. Si no me equivoco en Pc el pin 2 es Rx y el pin 3 Tx, pero verificalo en la wiki.

Ahora, ya teniendo el cable, tendrias que tener una nocion de como funciona el puerto. 

Basicamente el puerto manda 8 bits (si lo configuraste de esa forma) en forma serie, osea manda el 1er bit, luego el 2do, y asi hasta el ultimo. En el medio podes tener tambien bits de paridad y los bits de stop que le indican al puerto cuando termino de enviar un dato. 

Supongamos que deseamos encender un solo led, usando el Tx1 podriamos mandarle la señal de encendido, pero para que este siempre encendido los 8 bits que mandamos tienen que estar en 1, sino el led se prendera y apagara constantemente (dependiendo de la velocidad, tal vez ni lo veas). Entonces, para no cargar el Tx1, se podria usar un transistor o una buffer para suministrarle la corriente al led y usar una fuente de 5 v:

Tx1 --> Rlim-Base -> Base Q1
5v -> Led -> Rlim-led -> Colector Q1
Emisor Q1 -> Gnd

En este ej. use un transistor npn. Con este simple circuito podrias encender un led usando el puerto serie. Cuando consigas hacerlo, podrias despues usar un shifter para encender mas leds o activar un rele, o usar uC para realizar algo.


----------



## antiworldx (May 16, 2010)

Ya te dieron un poco de teoria de conexiones...
Te recomiendo que uses el max232 para recibir las señales del serial.
Este chip usa 5V, internamente aumenta el voltaje para enviar o lo disminuye al recibir. El chip hace todo, tu solo envias los datos normalmente de algun microcontrolador y los recibes. El diagrama de conexion del chip viene en el mismo datasheet. Solo usa 4 capacitores de 1uF si no recuerdo para funcionar.
La forma correcta es usando algun microcontrolador que te reciba los datos... Que microcontrolador sabes usar???'


----------



## PrincipianteForever (Ago 27, 2010)

Hola a todos, como mi propio nombre indica soy un principiante en todo esto.

Mi pregunta sería si puedo encender y apagar un LED directamente desde el pc con un programa en C# mediante un puerto serie o un puerto paralelo y ya de paso si se pudiera mediante puerto USB sin necesidad de utilizar un PIC, vamos usando los componentes mas sencillos.

Tiene que ser lo mas sencillo posible, vamos mandar una orden de que se encienda un LED y otra para que se apague.

Lo necesito urgente para el trabajo, la verdad es que he leido cosas pero estoy un poco confuso,si pudieran pasarme el programa en C#, el esquema de montaje del hardware o fotos y demas para ver como se hace y no morir en el intento jeje.

Muchas gracias a todos y siento molestarles para tan poca cosa.

Un saludo.


----------



## Scooter (Ago 27, 2010)

Si no te molestia, me acerco, te lo monto, te instalo el programa y te pago una caña...
Se supone que los foros están para ayudar no para dar soluciones a la carta. 

En serio, creo es mejor el "hágaselo usted mismo" en el buen sentido, claro:  PRIMER PASO
El cuarto enlace el de vb-mundo parece que promete. 
Edición: Se ve que "gugel" cada vez lo saca en un orden, me refiero a esta página


----------



## PrincipianteForever (Ago 27, 2010)

Lo primero es pedirte disculpas, sabía yo que iba a molestar con mi petición y decirte que llevas razón.

Pero soy nuevo y todo me parece un mundo y me estan presionando mucho en trabajo y si no consigo hacer esto aunque parezca mu tonto puede que me despidan y tu tranquilo que la caña en todo caso te la pagaría yo.

Mira información si que tengo, es más el problema es que tengo demasiada!!

Me explico un poco, estamos diseñando un prototipo que funciona con smartcard para arrancarlo e identificar al usuario y en este prototipo van muchos accesorios y uno de ellos es simplemente un hardware que encienda un led como señal de aviso.

El aparato solo tiene puertos de usb, pero como he leido que es más dificil y complicado pues nada sería comprar un adaptador de cable usb a puerto serie o paralelo.

He visto que en paralelo se puede hacer con un esquema como este...







El mas sencillo esquema y sin pics ni nada, pero hay gente que dice que es peligroso y que no se puede hacer tan directo.

En serie he visto que se puede hacer así....

http://delphi.jmrds.com/?q=node/8

Y mas de lo mismo no se si se puede hacer directamente.

Otro problema sería que en mi trabajo no tengo nada para hacer placas y demás, por lo que si pido los componentes a no ser que los monte en un protoboard no podría realizarlo y quedaría un poco cutre, ¿¿no habría ningún hardware que se venda ya hecho?? para la programación de los puertos en C# ya me he informado un poco de como hacerlo con la librería Inport32.dll.

Muchas gracias y Scooter te agradezco que me hayas respondido.

Para el puerto paralelo no lo he puesto bien.
Quería poner esto para que se viera:

http://www.taringa.net/posts/apuntes-y-monografias/1533724/Encender-leds-con-el-puerto-paralelo.html


----------



## Scooter (Ago 27, 2010)

No me ha sentado mal, solo que me parecía demasiado "a la carta" la petición.
Si tienes que comprar un adaptador compra uno de puerto paralelo que te dará mas juego.
Si quieres mas corriente en el led puedes unir dos o mas salidas que iluminen el mismo led, para un led y una resistencia no te hace falta ni protoboard ni nada, los puedes pinchar el el "bujerico" del conector.


----------



## lubeck (Ago 27, 2010)

> para la programación de los puertos en C# ya me he informado un poco de como hacerlo con la librería Inport32.dll.



Tiene que ser C#, en VB solo basta un boton (literalmente)
y por paralelo un led y una resistencia...


----------



## PrincipianteForever (Ago 27, 2010)

Gracias a todosss pero me acaban de cambiar el proyecto una barbaridad.

Ahora una vez que ya lo tenía solucionado o mejor dicho pensado, quieren cubrirse las espaldas y dejarlo todo mas abierto, me explico hacer un dispositivo que se maneje por el ordenador con C# y al que ademas de encender un LED (ahora quieren una bombilla) pues que el día de mañana se pueda conectar una camara o lo que sea.

Lo que he pensado de primeras sería con un transistor que se maneje con el pc alimentar un relé y este ya que alimente cosas mayores, pero claro como quieren trabajar ya con la red a 220V pues ya hay que tener un transformador que me coja la tension de 220V y me la saque a 12V de continua y algún que otro fusible......

Uuuffff ahora si que no se por donde buscar ni que hacer...me hechan segurooooo jeje.

Bueno buscaré más cosas por el foro(popr lo que no os asusteis si me veis por otros lados diciendo disparates) y si alguien me puede ayudar desde aquí se lo agradecería mucho, en serio.

Un saludoo


----------



## Scooter (Ago 27, 2010)

Pon un moc 3020 y un triac


----------



## PrincipianteForever (Ago 30, 2010)

Hola Scoter, muchas gracias por tu respuesta eso he visto en una pagina.

Te paso el enlace:

http://www.pablin.com.ar/electron/circuito/computer/triac220/

Pero tengo dudas...com por ejemplo¿es peligroso el montaje?¿lo puedo montar en una placa board para probar si funciona?¿necesitaría algún tipo de protección,fusibles,diferenciales o lo que sea?


----------



## Scooter (Ago 30, 2010)

Por el lado del led no es peligroso
Por el otro lado si; hay 230V
Deberías de poner un fusible, diferenciales etc ya hay en tu casa, además los diferenciales no te van a proteger de un contacto directo.


----------



## PrincipianteForever (Sep 1, 2010)

Hola a todos estoy decidido a montar el circuito antes mencionado de la pagina de pablin.

Pero encesito que el circuito funcione como un interruptor, porque parece ser que cuando le mando un impulso al MOC 3041 desde mi pc al puerto paralelo se enciende su led y ya funciona el circuito, pero mi pregunta es:

Si dejo de mandarle pulsos al MOC3041 ¿se apaga el led y ya el circuito no funciona?

Si la respuesta es sí como me temo, que tengo que implementar al circuito para que cuando le mande un impulso desde el pc se quede el circuito cerrado y siga encendiendo una bombilla por ejemplo y cuando le de otro impulso me abra el circuito y se apague la bombilla.

Todo esto es para que no tenga que estar todo el rato mi ordenador mandandole datos al circuito.

Espero vuestras respuestas y gracias por todo, me estais ayudando mucho y espero que esto me salga!! por cierto hay alguna tarjeta ya hecha en el mercado que haga todo esto??


----------



## Scooter (Sep 1, 2010)

Eso depende del PC, yo no se si la señal que usas es continua o no. Según parece cuando le das una orden se enciende y cuando le das otra se apaga ¿no?
¿Quieres que funcione si apagas el PC? No entiendo muy bien que pasa.


----------



## PrincipianteForever (Sep 1, 2010)

Hola Scooter,

La señal del pc es simplemente un pulso por el puerto paralelo, que mediante un programa en C# se le da al circuito 1 si quiero que se encienda o 0 si quiero que se apague.

El problema es que le tengo que estar mandando todo el rato datos al circuito para que no se me apague no? o simplemente con un pulso se queda encendido el MOC 3041?.

Lo que quiero hacer es que dandole un pulso se quede encendido todo el rato sin tener que estar mandandole datos al circuito como si fuera un interruptor vamos y que cuando le vuelva a dar otro pulso se apague, no se si me he explicado bien.


----------



## Scooter (Sep 1, 2010)

Me he perdido. ¿No era por el puerto serie? ¿Si das un uno y no dices nada mas se apaga sola?
De todos modos por pulsos se puede, puedes poner un biestable JK o algo así.


----------



## PrincipianteForever (Sep 1, 2010)

No es por puerto paralelo, pero eso da igual ya que solo cambiaría la formar de mandar esos pulsos, pero bueno ya lo tengo mas o menos estudiado con el puerto paralelo aunque lo mejor sería con USB pero no se como hacerlo.

A tu pregunta de que si le dan un 1 y no le das a nada mas y se apaga, es lo que te preguntaba yo, supongo que si no? si le doy un uno al MOC 3041 se enciende el led y hace que conducuzca el circuito pero si no le mando nada mas se apaga digo yo.

Lo del biestable JK parece interesante me podrias decir como hacerlo mejor?y donde ponerlo?.

http://www.pablin.com.ar/electron/circuito/computer/triac220/





Lo que quiero hacer es que el circuito funcione como un interruptor pero que no haya nada d eso fisicamente, sino que cuando le de un pulso en el puerto me encendiera el MOC 3041 y aunque no le siga mandando pulsos siga encendido y que cuando yo quiera desde el puerto otra vez le mande un pulso y me apague el circuito.


----------



## Scooter (Sep 1, 2010)

Pues yo supongo que no. Si yo le digo a mi pc en cualquier lenguaje que A=1, entonces A=1 hasta que alguien o algo digan que vale otra cosa. Si A es la posición de memoria del puerto paralelo y le pongo el dato que sea, si nada ni nadie lo cambia se queda así hasta nueva orden.


----------



## PrincipianteForever (Sep 1, 2010)

Ya pero eso haría que el pc le estuviera mandando datos todo el rato por el puerto paralelo no?porque al fin y al cabo las señales son pulsos de valor lógico alto o bajo en este caso 5v o 0v, pero si yo le mando un 1 que serían esos 5v solo se manda una vez no quiero que se manden todo el rato ya que sino me cargaría el MOC 3041 no?


----------



## Scooter (Sep 1, 2010)

Puedes mandar cuantos datos quieras, si el bit 3 (por ejemplo) siempre es un uno pues siempre estará encendido.
¿Que le pasa al moc?¿Se funden los leds por estar encendidos?¿Se funden los triacs?. Puede estar años encendido si están bien puestas las resistencias, y si están mal, pude que dure milisegundos o menos.


----------



## PrincipianteForever (Sep 1, 2010)

Además tu imaginate que yo lo que quiero es encender una bombilla desde un ordenador y que luego por ejemplo al cabo de una hora la apague, no puedo estar todo el rato mandandole informacion por el puerto.

Lo que quisiera es poder tener como un circuito que lo encienda desde el pc y que se quede encendido sin que ya el ordenador tenga nada que ver y que cuando quiera apagarlo ya pueda hacerlo mandandole una señal desde el pc otra vez, esta vez un 0.

No se si me explico, lo siento por molestarte tanto de verdad.

Muchas gracias por todo .


----------



## Scooter (Sep 1, 2010)

Eso es lo que te pregunté; si ibas a apagar el PC.

Entonces necesitas un circuito independiente con su alimentación etc. Y usar el puerto paralelo no es nada lógico, lo normal sería usar el serie con algún protocolo y además tener un mando local. ¿Que pasa si se te rompe el ordenador, se queda todo encendido o apagado hasta que compres otro?


----------



## PrincipianteForever (Sep 1, 2010)

Lo siento que he mandado un mesnaje y acabo de leer el tuyo de respuesta del anterior.

Ahm pensaba que no durarían mucho, pero bueno lo que no quiero es cargar a mi ordenador.

Tu imaginate que no solo tenga que encender esa bombilla sino hacer muchas cosas mas, entonces si le está mandando datos todo el rato se sobrecargaría no? por eso quiero que actúe como un interruptor, con solo mandarle un dato que se encienda y con solo mandarle un dato que se apague.

No entiendo lo del puerto, porque tiene que se serie? si yo lo único que quiero es mandar un dato.

No quiero apagar el pc, es más este prototipo tendría que estar encendido todo el rato.


----------



## Scooter (Sep 1, 2010)

¿Sobrecargar por mandar cuatro datos por el puerto paralelo? ¿Sabes cuantos MIPS y MFLOPS hace un PC?. Imprimir una sola página de gráficos es mas carga de trabajo que todos los interruptores de veinte años.


----------



## PrincipianteForever (Sep 1, 2010)

Si se rompe el ordenador pues si está en estado apagado no pasa nada si estuviera encendida la bombilla pues simplemente sería desconectarla de la red a la que va conectada a 220v.

Ya entiendo osea que no habría ningún problema por estar enviando datos todo el tiempo.

Es que en mi trabajo me piden que se haga como te he dicho.

No se en serio me dicen que eso que simule como un pulsador.

Como podría hacer eso? comentame eso del circuito auxiliar con su propia alimentación y demás con algún circuito o algo.Te lo agradecería mucho.


----------



## PrincipianteForever (Sep 3, 2010)

Estoy estudiando la manera de hacer ese pulsador que quiero hacer con relés biestables que cumplen con lo que yo quiero hacer, pero no se como funcionan ni cual sería el ideal para mí ni nada y que conste que lo he mirado jeje pero soy mu torpe. ¿Alguien podría ayudarme?.

La idea sería desde mi pc mandarle un impulso por el puerto y que el relé biestable se activara y este por lo que he visto se queda energizado y funcionando hasta que no le vuelvo a mandar otro impulso para que cambie su estado y deje de funcionar con lo que actuaría como yo quería, que es funcionando como un pulsador sin necesidad de estar mandandole impulsos todo el rato desde el pc.

Estoy buscando un ejemplo de como controlar cargas, por ejemplo una bombilla y no encuentro nada.

Un saludo a todos.


----------

