jueves, 9 de diciembre de 2010

CODIGO EN JAVA

Bueno para la creacion de nuestra aplicacion utlizamos JCreator y tres clases.java las cuales las mostraremos acontinucion. Solo copiar y pegar en JCreator para probar el codigo y que no tenga errores. Las dos primeras clases corresponden al codigo de manejo de puertos y la ultima es la aplicacion que realizamos para enviar el dato en decimal por teclado y mostralo en decimal en los leds y en hexadecimal en el display de 7 segmentos.

1. La clase ioport.java

public class ioPort
{
   // declare native methods of 'jnpout32.dll'
   // output a value to a specified port address
   public native void Out32(short PortAddress, short data);

   // input a value from a specified port address
   public native short Inp32(short PortAddress);

   // load 'jnpout32.dll'
   static { System.loadLibrary("jnpout32");}
}


2. La clase pPort.java

public class pPort
{
   ioPort pp;                  // wrapper class for 'Jnpout32.dll'
                               // with methods:
                               //    int Out32(int port, int value);
                               //    int Inp32(int port);
   short portAddress;          // address of data port
   short currentVal;           // current value of port bits

   public pPort()
   {
      pp = new ioPort();
      portAddress = (short)0x378;     // Hex Address of Data Byte of PC Parallel Port
      setAllDataBits((short)0);       // initialize port bits to 0
      currentVal = 0x00;
   }

   // wrap ParallelPort output method
   public void output(short port, short value)
   {
      pp.Out32(port, value);
   }

   // wrap ParallelPort input method
   public short input(short port)
   {
       return pp.Inp32(port);
   }

    // output to default Data port
    public void output(short value)
    {
       pp.Out32(portAddress, value);
    }

    // input from default Data port
    public short input()
    {
        return pp.Inp32(portAddress);
    }


  /**
   * set all bits on Data port to zero
   **/
   public void setAllDataBits(short value)
   {
      pp.Out32(portAddress, value);
      currentVal = value;
   }


   // For users who prefer dealing with Pin numbers
   //    Set Pin <pin> to <value>
   public void setPin(short pin, short value)
   {
      if (pin >= 2 && pin <= 9)
         // just set the corresponding Data bit to indicted value
         setDataBit((short)(pin-2), value);
   }


   /**
    * Set Data Bit at selected index to a value of 1 or 0
    * while preserving current values of all other Data bits
    **/
   void setDataBit(short index, short value)
   {
      switch(index)
      {
         case 0:
           if (value==0)                        //  Set Data[0] to 0

              currentVal = (short) (currentVal & 0xFE);
                                                       //      aaaa aaaa  currentVal
                                                //  AND 1111 1110  mask
                                                //      =========
                                                //      aaaa aaa0  new currentVal

           else                                 //  Set Data[0] to 1

              currentVal = (short) (currentVal | 0x01);
                                                        //      aaaa aaaa   currentVal
                                                //  OR  0000 0001   mask
                                                //      =========
                                                //      aaaa aaa1   new currentVal
           break;
         case 1:
           if (value==0)
              currentVal = (short) (currentVal & 0xFD);
                                                        //  currentVal = aaaa aa0a
           else
              currentVal = (short) (currentVal | 0x02);
                                                        //  currentVal = aaaa aa1a
           break;
         case 2:
           if (value==0)
              currentVal = (short) (currentVal & 0xFB);
                                                        //  currentVal = aaaa a0aa
           else
              currentVal = (short) (currentVal | 0x04);
                                                        //  currentVal = aaaa a1aa
           break;
         case 3:
           if (value==1)
              currentVal = (short) (currentVal & 0xF7);
                                                        //  currentVal = aaaa 0aaa
           else
              currentVal = (short) (currentVal | 0x08);   //  currentVal = aaaa 1aaa
           break;
         case 4:
           if (value==0)
              currentVal = (short) (currentVal & 0xEF);
                                                        //  currentVal = aaa0 aaaa
           else
              currentVal = (short) (currentVal | 0x10);   //  currentVal = aaa1 aaaa
           break;
         case 5:
           if (value==0)
              currentVal = (short) (currentVal & 0xDF);
                                                        //  currentVal = aa0a aaaa
           else
              currentVal = (short) (currentVal | 0x20);   //  currentVal = aa1a aaaa
           break;
         case 6:
           if (value==0)
              currentVal = (short) (currentVal & 0xBF);
                                                        //  currentVal = a0aa aaaa
           else
              currentVal = (short) (currentVal | 0x40);   //  currentVal = a1aa aaaa
           break;
             case 7:
           if (value==0)
              currentVal = (short) (currentVal &  0x7F);
                                                        //  currentVal = 0aaa aaaa
           else
              currentVal = (short) (currentVal | 0x80);   //  currentVal = 1aaa aaaa
           break;

         default:
           System.out.println("index must be 0 - 7");
      }
      pp.Out32(portAddress, currentVal);
   }


}

