Technorati Profile Add to Technorati Favorites ELECTRONICA DESARROLLO: Lenguajes de Programación para PICs

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

19 comentarios:

FivenooM dijo...

Pues la verdad apoyo más el ideal del software libre, y de antemano te pediría que utilizarás el piklab, es excelente y funciona mucho más rápido que el MPLAB, =) Saludos, igual está muy bien tu explicación....
Felicitaciones

administrator dijo...

Fivenoom, respeto tu posición y agradezco tu comentario.

Juan Rafael dijo...

Me parece muy buena entrada, yo comienzo a necesitar conecimientos acerca del lenguaje ensamblador y los PICs y esta información me ayudó a entender como se puede utilizar el lenguaje ensamblador para programar PICs entre otras cosas.

Saludos!

administrator dijo...

Juan Rafael, gracias por tu comentario, el lenguaje ensamblador como supones no solo se emplea para PICs, los ordenadores,los microcontroladores,los microprocesadores y los PLCs entre otros también lo emplean.

Juan Rafael dijo...

Gracias por ese último comentario, también me ha sido de ayuda por que estoy haciendo un trabajo sobre las aplicaciones que tiene el lenguaje ensamblador y además de poner los PICs ahora se que también seria bueno incluir las que tu mencionas( microcontroladores, microprocesadores y los PLCs)

Saludos!

administrator dijo...

Si puedes incluirlos en tu informe pero debes tener cuidado con la definición de términos pues existen diferencias entre PICs, microcontroladores, microprocesadores y PLCs.

Manolo dijo...

Cordiales saludos

Mi nombre es Manolo Muñoz soy ingeniero en Electrónica y Comunicaciones, y estoy interesado en aprender profundamente la programación de pics en C, se algo pero muy superficial, no se el manejo de interupciones, o que lenguaje me recomienda.

Quisiera que por favor me ayude con los manuales desde los más básicos hasta los mas completos.

Por la respuesta a la presente desde ya le agradezco.

administrator dijo...

Hola Manolo, mira este artículo solo prentende hacer alusión a los lenguajes de programación de PICs, sus ventajas, desventajas. Como conclusión final en este post, admito que para una programación profesional de estos dispositivos es necesario conocer tanto el lenguaje assembler como el lenguaje c. Si no tienes experiencia es mejor que empieces por el lenguaje assembler en un dispositivo mid range, por ejemplo 16F628A o 16F84A. El set de instrucciones para cualquier PIC lo encuentras en su datasheet el cual puedes bajar gratuitamente de: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2046&var=pi
En aquellos datasheets también encontraras toda la explicación para el manejo de interrupciones, yo te aconsejaría que empieces con las interrupciones de los temporizadores para entender bien los conceptos, luego puedes pasar a las interrupciones de otros módulos. Luego una vez tengas experiencia en assembler es bueno que empieces con el lenguaje c, y cuando tengas experiencia en ambos puedes combinarlos que es la mejor manera de programar Profesionalmente. Si tienes inquietudes no dudes en consultar nuevamente en este post. Gracias.

Anónimo dijo...

Holas, estoy en desacuerdo en la desventaja que has puesto en la programacion de ASM, pues existe una clara desventaja cuando superas las 2000 lineas de codigo, por ejemplo, si no tienes tus algoritmos claros, es una odisea cambiar algo. Es verdad que en C, sacrificas espacio, pero cuando estas desarrollando, solo te cambias a un PIC de gama alta por 2 dolares mas, y listo, ya tienes mas espacio para tu programa en lenguaje C, imagina tener que concatenar 3 bytes, para formar un numero binario, despues pasarlo a ASCII y transmitirlo hacia alguna terminal. En ASM, es un dolor de cabeza, en C sale en 4 lineas(excluyendo la transmision). Esa es la ventaja de C sobre ASM, portabilidad, simplicidad, etc.

Debo decir que he programado por mucho años en ASM y llevo pocos meses con C y te simplifica la vida, cuando el desarrollo es robusto.

Buen Blog, saludos.

PHLAKO

administrator dijo...

PHLAKO, gracias por tu comentario, estoy de total acuerdo contigo cuando afirmas que C simplifica mucho las cosas, pues en relidad es así yo llevo varios años trabajando con él y ayuda muchísimo sobre todo en los pic de gama alta, pero aún así sigo empleando el lenguaje ensamblador en combinación con C pues es el lenguaje natural de la máquina. En cuanto a un alto número de líneas, claro, es dispendioso para alguien con poca experiencia en programación usar el ensamblador, pero cuando tienes buena metodología, diagramas y elaboras macros obtienes inmejorable dominio sobre la máquina, aprovechamiento eficiente de recursos de la memoria de programa y de los registros de propósito especial, pero sobre todo conoces el número exacto de ciclos de máquina en determinada rutina lo cual es muy útil cuando manejas interrupciones simultáneas.
Más si te ha dado buen resultado el C me parece buena opción.
Gracias por comentar y dar tu opinión.

Anónimo dijo...

Antes que nada te agradezco por el blog, me parece muy interesante. Yo programo PICs en ensamblador y estoy comenzando pruebas en C, o que quería consultar es como identificar el momento en el programa que uno desarrolla en el cual es preferible incluir parte del código en ensamblador, o cuales son las funciones que habitualmente conviene realizar en este lenguaje.

