jump to navigation

Congelada versión 1.0.0 5 mayo, 2007

Posted by pjmicrocontroladores in Lanzamiento de versión.
17 comments

Hoy lanzo la versión estable del porting de GCC a PIC16F877. Durante un mes he realizado profundas pruebas del compilador y le he usado en proyectos reales con el 16F877. Tras observar los resultados y no encontrar ningún tipo de fallo en el código de la versión 0.9.2 usado durante todo éste tiempo, he decidido congelar ésta como la versión 1.0.0. Realmente bastante antes se mostraba un código resultante robusto y fiable, pero no solo tenía que suponerlo sino comprobarlo con mis propios ojos.

El trabajo de desarrollar un compilador de C para PIC16F877 está completado, pero como ya he comentado otras veces, el objetivo desde mediados del proceso de desarrollo es un compilador, no solo para éste microcontrolador, sino para toda la familia 16F. Pese a que también he probado el microcontrolador PIC16F73 con idénticos y excelentes resultados, debo realizar pruebas más profundas con este último. Llegará un punto en el que tenga que presuponer que ciertos microcontroladores son soportados por el compilador, pero siempre me ha gustado andar con pies de plomo.

Lamentablemente es imposible que adquiera todos los modelos del 16F para comprobar los resultados por lo que pido ayuda para que todo aquel que desee programar en C otros modelos PIC16F, lo pruebe y me comente los resultados. La adaptación del compilador a otro modelo únicamente supone introducir una línea de código, por lo que no se exigen conocimientos avanzados para poder ampliar el compilador. No obstante estoy preparando, siempre que el trabajo me deje un poco de tiempo, un documento para realizar paso a paso la modificación.

Hasta entonces, saludos a todos.

PD: El proyecto ha sido elegido como finalista del I concurso universitario de software libre. Pese a que siento un gran honor de formar parte de los 7 finalistas, creo que es digno reconocer que todos los proyectos que han trabajado se merecen una enorme ovación. Enhorabuena a todos.

Programador por puerto USB para PIC 23 abril, 2007

Posted by pjmicrocontroladores in Información general.
33 comments

Tras mucho dilucidar, el mejor programador con diferencia para PIC por puerto USB que he encontrado, es el PICkit 2(1) de la casa Microchip. Gracias a una reciente actualización puede programar la mayoría de microcontroladores PIC, desde los PIC12 hasta los dsPIC3 pasando por los PIC18 y PIC24. Es realmente barato comparado con otras alternativas como el GTP USB plus. Además es abierto (que no libre), por lo que se puede bajar tanto las fuentes del programa para Windows, como los esquemas del programador desde la página de Microchip. Merece la pena comprarlo dado que los componentes salen igual en precio que el programador montado, pero es una buena experiencia para los que les gusta el “cacharreo”.

Para Linux, lamentablemente Microchip no da soporte, pero hay tres alternativas que funcionan con la primera versión y están trabajando para soportar también la segunda. Son pk2(2), pyk(3) y piklab(4).

Aquellos que piensen adquirirlo, les recomiendo no hacerlo directamente a Microchip cuyos portes son de 25 euros (para España), sino hacerlo en alguna tienda especializada cercana. En mi experiencia personal lo he adquirido en Farnell, pese a que sus portes son de 9 euros, pero en un día lo tienes en casa y se puede aprovechar además para surtirse de gran variedad de componentes más baratos que en la “tienda de la esquina”.

Solo me queda saludar y recordar que no se han encontrado ningún fallo en el código, pero si se han introducido varias optimizaciones en la versión del control de versiones.

(1) http://www.microchip.com/pickit2
(2) http://home.pacbell.net/theposts/picmicro/
(3) http://groups.google.com/group/pickit-devel
(4) http://piklab.sourceforge.net/

Versión 0.9.2, y adiós concurso. 8 abril, 2007

Posted by pjmicrocontroladores in Información general.
2 comments

Con el lanzamiento de la versión 0.9.2 del porting de GCC a PIC16f877 se termina el desarrollo para el concurso universitario de software libre.  Se han lanzado el código para Linux que ya incluye unas mini instrucciones para compilarlo y el código precompilado para windows. Se han añadido también un archivo auxiliar con las cabeceras de los tres microcontroladores que son soportados de base. Si alguien quiere ayudar al proyecto sin ponerse a desarrollar código puede escribir más cabeceras (apoyarse en el archivo p16f877.h que es más fácil) y ponerse en contacto conmigo por aquí.

Un participante en el concurso recomendó hacer un resumen de los proyectos. En lo que concierne a éste, realmente es muy complejo hacer un resumen que sea comprensible para todo el mundo. Lo intentaré explicar en una frase: He conseguido que GCC compile todo código C para el microcontrolador PIC16F877 de Microchip, de forma completa y correcta, en un entorno totalmente libre, permitiendo además compilar código para muchos más microcontroladores de la familia PIC16F.

