Technorati Profile Add to Technorati Favorites ELECTRONICA DESARROLLO: 2007

lunes, 31 de diciembre de 2007

Lenguajes de Programación para PICs

Este blog fue diseñado para apoyar a la comunidad de desarrolladores de electrónica. Se publicarán artículos de proyectos desarrollados por el Administrador del blog, Ingeniero Electrónico, quien estará atento a sus inquietudes o sugerencias igualmente todos pueden compartir sus conocimientos e intercambiar opiniones o aportes dentro de un marco de respeto y tolerancia. Los artículos publicados aquí son elaborados con tal sencillez que son totalmente comprensibles y los proyectos indicados pueden ser llevados a cabo por cualquier estudiante o profesional del ramo de la electrónica.

--English----Español


Programación de PICs y Lenguajes de programación.

Justificación:Ultimamente hemos encontrado a muchos estudiantes y colegas que nos preguntan acerca de como pueden iniciarse en la programación de PIC micro (Peripheral Interface Controller) es por esto que a continuación se dan algunas pautas y consejos tanto para quienes ya están involucrados en el medio como para quienes empiezan y desean hacerlo de la manera mas profesional posible.

Objetivo: ayudar a aclarar dudas sobre los lenguajes de programación para PICs estableciendo comparaciones entre ellos y sacando conclusiones para ayudar a las personas que se inician en este mundo y a despejar dudas a quienes ya están involucrados en él.

Utilidad:Para quienes quieren comparar ventajas y desventajas entre los diferentes lenguajes de programación para PIC. Para quienes quieren conocer proveedores de compiladores para PIC. Para quienes quieren iniciarse en algún lenguaje específico de programación para PIC hay ejemplos que les pueden servir de introducción.

Marco Teorico


Es muy común que las personas que se inician en la programación de microcontroladores PIC de Microchip encuentren como primer obstáculo el lenguaje con el que se programarán dichos dispositivos.
En este artículo describiré las opciones existentes sobre los lenguajes de programación sus ventajas y desventajas y las conclusiones finales.

Realmente cuando cargamos (quemamos) un PIC con un programa no lo hacemos con ningún lenguaje, en realidad lo cargamos con OPCODES o “códigos de operación” que por lo general están en base hexadecimal, sin importar la gama de PIC (baja, media o alta) esto siempre será así. Un ejemplo de opcode para PIC es:
286C
Que es una instrucción referente a GOTO 0X6C, es decir salte a la posición 6C de la memoria de programa.
Cuando se compila un programa cualquiera que sea y en el lenguaje que sea, se genera una lista de OPCODES la cual quedará almacenada en el archivo con extensión .hex.

Por ejemplo creamos la rutina ENCENDERLED, cuando compilemos se generará, entre otros, un archivo ENCENDERLED.hex que es el archivo que realmente le cargamos a la memoria de programa del PIC. Para efectuar la tarea de cargar el archivo *.hex al PIC es necesario tener una herramienta de hardware llamada programador que es la interfaz entre el computador y el pic.

Dentro de los lenguajes en los que programamos rutinas para PIC existen tres posibilidades:




  • Lenguaje BASIC

  • Lenguaje C

  • Lenguaje Ensamblador (assembler)



Un error común que cometen los principiantes cuando se les menciona la posibilidad de programar en Basic o C es pensar que con Visual Basic o Visual C++ pueden elaborar rutinas para PICs, pero en realidad lo que se debe tener en cuenta es que existen compiladores especiales para estos lenguajes y por ende la sintaxis es diferente de la de un lenguaje orientado a objetos.

A continuación veremos detalladamente cada una de las tres posibilidades enumeradas anteriormente, cada una con sus ventajas y desventajas asi como un sencillo ejemplo de aplicación en cada una de ellas.

1. El lenguaje BASIC:


Ventajas:



  • Es un lenguaje muy simple y con instrucciones fácilmente legibles, incluso por no expertos.


