jump to navigation

Port a Windows del Porting de GCC a PIC16F877 21 Marzo, 2007

Posted by pjmicrocontroladores in Información general, Lanzamiento de versión.
2 comments

Hola, estas semanas he estado más liado de la cuenta con la documentación del proyecto fin de carrera. Tenía un esqueleto echo, pero hay que actualizar partes, ampliar otras, o rellenar algunos huecos. Por ahora va bien. Aunque tarde, será presentado al gran publico para todos aquellos que quieran saber más a fondo como funciona el backend de PIC para GCC.

He colgado en la forja (1) los ejecutables del compilador C de GCC para el sistema Windows (en modo consola) para nuestro PIC, junto con la librería. El programa ha sido compilado usando el entorno DJGPP y el GCC adaptado a él, versión 4.0.1. Por lo tanto, los códigos C pueden no ser los mejores comparados con las nuevas versiones pero son totalmente funcionales. Con esto, todo aquel que quiera programar para PIC puede hacerlo, tanto desde Linux como desde Windows. El funcionamiento en ambos sistemas es similar, pero obviamente el sistema más moderno trabaja sobre Linux.

Además también he colgado el fichero de cabecera del PIC16F877 el cual, al ser incluido en los códigos en C, permitirá acceder a los registros especiales del microcontrolador de forma más fácil y cómoda, por su nombre.

En breve (creo) terminaré un mini-manual para programar los microcontroladores PIC en C usando un entorno totalmente abierto, con todo lo que ello supone. Incluye ejemplos básicos y avanzados e intentaré hacerlo multiversión (Linux/Windows).

He reajustado los paquetes de la forja para eliminar los antiguos y he fijado una versión 0.9.1 que incluye pequeños arreglos y el port a Windows. Solo queda recordar que el verdadero movimiento está en el control de versiones de la forja donde he profundizado en una metodología ignorada (e incluso criticada) durante la carrera pero realmente potente y eficaz.

Sin más, saludos.

(1) http://forja.rediris.es/frs/?group_id=101

Programador por puerto serie para PIC 2 Marzo, 2007

Posted by pjmicrocontroladores in General.
73 comments

La programación a través del puerto serie debe sortear un impedimento. Los niveles de tensión en los que trabaja el puerto serie pueden ir de -12V a 12V. Estos voltajes tienen dos problemas. El primero es que como vimos en el programador por puerto paralelo(1) el protocolo ICSP trabaja con niveles de 0V, 5V y 13.2 voltios, por lo que habrá que adecuar los niveles. Pero el segundo es más complejo de resolver, dado que el estándar RS232 (puerto serie) solo especifica que el voltaje debe ser como máximo 12 o -12 voltios, pero coloca el mínimo en los 3 y -3 voltios respectivamente. Como norma podemos suponer que la mayoría de ordenadores de sobremesa usan niveles de 8 y -8 voltios. Veremos las implicaciones de este segundo problema al final.