Importante: Antes de ejecutar el programa debes copiar el archivo jnpout32.dll en la  misma carpeta donde estan las aplicaciones de java anteriormente nombradas. El archivo junto con las dos apliciones lo puedes descargar de la siguiente pagina:


3. Por ultimo Aplicacion.java

import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Aplicacion extends JFrame implements ActionListener{
   
    public static pPort lpt = new pPort();
    JLabel l1= new JLabel ("Digite aqui el numero");
    JTextField t1 = new JTextField(10);
    JButton b1= new JButton ("Entrar");
    JPanel p1= new JPanel(null);
   
    public Aplicacion()
    {   
     setTitle ("Control de Leds por Puerto Paralelo");
     setSize (250,200);
     setDefaultCloseOperation(3);
     setLocation(100,100);
     setContentPane(p1);
    
     p1.add(l1); l1.setBounds(60,20,200,20);
     p1.add(t1); t1.setBounds(20,40,200,20);
     p1.add(b1); b1.setBounds(60,100,100,40);
     b1.addActionListener (this);
    
   }

   public void actionPerformed (ActionEvent e)
   {
       int num;
       num=Integer.parseInt(t1.getText());
    if (e.getSource()==b1){lpt.output((short)num);}
   }
  
   public void mensaje(String texto){JOptionPane.showMessageDialog(this,texto);}
  
   public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);
        Aplicacion a1 = new Aplicacion();
        a1.setVisible(true);
    }

}


DISEÑO Y FUNCIONAMIENTO

A continuacion mostraremos los pasos a seguir para armar nuestro circuito y el codigo de programacion utilizado para su funcinamiento.

1. El puerto paralelo tiene 25 pines los cuales estan organizados de tal forma que cada segmento de pines tiene una finalidad. Como se muestra en la imagen a continuacion.


"El puerto de datos (DATA), permite transmitir un byte (8 bits) de datos. Cada uno de los bits se corresponde con uno de los pines D0 a D7. Por tanto, en conjunto, se pueden transmitir valores entre 0 y 255 en formato binario. Por ejemplo, para transmitir el 139, 10001011 en binario, se pondrán a 5Voltios los pines D7, D3, D1 y D0. Este puerto puede configurarse para servir tanto de entrada como de salida de datos.
El puerto de control (CONTROL)  es sólo de salida y se corresponde con los pines C0 a C3, con lo que en principio nos permite trasmitir valores entre 0 y 16. En un principio este puerto se utilizaba para pasarle comandos inmediatos a la impresora como el salto de línea o el reset y  los pines conservan los nombres que se les dieron en esa época. Y por razones históricas tambien, C0, C1 y C3 están invertidos, lo que quiere decir que invierten la salida y, al contrario que los pines normales, representan el 0 con 5 voltios y el 1 con 0 voltios. Por ejemplo, el 6 es 0110 en binario, pero como los bits 0, 1 y 3 están invertidos tendríamos C3, C2 y C0 a 5 voltios y C1 a 0.
Por último tenemos el puerto de estado (STATUS). Se usaba originalmente para recibir el estado de la impresora, también ha heredado los nombres de los pines de aquella época y también presenta algún pin invertido. Es un puerto sólo de entrada, así que no lo vamos a usar por el momento. Pero vete familiarizándote con él."
Fuente: http://www.obsoletos.org/2009/02/accediendo-al-mundo-real-el-puerto-paralelo/