Desventajas:



  • Nunca vas a tener el control del programa en cuanto tiempos de ejecución y control de registros bit a bit.

  • Es muy complicado el manejo de interrupciones simultáneas en este lenguaje.
    Tiene limitaciones cuando genera el archivo .hex, es decir no optimiza el tamaño de memoria de programa del PIC.

  • La mayoría de compiladores para este lenguaje pueden utilizarse únicamente bajo ambiente Windows.




Existen varias casas que producen compiladores para este lenguaje, entre ellas se pueden mencionar a:


www.letbasic.com
www.melabs.com
www.basicmicro.com

El más conocido y que a mi parecer es mejor entre ellos es el PICBASIC PRO de MicroEngineering Labs Inc. No es gratuito.

Ejemplo: rutina que hace parpadear un led en el pin cero del puerto B cada 200 milisegundos en lenguaje Basic empleando el software PICBASIC PRO:



Lenguaje C:

Ventajas:

  • Es un lenguaje de alto nivel mas cercano a la máquina.

  • Puedes construir rutinas matemáticas fácilmente.

  • Puede ser de ayuda al combinarlo con Ensamblador sobre todo en la gama alta.

  • Se pueden crear macros con este lenguaje, para después simplificar el código en diferentes desarrollos.

  • Es aceptado por la empresa fabricante Microchip, incluso ellos tienen algunos compiladores C.

Desventajas:



  • Los programas al compilarlos pueden resultar un poco extensos y pesados por ello debe tenerse en cuenta la capacidad de memoria de programa del PIC a utilizar.

  • Con este lenguaje tampoco se puede controlar del todo los tiempos y los registros bit a bit.

Para este lenguaje existen también varias casas que producen software y compiladores para este lenguaje entre ellas las más importantes son:



www.microchip.com con sus compiladores C18 para la gama alta y C30 para los dsPIC, ambos Como otras herramientas de esta marca, se puede incluir en el entorno gratuito MPLAB IDE, y permite a los desarrolladores, llevar a cabo su aplicación en un lenguaje de alto nivel. No son del todo gratuitos.
www.ccsinfo.com Sus herramientas más conocidas, son la serie de compiladores para las distintas familias de microcontroladores Microchip PIC® MCU: PCW IDE, PCWH IDE y PCWHD IDE. Ofrecen la posibilidad de que el usuario pueda elegir el compilador concreto para la familia que va a utilizar, y compilar en modo linea de comandos, tanto para Microsoft Windows, como para Linux. Para los usuarios de Microsoft Windows, también existe la posibilidad de utilizar su potente entorno de desarrollo PCWHD IDE, que incluye además de los compiladores para todas las familias de PICs y dsPICs, entre otras cosas, un editor de código con reconocimiento de comandos, un depurador ICD, y un Wizard que en base a lo que el usuario le indique, generará la mayor parte del código para inicializar el microcontrolador. Además incluyen una gran cantidad de librerías muy útiles para asociar con la rutina que estamos desarrollando. Este compilador también puede integrarse con MPLAB IDE. No es gratuito.
www.htsoft.com (HI-TECH) Sus herramientas más conocidas son PICC y PICC18. No son gratuitos.

Ejemplo: rutina que hace parpadear un led en el pin cero del puerto B cada 200 milisegundos en lenguaje C empleando el software de CCS PCW IDE:


Lenguaje Ensamblador:

Ventajas:



  • Es el lenguaje de bajo nivel natural de la línea PIC tanto para gama baja, media o alta.

  • Con el se tiene un aprovechamiento eficiente de los recursos del PIC.

  • Se pueden crear macros con este lenguaje, para después simplificar el código en diferentes desarrollos.

  • Con el se pueden controlar los tiempos y los registros bit a bit.

  • Excelente para manejar interrupciones simultáneas.

  • Cuando se genera el archivo .hex éste es completamente optimizado.

