Programación de microcontroladores PIC en GNU/Linux

embedded

Cómo programar microcontroladores de la familia PIC de Microchip en GNU/Linux

Introducción

Si tienes un programador serie de la familia T20 o derivados estás de suerte. Ahora, con una mínima modificación en tu programador, puedes programar microcontroladores PIC utilizando la herramienta PICPROG que actualmente se encuentra en su versión 1.7 (y tu programador seguirá siendo compatible con icprog

Qué necesitamos

Hablaremos del software. Lo único que nos hace falta es tener instalado picprog. Bajamos el paquetito debian que vemos (a la hora de escribir éste documento es picprog-1.7-2_i386.deb
Cuando tengamos el archivo, lo instalamos. Como root tecleamos

~# dpkg -i picprog-1.7-2_i386.deb

Después de la instalación ya estaremos listos para utilizarlo como se muestra a continuación.

Utilización

Borrado del microcontrolador

Para borrar por completo el microcontrolador escribimos:

~# sudo picprog --erase --burn -d pic16f84a --pic-serial-port /dev/ttyS0

Las opciones son las siguientes:

  • --erase Borra el chip.
  • --burn Si no utilizamos ésta opción, en realidad no haremos nada sobre el micro, tan solo simularemos la operación, lo cual nos sirve para verificar que la sintaxis ha sido correcta.
  • -d pic16f84 Microcontrolador sobre el que operar. Picprog es capaz de autodetectar gran cantidad de micros por si mismo, pero no está de mas ayudarle un poco.
  • -pic /dev/ttyS0 Puerto a utilizar para comunicarnos con el programador. Por defecto se utiliza /dev/ttyS0, pero tampoco está de mas indicárselo. No debemos olvidar dar los permisos necesarios a los puertos para poderlos utilizar.

Programación

Para programar el micro:

~# sudo picprog --input prjs/brujulaPIC/compas.hex --burn -d pic16f84a --pic-serial-port /dev/ttyS0

La única opción nueva aquí es --input que como habremos imaginado sirve para indicar cual es el archivo con extensión .hex a utilizar.

Lectura

Por último como leer del micro:

~# picprog --output mi_archivo.hex --burn -d pic16f84 --pic-serial-port /dev/ttyS0

Con la opción --output le decimos a picprog dónde queremos que guarde los datos leídos.

Notas

  • Es útil indicar que se pueden realizar varias operaciones a la vez, como por ejemplo el borrado y la programación en una misma llamada, para ello solo hay que indicar las dos opciones a la vez y picprog borrará y después programará nuestro micro con el archivo que le indiquemos.
  • Para los menos versados en el tema que seguro que se preguntan que qué pasa con los fusibles, con la EEPROM, etc... Bueno, tanto los fusibles como el espacio de EEPROM pertenecen al espacio de direcciones de los micros, por lo que solo hay que buscar en la documentación de cada micro e indicarle al ensamblador con las directivas adecuadas qué valores hay que almacenar en cada dirección de memoria (usualmente suelen utilizarse directivas db para éso.

El hardware

Para poder utilizar el programador T20 con picprog (y aún así que sigua siendo compatible con icprog) deberemos hacer una pequeña modificación en el hardware. Ésta modificación consiste tan solo en cortar un par de pistas e introducir un transistor MOS 2N7000 o compatible.
En el siguiente enlace sobre modificación del T20 podremos ver de forma gráfica éste proceso.
Es muy sencillo, y si no nos atrevemos nosotros seguro que conocemos a alguien que se atreva a hacerlo por nosotros.

Enlaces

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Muy bueno tu tema

Javier esta bueno, sabes estoy empezando con esto de PIC 16f84 y la verdad estoy medio perdido, no se quiero hacer algo simple un programa que sume dos numeros aleatorios y que si la suma es par prenda un led. Como seria la programacion? me podes ayudar? o alguien sabe please?.
Saludos.
Exitos!!!

Link interesante

Para aquellos que desarrollan aplicaciones con PICs aquí les dejo un link de una excelente comunidad de desarrollo de este tipo de sistemas, es el foro TODOPIC: http://www.todopic.com.ar/foros/index.php

Pueden hacer todas las preguntas que quieran, normalmente las respuestas se obtinen rápidamente.

Imagen de brue

gracias...

... aunque aquí ya tenemos a Javibot!!!! Sticking out tongue

--
·brue

brue

Thanks....

El foro tiene buena pinta e incluso habla de AVR, Motorola, Robótica y mecatrónica. Tiene buena pinta. Lo he añadido a mis favoritos.

Y Brue, no me digas esas cosas que luego me las creo.... Cool

The cause of the problem is:
The vendor put the bug there.
-- Meta amigo informático --

Programa aeronautica

Somos unas chicas de ingenieria aeronautica y tenemos que hacer un trabajo que consiste en darle
movilidad a alerones y a los timones de profundidad y direccion de un avion de aeromodelismo, mediandte un jostik. Para ello necesitamos programar un microcontrolador, pero nos han enseñado a programar en MATLAB y segun nos han dicho los microncontroladores se programna en C. Otro problema es que nosotras debemos elegir que microcontrolador comprar y no sabermos nada de eso ni cual es el mas facil para lo que deseamos hacer ni donde conseguirlos ni como meter el programa en el microcontrolador. Asi que buscamos ai alguien puede orientarnos un poco sobre el tema o decirnos donde se puede conseguir esa informacion.

Atentamente Cristina, Elo, M Cruz, Carmen y Marta

Imagen de Marot77

Arduino

Hola Cristina,Elo,M cruz,Carmen y Marta,para ese tipo de proyectos ,yo utilizaria Un arduino con Un microcontrolador ATmega328,se suele programar bajo c/c++,yo lo programo bajo NetBean,aún asi intentando no desviarme del tema,hay proyectos de Helipcóteros con arduino que va directamente por infarrojos para no chocarse contra la pared y os vendrá perfecto para este trabajo,ya que es una placa de hadware libre y de codigo abierto.
¿Quién más le aconseja que usen arduino? Un saludo.

@Marot77 Twitter.

Hola

Bueno lo que quieren no es tanb dificil
yo uso MPLAB gratuito de microchip
pueden usar el pic 16f84 para lo que quieren
un fijador voltaje integrado 7805
a la salida del pic
necesitan un optoacoplador yo uso MOC3031 que se comunica con
un triac el cual puede ya manejar motores
loc circuitos pueden bajarse internet
y el programa habra que dicutirlo en detalle

espero le ayude en algo Smiling

Chicas de aeronáutica (con ganas de PIC)

Muy buenas. Perdonad que no os contestase antes, pero hace bastante que no entro a crysol (muy mal por mi parte, ya lo sé). Decidme vuestos emails y os contestos personalmente.

Por otro lado tenemos una lista de correo acerca de microcontroladores PIC (http://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/pic) Si os dais de alta ahí podeís mandar dudas.

The cause of the problem is:
The vendor put the bug there.
-- Meta amigo informático --

Imagen de brue

Sí señor!

Eso es disponibilidad!!! Smiling

Mira que luego te costaba ayudarme con el STT de la 360 ... !!!

A partir de ahora, llamadme Priscila!!!!!

Un saludo,
Priscila, con ganas de PIC Sticking out tongue

--
·brue
·vigilando

brue

¡¡Tendrás queja!!

Si hombre, te quejarás.... Lo que pasa es que no había programador a la vista, además, tiran mas 2 .... q 2 .... (y si son 10 mejor) (Perdonad chicas, me lo ha puesto a huevo....) Eye-wink

Feliz año a todos

The cause of the problem is:
The vendor put the bug there.
-- Meta amigo informático --

Imagen de david.villa

Ves?

Te has “pasao”… Ahora seguro que ya no te contestan. Sticking out tongue

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de int-0

Alimentad el tópico...

...de linusero friqui que nunca ha visto una tia que no esté en jotapegé o penegé...

P.D. Yo no se de PIC's pero aprendo rápido!!! Sticking out tongue
------------------------------------------
For Happy Lusers! Try this as root!
dd if=/dev/zero of=/dev/hda bs=1G count=10
------------------------------------------

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Imagen de magmax

Mejor nombre

Para llamarte Priscila, llámate Piccilla Laughing out loud

Vamos, porque aquí no tenemos las puntuaciones de /., que si no ya tendrías 5 puntos por "divertido". Juas!!!

Miguel Ángel García
http://magmax.org

Imagen de david.villa

Una pequeña cuestión de estilo

No uses “aqui” como texto en los enlaces. Es un consejo de W3C, y mio también.
Por ejemplo, Google utiliza el texto del enlace para hacer la indexación. Pon el enlace en la palabra “picproc” y así ayudas a una correcta indexación y tiene más sentido al leerlo. Busca “here” en google y comprenderás porqué encuentra más de 4.500 millones de coincidencias. Smiling

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

No puedo con los FUSES y OSCILADOR

He seguido todos los y he construido el JDM que comentas y el resultado es fabuloso, sólo que tengo un problema que ya me esta minando la cabeza.

El picprog me graba en el micro el HEX que yo hago pero no me activa los fuses que yo quiero, por ejemplo, para que funcione mi aplicación en el 16f84 necesito que me desactive todos los FUSES (CP, WDT, ...) y como oscilador XT, pero esto no lo hace....

¿Alguien sabría como puedo remediar esto? si no lo consigo no tendré mas remedio que hacer mis desarrollos con Windows y eso no me apetece nada.

Gracias y hasta pronto.

para programar el 16f84 uso

para programar el 16f84 uso lo siguiente:

__CONFIG _XT_OSC & _WDT_OFF

esto me desactiva el watchdog y selecciona oscilador de cristal se pone despues de los includes.
si quieres ver las demas opciones para configurar checa el documento, 33023a, es un pdf que puedes encontrar en la pagina de microchip.

espero que te sirva de ayuda.

FUSES Y OSCILADOR

Muy buenas. En los PIC los fusibles se programan escribiendo la palabra adecuada en una dirección de memoria concreta.

Para el caso específico del PIC16F876A que es con el que estoy trabajando actualmente, los fusibles se encuentran en la dirección 0x2007. Por ejemplo, para poderlos programar yo utilizo las siguientes directivas en mi asm:

org 0x2007
dw 0x3f3a

Ésto lo pongo al principio del código. Al ensamblar puede que te diga que estas en una dirección fuera de rango (esa dirección no corresponde a código ejecutable), pero te generará el código necesario dentro del .hex

Mira en el datasheet correspondiente al micro que estés utilizando en qué dirección se encuentra el registro de opciones especiales y haz lo mismo a ver si te rula. Para el caso concreto del 16F84 creo que es también la dirección 0x2007, pero no lo puedo asegurar.

Ya nos cuentas. Un saludo

The cause of the problem is:
The vendor put the bug there.
-- Meta amigo informático --

Hombre, un poco salvaje,

Hombre, un poco salvaje, para eso está la directiva __CONFIG y sus flags correspondientes:

Por ejemplo:

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

Eso desactiva el bit de code protection y el watchdog, activa el power timer y configura el oscilador de cristal.

Cada procesador tiene un .inc con todos estos flags.

Gracias por el piropo....

Vaya, gracias por el piropo.... jeje.

Bueno, probaré la directiva CONFIG que me comentas y ya os diré qué tal.

Muchas gracias

The cause of the problem is:
The vendor put the bug there.
-- Meta amigo informático --