Bueno despues de esta descripcion debemos saber que los pines a utilizar son los pines D0 a D7 para manejar los 8 leds desde el menos significativo hasta el mas significativo. Por ejemplo D0 corresponde a 2 en potencia de 0, D1 corresponde a 2 en potencia de 1 y asi hasta D7 que corresponde a 2 en potencia de 7.
Por ultimo conectamos el pin G7 que es el que corresponde a polo a tierra. Recordemos poner un reistencia por cada led conectado para evitar que se nos quemen ya que el puerto nos arroja 5 voltios y los leds que utilizamos funcionan con solo 1.5 voltios.

Ahora vamos a conectar los display, para ello debemos saber que un display funciona con 4 salidas de señal enviadas por los pines del puerto asi que en este caso como tenemos 8 salidas positivas del puerto vamos a manejar 2 display tambien hay que tener en cuenta que los display no funcinan con los 5 voltios que nos da el puerto asi que necesitamos una fuente externa de energia en nuestro caso utilizamos un cargador de celular. En la siguiente figura se muestra la parte logica de la forma del funcionamiento los display

 Fig 2. Diseño logico del funcinamiento de los display

Debemos recordar que debemos conectar los display con una compuerta logica 7447 o 7446 las cuales son para el manejo de display; estas poseen 44 compuertas que determinan la señal enviada por el puerto y la transforman en el numero de segmentos necesarios para representar el dato. Es decir si enviamos por tecaldo un 9 en el display se encenderan los segmentos a, b, c, f, g.

Tambien y muy importante es que el dato que nos arroja el display esta en hexadecimal por lo tanto si queremos representar datos alfanumericos debemos utilizar un display alfanumerico. En nuestro caso utilizamos display unicamente numericos.

Por ultimo unas capturas de nuestro circuito.

Fig 3. Aqui introducimos por teclado 153 en decimal en los leds miramos en binario 10011001 y en el display 99 en hexadecimal.


Fig 4. Aqui introducimos por teclado 16 en decimal en los leds miramos en binario 00010000 y en el display 10 en hexadecimal. 


Fig 5. Esta es una foto para apreciar mas de cerca el circuito un nuestra protoboard.






DISEÑO ABSTRACTO

En la siguiente imagen podemos apreciar el diseño abstracto de lo que se pretende hacer.

 Fig 1. Diseño abstracto de lo que se pretende hacer

miércoles, 8 de diciembre de 2010

MARCO TEORICO


¿Qué es puerto paralelo?: es una interfaz entre un ordenador y un periférico. El puerto paralelo transmite la información byte por byte, es decir que los 8 bits de datos que forman un byte viajan juntos. Un ejemplo de puerto paralelo es el puerto de la impresora.
El puerto paralelo puede utilizar uno de los tres tipos de conectores definidos por el estándar IEEE 1284:
1.      1284 tipo A es un conector hembra de 25 patitas de tipo D. Es el utilizado en las impresoras.
2.      1284 tipo B que es un conector de 36 patitas de tipo Centronics y lo encontramos en la mayoría de las impresoras.
3.      1284 tipo C es un conector similar al 1284 tipo B pero más pequeño, con mejores propiedades eléctricas y mecánicas.(cavsi.com)

¿Que es Protoboard? El protoboard está lleno de orificios metalizados con contactos de presión, en los cuales se insertan las componentes del circuito a ensamblar. La siguiente figura muestra la forma básica de un protoboard.

¿Qué son resistores?: Los resistores se dividen en 2 tipos importantes, fijos y variables. Los fijos son el tipo más común usado, los variables (potenciómetros y reóstatos), se usan como controles de volumen en receptores y en transmisores.