Desventajas:


  • En realidad desde mi punto de vista no existe ninguna, excepto cuando no se tiene experiencia en programación puede tardarse el desarrollo de alguna rutina en comparación con los otros lenguajes.


El compilador para este lenguaje es el MPLAB IDE el cual se consigue totalmente gratuito en la página de Microchip y constantemente están sacando nuevas versiones, debe aclararse que este solo funciona bajo ambiente Windows. Para Linux existe un versión alternativa llamada: PIKLAB la cual presenta simuladores, editores, ensambladores y soporta una gran cantidad de compiladores C para PIC.

Ejemplo: rutina que hace parpadear un led en el pin cero del puerto B cada 200 milisegundos en lenguaje Ensamblador empleando el software de Microchip MPLAB IDE:



CONCLUSIONES:


Después de haber analizado los diferentes aspectos que envuelven la programación de PICs en cuanto a los lenguajes,para trabajos profesionales se aconseja lo siguiente:


  • Lo ideal es manejar el lenguaje ensamblador para los rangos de gama baja, media y alta por versatilidad y mejor aprovechamiento de recursos del PIC.

  • Si usted va a comenzar con la programación de PICs debería primero dominar el lenguaje Ensamblador, no le aconsejaría el lenguaje BASIC. Una vez haya dominado el lenguaje Ensamblador para gama baja y media puede iniciarse con el lenguaje C.

  • El Lenguaje C es un lenguaje de alto nivel y puede resultar útil combinándolo con el lenguaje Ensamblador ya que nos puede ahorrar tiempo de programación, depuración y simulación sobre todo en la gama alta y en los dsPIC.

  • Puede emplear el Lenguaje C o el Ensamblador para crear macros que le simplifiquen desarrollos futuros.

Para ver la página personal del autor haz clic aqui

viernes, 15 de junio de 2007

Manejo de puerto paralelo con IO.DLL

Este blog fue diseñado para apoyar a la comunidad de desarrolladores de electrónica. Se publicarán artículos de proyectos desarrollados por el Administrador del blog, Ingeniero Electrónico, quien estará atento a sus inquietudes o sugerencias igualmente todos pueden compartir sus conocimientos e intercambiar opiniones o aportes dentro de un marco de respeto y tolerancia. Los artículos publicados aquí son elaborados con tal sencillez que son totalmente comprensibles y los proyectos indicados pueden ser llevados a cabo por cualquier estudiante o profesional del ramo de la electrónica.

--English-------Español



CONTROL DEL PUERTO PARALELO DE UN COMPUTADOR

Justificación: Se escogió este sencillo proyecto como el primero en Proyectos de Electrónica, por su gran utilidad que puede dársele en cualquier momento.

Objetivo: Elaborar un programa que envié datos (bytes) a través del puerto paralelo de nuestro pc. Dicho software debe trabajar bajo windows xp, windows 2003, windows 2000, windows ME y windows 9x.

Utilidad: Enviar datos al puerto paralelo es de gran utilidad ya que a través de este pueden activarse/desactivarse cargas empleando relés o triacs, también pueden enviarse órdenes a un dispositivo microcontrolado o a un PIC.

Marco teórico

Todos los computadores de escritorio traen un conector DB 25 Hembra de color púrpura con una distribución de pines como se muestra en la figura 1. En el presente proyecto se emplearán las líneas D0 a D7 (pines 2 al 9) para sacar los datos de control, y el pin 25 (GND) para dar la referencia eléctrica.


Figura 1. Puerto Paralelo



Como estandard el puerto paralelo de un PC posee tres bytes:

DATAPORT, STATUSPORT y CONTROLPORT.

Para este proyecto se utilizará el DATAPORT, el cual posee obviamente una dirección asignada, la cual puede variar dependiendo del tipo de PC, para determinar cual es la dirección adecuada Usted debe dirigirse al panel de control, sistema,
administrador de dispositivos, puerto (COM y LPT), y luego haga click derecho sobre LPT1 o LPT2 según el puerto que desea controlar y de nuevo haga click en propiedades, busque la pestaña recursos y observe que intervalo de I/O le corresponde. Para nuestro caso se observa lo siguiente:

I/O Range 378-37F


Como estos valores se encuentran en base hexadecimal convertimos a decimal y obtenemos

I/0 Range 888-895

Por defecto escogemos la primera opción es decir número del Dataport es 888.

Utilizaremos incialmente Visual Basic 6.0 para la creación de nuestro software de control.

Dado que Microsoft en sus sistemas operativos recientes a creado modos de protección para los puertos del pc de tal forma que ellos no son tan fáciles de accesar como lo eran en las versiones 9x de windows, hemos de necesitar una librería "universal" que nos permita acceder de una forma práctica a dichos puertos, ella es la librería io.dll. Primero debe descomprimir el paquete en una carpeta cualquiera y luego buscar i0.dll y copiarlo.
Una vez copiada esta librería se debe instalar en la carpeta system32 de windows. La ruta a seguir es C:\WINDOWS\system32,(solamente pegarla en esta carpeta).

Elaboración del software

1. Elabore un nuevo proyecto Estándar.Exe en visual basic 6.0 como se muestra en la figura 2.

Figura 2. Nuevo proyecto estándard .EXE

2. Cree un módulo general como se muestra en la figura 3 usando la herramienta añadir un nuevo formulario.

Figura 3. Añadiendo un nuevo módulo.

3. Abra el nuevo módulo y pegue el siguiente código en él:

Public Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
Public Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer)
Public Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long)
Public Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Public Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long
Public Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean
Public Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean

4. Por último cree un nuevo formulario y añada un botón para cada bit a controlar, como lo muestra la figura 4, también añada un botón para limpiar el puerto y otro para activar todo el puerto.

Figura 4. Formulario con que que se controla cada bit del puerto paralelo

El código correspondiente a cada botón es el siguiente:

Private Sub Command1_Click() ' bit 0 en 1
PortOut 888, 1
End Sub

Private Sub Command2_Click()
' bit 1 en 1
PortOut 888, 2
End Sub

Private Sub Command3_Click()
' bit 2 en 1
PortOut 888, 4
End Sub

Private Sub Command4_Click()
' bit 3 en 1
PortOut 888, 8
End Sub

Private Sub Command5_Click()
' bit 4 en 1
PortOut 888, 16
End Sub

Private Sub Command6_Click()
' bit 5 en 1
PortOut 888, 32
End Sub

Private Sub Command7_Click()
' bit 6 en 1
PortOut 888, 64
End Sub

Private Sub Command8_Click()
' bit 7 en 1
PortOut 888, 128
End Sub

Private Sub Command9_Click()
' D0 a D7 en 0
PortOut 888, 0
End Sub

Private Sub
Command10_Click() 'D0 a D7 en 1
PortOut 888, 255
End Sub

Obsérvese lo siguiente: la instrucción portout tiene dos valores a asignar estos son: Número del puerto y dato a sacar. Por tal razón se establece el puerto 888 y el dato a enviar en decimal. Como no todos casos son iguales ud debe identificar muy bien el número del puerto como se indico anteriormente y cambiar el este código fuente al nuevo valor del número de puerto.

Para el software anterior, cada vez que se de click a un botón de la ventana formulario se obtendrá algún dato de salida en el puerto paralelo. Para comprobarlo es necesario elaborar un hardware sencillo a base de leds con el anodo en la salida del pin del pueto paralelo y el cátodo a GND. También puede probarse el anterior software con un multímeto si se desea con la función Voltaje en dc y la punta roja de prueba en la salida del pin de puerto y la punta negra en el pin 25 (GND).

Ya están disponibles algunos circuitos de ejemplo para probar este software visítalos.

Visita mi blog personal: Luis Roberto Arteaga - Mi curriculum