miércoles, 31 de diciembre de 2014

Problemas con PICKit2 en MPLAB X?

Estas navidades (a parte de retomar las entradas que me faltan de nuestro Wirelearn Robot Shield), se me ha ocurrido una idea y para llevarla a cabo he tenido que desempolvar mi PICKit2. Después de leer un poco acerca del mundillo de los microcontroladores de Microchip para ponerme al día, he descubierto que MPLAB X IDE ya está en su version 2.26. Además, el compilador Hi-Tech C de la misma casa está en desuso, y lo reemplazan la nueva serie de compiladores XC-x. 


Escenario

Por lo tanto mi escenario es el siguiente:

- Sistema Operativo Linux Ubuntu - Utopic Unicorn (debería dar lo mismo)
- MPLAB X IDE v 2.26
- Compilador XC-8 debidamente instalado y activado en el IDE.
- Programa sencillo (yo hice un blink con un LED en el pin RD4)

Me dispongo a compilar (build) y todo va bien, pero a la hora de programar, obtengo un mensaje de error tal que así:

The programmer could not be started: Could not connect to tool hardware: PICkit2PlatformTool, com.microchip.mplab.mdbcore.pickit2.PICkit2DbgToolManager

Solución

  • Antes de nada, necesitas un PC con windows (a poder ser la versión 7). Descárgate la aplicación PICKit 2 v2.61 aquí.
  • Instala la aplicación en tu PC con Windows 7 (o si eres un valiente intentalo con Wine y nos cuentas).
  • Conecta el PICKit2 y cuando esté reconocido e instalado, abre la aplicación. En la pantalla principal de la aplicación debería mostrar que está conectado.
  • Ahora vamos a Tools > Calibrate VDD and set Unit ID. Damos "next" 3 veces hasta saltarnos la historia del VDD que no nos interesa. Entonces nos aparece una pantalla en la que podemos introducir un "Unit ID". Ponemos lo que nos de la gana, (sin caracteres raros) y finalizamos. Hacemos lo que nos dice de esperar a que el USB esté listo.
  • Reiniciamos MPLAB X y listo. Con esa ID, ya puedes utilizar tu programador en cualquier PC


Al parecer es necesario en MPLAB X que el PICKit2 tenga una ID (los dispositivos antiguos no estan serializados y por defecto vienen sin ID).

Solamente añadir que a mi me aparece el PICKit2 con dos puntitos amarillos en el las propiedades del proyecto para el PIC que utilizo (16F887), y funciona perfectamente con el compilador XC-8, tanto para programar, como para hacer debug.

viernes, 27 de junio de 2014

Depuración hardware en android (Ubuntu)

Esta entrada es de especial importancia para aquellos que os hayáis agenciado un teléfono/tablet con sistema operativo android, de marca no precisamente conocida.


Aquellos que hayáis probado a desarrollar para android pensaréis, igual que el común de los desarrolladores de ésta plataforma, que utilizar dispositivos virtuales, o emuladores, es lento y farragoso. Para ello, el SDK de android nos permite conectar nuestros dispositivos android al PC y utilizarlos como dispositivo de pruebas. Ésto es mucho más rápido y tiene la ventaja de que ves la aplicación funcionando en un terminal de verdad.

Sin embargo no todos los dispositivos se comportan de la misma manera cuando los conectamos a nuestro PC para probar nuestras apps en ellos. En mi caso, hará cosa de un año me compré una tablet china (PiPo Max M1), y cuando la conecto al PC, el adb ni se inmuta. He de decir que con mi teléfono (Xperia Ray) no tengo ningún problema. Es detectado automáticamente por mi PC y sale en la lista de dispositivos.

Después de dar muchas vueltas y probar muchas soluciones, he dado con un método para hacer funcionar (al menos) los dispositivos mencionados. En el caso de la tablet, podemos decir que cualquier dispositivo con chipset RockChip 3066, ya que todos tiene el mismo "vendor id". Dicho método os lo proporciono en forma de script de bash, como buen programador y amante de linux.

Notas adicionales:
  • Activad el modo debug en vuestro teléfono.
  • Ejecutad el script como super usuario.
  • Debeis proporcionar el "vendor id" de vuestro dispositivo al script como único y necesario parámetro. Si no lo conocéis, podéis buscarlo aquí.
  • Para los dispositivos chinos lo tenéis un poco más complicado pero buscando un poco suele aparecer. Para los que tengáis un dispositivo RockChip 3066, el "vendor id" es 0x2207
  • Conectad vuestro dispositivo en modo de almacenamiento antes de ejecutar el script (no es imprescindible, pero al final de la ejecución se muestra la lista de dispositivos conectados y detectados)
  • Es crucial, que si detenéis y arrancais el servidor de adb, lo hagáis como superusuario. De lo contrario el dispositivo podría no aparecer, o como me pasa a mí, poner 20 signos de interrogación y un "no permissions" al listar los dispositivos.
Es posible que al final de la ejecución la lista de dispositivos siga vacía, o invariable. Esperad unos segundos y ejecutad adb devices. Es posible que el comando se ejecute antes de que se detecte el dispositivo.