En los resistores fijos los más comunes son de carbón, se compone de carbón en polvo o grafito mezclado con algún material adhesivo. Los resistores de buena calidad, mantienen su valor podriamos decir, casi invariable, esta característica los hace proveer un buen servicio. Estos resistores se utilizan en circuitos donde la exactitud no es del todo necesaria.

¿Qué son diodos LED?: DIODOS LED (LUMINISCENTES): Este tipo de diodos es muy popular, sino, veamos cualquier equipo electrónico y veremos por lo menos 1 ó más diodos LED. Podemos encontrarlos en diferentes formas, tamaños y colores
diferentes. La forma de operar de un LED se basa en la recombinación de portadores mayoritarios en la capa de barrera cuando se polariza una unión Pn en sentido directo. En cada recombinación de un electrón con un hueco se libera cierta energía. Esta energía, en el caso de determinados semiconductores, se irradia en forma de luz, en otros se hace de forma térmica.

El nombre de LED se debe a su abreviatura en inglés (Light Emmiting Diode)
Además de los diodos LED existen otros diodos con diferente emisión, como la infrarroja, y que responden a la denominación IRED (Diodo emisor de infra-rojos).

¿Que es una compuerta logica? Dispositivo electrónico que es la expresión física de un operador booleano en la lógica de conmutación.

¿Que es un Display? Se llama visualizador, display en inglés, a un dispositivo de ciertos aparatos electrónicos que permite mostrar información al usuario, creado a partir de la aparición de calculadoras, cajas registradoras e instrumentos de medida electrónicos en los que era necesario hacerlo.
Los primeros visualizadores, similares a los de los ascensores, se construían con lámparas que iluminaban las leyendas. Al permitir mostrar distintas informaciones, ya se puede hablar con propiedad de visualizadores. Un tubo Nixie es semejante a una lámpara de neón pero con varios ánodos que tienen la forma de los símbolos que se quiere representar. Otro avance fue la invención del visualizador de 7 segmentos.










ANTECEDENTES


Uso De Los Puertos Del Microcontrolador Pic16F84, Con Conexión De LEDS Y Dipswitch
Se conectan cuatro interruptores (dipswitch) como entradas del microcontrolador y cuatro diodos LED de salida en los puertos. La aplicación debe verificar el estado de los interruptores y de acuerdo a ello encender el LED correspondiente.


Parpadeo De 1 Diodo LED A 1Mz
Se calcula el retardo de 1,000,000uS y se realiza un informe detallado acerca del parpadeo de un LED a 1hz, utilizando el microcontrolador pic16f84a.

FUENTES: 
 

OBJETIVO


Por medio de la programación pretendemos controlar el puerto paralelo hacer una determinada tarea, como en este caso lo que vamos a hacer es encender unos diodos LED puestos en fila, los cuales se encenderán al introducir por teclado una acción, la acción será un número el cual aparecerá representado en la fila de diodos LED como binario Ademas utilizamos un display de siete segmentos en el cual aparecera el  numero digitado en hexadecimal. El circuito que se necesita para lograr con el  objetivo se lo montará en una protoboard.
Este objetivo se logrará por medio de el lenguaje de programación Java los cuales nos ayudarán a controlarel puerto paralelo.

INTRODUCCION


A través del control de los puertos de E/S se van a encender unos diodos LED y un display  de 7 segmentos dependiendo; del número digitado en el programa diseñado para dicho propósito, para esto se necesita una protoboard para hacer el respectivo montaje del circuito y un lenguaje de programación que nos permita controlar los puertos. Los diodos LED se van a alimentar de la energía suministrada por el puerto al que se conecte, ya que los puertos pueden proporcionar la suficiente corriente tanto para encender unos diodos LED como para poder cargar un dispositivo electrónico como por ejemplo un teléfono celular o un IPOD; el display necesita una fuente externa de energia para funcionar.