Un resumen puede servir para mucho o para muy poco. Lo que no cabe duda es que la frase anterior debería ser analizada palabra por palabra para comprender realmente el alcance del proyecto.

Desde que comencé sé que éste no es un proyecto para la gran masa. Solo los buenos (hay que serlo para usar Uc) programadores que elijan C y elijan la familia PIC16F de Microchip, pueden interesarse por el proyecto y un 0.01 % de esos programadores aportarán algo al mismo. Sin embargo he conseguido que el compilar sea completo y correcto, que es mucho más de lo que nadie había conseguido en el software libre.

Con más ayuda podría haber soportado desde el código a todos los controladores de la familia 16 y comenzar mucho antes con la familia PIC18. Tengo que cambiar la falta de apoyo por tiempo, pero aún así, es notable el avance conseguido en un periodo tan corto. Pese a permanecer en la versión beta (por querer una versión 1.0 totalmente terminada y probada) el código esta completo.

Simplemente resta decir que el desarrollo seguirá hasta contener a todos los microcontroladores de la familia PIC16F. Se hará un alto en el camino para realizar librerías de dispositivos y se continuará después con el porting de GCC a los PIC18. Algunos juzgaron que la declaración de intenciones de los primeros mensajes del blog era inalcanzable. Lo siento chicos pero ésta ves os equivocasteis. 🙂

Saludos y hasta pronto.

Manual de usuario 7 abril, 2007

Posted by pjmicrocontroladores in Información general.
add a comment

He publicado en la forja el manual de usuario. Solo expone la sintaxis especial que se usa en el porting. Para la sintaxis completa de GCC se recomienda leer el manual de usuario de GCC.

Se han hecho numerosos cambios en el software, pero la mayoría son optimizaciones por lo que el código sigue funcionando pero mejor. De aquí al lunes publicaré otra versión en la forja para Linux y Windows, con la que daré por finalizado el desarrollo para el concurso universitario de software libre.

Sin embargo el desarrollo ni mucho menos se para, sino que seguirá principalmente en el control de versiones. Los próximos objetivos son afianzar el port actual, añadir más procesadores de la familia PIC16F de base y comenzar a planificar el porting de los PIC18, siguiente paso en la evolución. Pese a que la encuesta sobre los PIC12 no ha tenido casi aceptación (fundamentalmente por que solo los usuarios de la forja pueden votar) por ahora y a menos que alguien cambie mi parecer, yo no realizaré el port de los PIC12, dado que no tienen capacidad ni potencia como para ser programados en C.

Recuerdo que todo aquel que desee la última versión deberá preferiblemente tomarla del repositorio de subversión de la forja. Recuerdo también el comando:

svn checkout https://forja.rediris.es/svn/cls-pic-16f877

Sin nada más que decir, un saludo a todos.

Pequeños cambios, optimizaciones y fallos encontrados. 23 marzo, 2007

Posted by pjmicrocontroladores in Información general.
add a comment

Se ha creado una optimización para configuraciones de 32 registros virtuales por la cual, las llamadas a las operaciones de multiplicación y división son mucho más cortas y además no usan memoria matemática intermedia. Así eliminamos la carga inicial y posterior lectura desde esta memoria y reducimos el tamaño de memoria necesaria para almacenar valores intermedios. Debido al carácter impositivo de la solución tomada, se necesitan conocer los registros exactos donde cuadrarán el código para poder generarlo. Por ello, solo se ha implementado cuando se dejan los 32 registros virtuales por defecto, necesitando en los otros casos el antiguo método.

También se han corregido dos fallos en el código. Uno en el fichero de cabecera p16f877.h de la forja donde se usaban en cierto punto comentarios en ensamblador sin comentarlo para C, por lo que se producía un error en su ejecución. El otro error más sutil se producía cuando se usaban los modificadores por línea de comandos para des-/activar la cabecera de interrupción y la memoria compartida.

Estoy ahora solucionando un pequeño fallo en la optimización introducida para las funciones tipo divmod por la que para dos operaciones de idénticos operandos una para dividir y otro para el resto, se use una sola operación y no dos.

Sigo con la idea de crear un manual para el porting que vaya desde el nivel básico hasta un nivel más avanzado, pero es difícil sacar tiempo sobre todo para decidir qué es un nivel básico y qué uno avanzado. Si no encuentro una máquina que multiplique el espacio/tiempo en las próximas semanas empezaré a hacer pequeñas entregas que se compliquen poco a poco, hasta confeccionar con ellas el manual completo.

Por otro lado todos los cambios están en el control de versiones. Las versiones de Windows se compilarán en con grandes cambios y no para estos avances intermedios, ya que si no sufriremos otra “inundación” de versiones. Saludos.

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 Sin categoría.
113 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) https://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 Sin categoría.
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 Sin categoría.
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.