Para mi una de las mayores ventajas en C es la facilidad para realizar operaciones matemáticas y lógicas en C frente al lenguaje ensamblador.
Gracias de antemano, Fernando

Desarrollamos Proyectos dijo...

Fernando, gracias por tu comentario. Entiendo tus razones respecto a las operaciones matemáticas. Con respecto al lenguaje te recomiendo el que sea compatible con MPLAB C18 o C30, si no estoy mal creo Microchip ya tiene convenios con HI-TECH y distribuye sus compiladores. Es bueno que te entrenes en C pues ahora lo que manda la parada son los micros de 32 bits y estos si deben programarse en C dadas sus superiores ventajas, para mí Microchip ya se quedó atrás en esta tecnología. Saludos, Electronica Desarrollo.

Anónimo dijo...

buenas tardes, les escribo con la intencion me evacuen en la medida de lo posible la siguiente duda.
soy aficionado a la electronica y recien tengo la posibilidad para iniciarme en la programacion de pic`s.
pero para mi sorpresa me surge un trabajo en el que tengo que disenar un control de accesos temporizado, que me de una senal a un sensor en la puerta y tambien otra senal a un control que oficiaria de control central para gobernar otro proceso.
el problema es que no me se decidir por que programa disenarlo, ya que e leido varios libros y recomiendan el basic y ahora leo este documento y pareciera ser que el asemmbler es mejor, aunque a simple vista reconozco que necesito muchas lineas de programa en asemmbler, siendo que con basic lo arreglas en 4 pasos (por asi decirlo).como todavia no se como sera mi programa, no se con que me voy a encontrar.
es decir, capas que hago el programa en basic y despues no me da las prestaciones que quiero.
no se si fui claro, les pido disculpas por mi ignorancia y les agradeceria me comentaran al respecto.
muchas gracias, saludos.

jhontana dijo...

buenas a todos. mi nombre es yonatan soy principiante en la electrónica, estudio ingeniería electromecánica. necesito que me ayuden como programar PICs no tengo ni idea como programar necesito una base para comenzar a para poder comenzar que tipo de software necesito y que tipo de lenguaje. y necesito un manual de programación. quien me puede ayudar.

jhonatan dijo...

mi correo es: jhonatan.itsa@hotmail.com de verdad necesito de su ayuda por favor, se lo agradezco.

Anónimo dijo...

Soy programador de pic desde el año 1989 y pase por diversas etapas en dicha labor. Primero programe en Asembler, no estoy de acuerdo con ud. cuando el proyecto es un trabajo serio el programa de aplicacion requiere mucha precision y un control de entorno muy grande. Por lo tanto recomiendo utilizar este lenguaje para enseñanza o programas menores a 2k. Luego programe en C, C18 y CCS muy buenos compiladores, control de registros muy amplio y infinitas librerias, macros, etc...lo unico malo es que ocupa un espacio de memoria mucho mas grande, sin problemas se realizan programas de 32k sin problemas. Si la aplicacion es "grande"(mayor de 8K) y no requiere punto flotante PicBasic Pro o Proton, son compiladores en Basic, permiten darle una "pela" a los compiladores de C. Proton permite el punto flotante pero debe mejorarse su aplicacion.La facilidad de programacion,lo sencillo de la misma y el control permitido de los registros en las ultimas versiones, el manejo de interrupciones y la posibilidad de realizar librerias es mucho mas sencillas, cuando el manejo matematico no es el centro del proyecto. Tambien he tenido la oportunidad de utilizar las herramientas de Mikroe (Mikrobasic, Mikroc y mikrobasicc32) no recomiendo estos compiladores para programadores que no tengan una alta experiencia en proyectos grandes, son muy frecuentes los BUG y errores desconocidos en la compilacion,la descripcion del manual no coincide con el funcionamiento de los lenguajes. Nunca he utiliado compiladores "libres" y no podria opinar de ellos.

Anónimo dijo...

Hola

Tengo una duda importante con estos de los pics, que pasa si a un pic de un modelo X, le grabo por error un programa HEX compilado originalmente para un pic modelo B. ¿La grabacion o el "quemado" se producde de todos modos? ¿Puedo dañar el pic con esto o quedar inservible?

He tenido problemas al grabar un pic del modelo 16F628A con el programa Icprog, me da el error 0000H, me han dicho que hay que revisar el programador o el pic esta malo, pero queria descartar que no sea un problema del programa que se quiere grabar.

Ojala alguien puede aclarar esta parte. gracias y saludos

Rocio dijo...

A pesar de que la programación no me gusta mucho, me interesa el hecho de la tecnología y por eso disfruto de poder conocer y usar los aparatos tecnológicos que hay en el mercado.
Mi ultima compra fue un lumia 900 ya que mi celular viejo debia cambiarlo hace bastante

Desarrollamos Proyectos dijo...

Hola Rocio te recomiendo revises la nueva plataforma para inexpertos llamada Arduino, es muy didáctica y puedes hacer divertidos proyectos, incluso integrarlos a tu smartphone, visita www.microelectronicos.com
http://www.arduino.cc/es/