Para conseguir programar un microcontrolador con los niveles de tensión adecuados, necesitamos adaptar los mismos, función por la que `Jens Dyekjær Madsen’ creo el programador JDM (2). Este programador tiene en cuenta que los 13 voltios necesarios no se pueden conseguir ni con 12 ni con -12 en el mejor de los casos ya que las tensiones serán incluso menores. Por lo tanto utiliza un pequeño truco, usar como tierra del circuito de la interfaz ICSP, el valor negativo del puerto. Suponiendo que las tensiones están en el rango de -8 - 8 tenemos una tensión efectiva de 16 voltios.

A grandes rasgos el programador JDM usa como tierra virtual la tensión negativa del puerto serie. Para estabilizar los niveles usa diodos zener que al no tener caída de tensión comparados con los reguladores de voltaje, permiten trabajar con puertos serie con niveles bajos de tensión. Más información teórica y completa en la página del autor.

La única modificación que he realizado es la inclusión de un diodo en la tierra del conector ICSP para evitar la aparición de tensiones negativas en los pines del microcontrolador. Por contra baja la tensión VPP hasta los 13 o 12,5 voltios, pero es suficiente para el microcontrolador PIC16F877 y en teoría para el resto.

Vemos el programador:

Esquema del programador por puerto serie para PIC

Lista de componentes (sin contar conectores):
5 Diodos 1N4148
2 Transistores NPN (BC547B o similar)
1 condensador electrolítico de 100 microfaradios
1 condensador electrolítico de 22 microfaradios
1 Diodo zener de 8,2 de ruptura
1 Diodo zener de 5,1 de ruptura
1 resistencia de 10K ohmios
1 resistencia de 1.5K ohmios

Como ventajas frente al programador paralelo nos encontramos la ausencia de alimentación externa, lo que reduce tanto el tamaño del programador como su precio.

Ya puntualizamos un problema en los niveles de tensión del puerto serie, y es que el estándar RS232 no fija un valor exacto para el puerto, sino que coloca en valor absoluto los niveles de 3 a 12 voltios. En los ordenadores de sobremesa tenemos de forma más o menos generalizada una tensión absoluta de 8 voltios, pero en los portátiles este nivel suele ser bastante menor. Además en también podemos encontrar con un problema similar en puertos serie con muy baja corriente. Con niveles demasiados bajos el programador no conseguirá los 13 (ni 12) voltios necesarios, por lo que el microcontrolador no entrará en modo de programación y no será posible operar sobre él. La solución en esos casos es sumar alimentación externa que entregue el voltaje y la corriente que el programador y el microcontrolador necesita. Para esos casos bastaría ingresar entre los pines del condensador de 100 microfaradios un voltaje de 18 voltios, limitados con una resistencia.

Gracias a Eagle 3D podemos ver el programador serie tal y como quedaría si lo hiciéramos en una placa de circuito impreso creada a tal fin.

Representación 3D del programador por puerto serie para PIC

 Y nada más, saludos. En breve los manuales para configurarlo en Linux y Windows.

(1) http://pjmicrocontroladores.wordpress.com/2006/11/20/documento-programador-por-puerto-paralelo-para-pic/

(2) http://www.jdm.homepage.dk/newpics.htm

Cartel de la Conferencia Internacional de Software Libre 3.0 23 Febrero, 2007

Posted by pjmicrocontroladores in Documentación.
add a comment

Para todos aquellos que no pudieron asistir a la conferencia de SW libre, adjunto el cartel que fue presentando en la misma.

Cartel “Porting de GCC a PIC16f877″

Código en SVN 15 Febrero, 2007

Posted by pjmicrocontroladores in General.
2 comments

Hola, ya ha sido subido el código fuente al control de versiones de la forja. Con cierto retraso debido a la conferencia de software libre de Badajoz, el desarrollo seguirá desde ahí, por lo que solo publicaré los cambios de relevancia. Próximamente subiré el póster presentado en la conferencia y, pese a que no hubo presentación oficial, obtuve buenas opiniones entre los asistentes, por lo que pongo a disposición de todos, el foro y/o los comentarios del blog para criticar o preguntar lo que estiméis oportuno. Saludos.

Conferencia Internacional de Software Libre 4 Febrero, 2007

Posted by pjmicrocontroladores in General.
2 comments

He tenido el honor de ser aceptado para la presentación de un póster sobré el trabajo del Porting de GCC a PIC16F877 en la Conferencia Internacional de Software libre (o más conocida como Free Software World Conference). Su cuarta edición se celebra en el palacio de congresos “Manuel Rojas” en Badajoz los días 7, 8 y 9 de Febrero.

Conferencia del software libre

Todos aquellos que visiten la conferencia podrán ver mí, casi con seguridad, penosa intervención. No obstante aquellos que tengan dudas o interés en el proyecto del Porting de GCC a PIC16F, pueden quedar conmigo en cualquier momento esos días para charlar sobre el tema e intercambiar opiniones. En principio no tengo seguridad del acceso a la red que tendré esos días pero podéis quedar en el correo pjanragu en telefonica.net

Próximamente todo aquel que lo deseé podrá acceder a la versión electrónica del póster donde intento explicar en que consiste y como se ha realizado el proyecto.

Sin más, un saludo.

Nueva versión 0.9 (Beta) 4 Febrero, 2007

Posted by pjmicrocontroladores in Lanzamiento de versión.
add a comment

Tras adecuar en unos pocos lanzamientos la versión del proyecto, se lanza la primera versión beta. Siguiendo el consejo del usuario Ranganok Schahzaman, a partir de ahora se seguirá la numeración vv.mm.cc con vv versión, mm la modificación y cc corrección. Por lo tanto con la versión 0.9 se inicia la última modificación (no habrá 0.10.xx) que dará como resultado la versión final (es un decir) del porting de GCC a pic16F.

Esta tarde o mañana, se subirá todo el código al control de versiones de la forja. Desde ese momento se seguirá trabajando desde allí y solo se publicará la información de las correcciones que sean significativas. Dado que este proyecto constituye también mi proyecto fin de carrera, comenzaré a dedicarle mucho más tiempo al texto que al código. Por lo que desde ya, pido ayuda para probar el compilador.

Un saludo.

Nueva versión 0.6 1 Febrero, 2007

Posted by pjmicrocontroladores in Lanzamiento de versión.
add a comment

Continuando el salto de versiones, sigo con la 0.6. Los cambios sensibles son el establecimiento de 32 registros virtuales de propósito general, y no 32 junto con el resto. También se ha solucionado la devolución de variables desde funciones. Hay cambios menores en el código como la eliminación de instrucciones no útiles o mejora de los comentarios.

Pronto una sorpresa.

Nueva versión 0.4 28 Enero, 2007

Posted by pjmicrocontroladores in General.
1 comment so far

Hola, ahora se elige un procesador por defecto “solo” si no se ha hecho por línea de comandos. Se ha mejorado parcialmente la devolución de parámetros y la dirección de las funciones son ahora de 2 bytes.

Por otro lado se ha cambiado la forma de numerar. Mi intención es rematar unas pocas cosas y lanzar la versión beta, nombrada con 0.9, por lo que debido al estado del proyecto, hay que aumentar la numeración más rápida.

Saludos

Nueva Versión 0.2.5 24 Enero, 2007

Posted by pjmicrocontroladores in General.
add a comment

Mejorado el soporte para microcontroladores con bancos de memoria RAM no implementados. Ahora se usarán un par distinto de rutinas de localización y liberación de memoria, dependiendo de los bancos de RAM implementados en el microcontrolador. Con esto se ahorra en memoria, código y tiempo de ejecución para esos micros.

Por otro lado veo que la numeración de versiones no va muy bien del todo, porque nos encontramos ante un compilador que puede considerare beta. Por ahora se seguirá así.

Saludos.

Nueva versión 0.2.4 21 Enero, 2007

Posted by pjmicrocontroladores in Lanzamiento de versión.
add a comment

En esta nueva versión se ha hecho la reserva de memoria de forma más estructurada. No es un cambio imprescindible en el código pero si necesario para la claridad del mismo. Además se ha cambiado la inicialización de las variables, en un nuevo bloque antes de main, permitiendo reservar la memoria de variables globales cuando realmente se conocen o no en la función main donde todavía pueden faltar algunas. Además para que las variables globales y estáticas definidas en ficheros distintos al de la función main, se permite indicar en la compilación del archivo de main la memoria extra a reservar por línea de comandos para guardar estas variables. Saludos.