Tras haber asistido a un seminario introductorio a PIC16, debido a que los kits fueron entregados tras éste, me quedaron pendientes dos actividades: el blinky y ver si unas instrucciones muy específicas bcf y bsf, no serían reemplazables por unos ingeniosos ands y ors.
El blinky
Hasta donde entendí, a diferencia de los AVR, estos PIC siempre necesitan una referencia externa para el clock, hay que ponerle un cristal y unos capacitores... no tan fácil, en el curso no hay ningún diagrama de conexión, como que está asumido que vos ya sabés electrónica digital y lo que no conocés es PIC. Menciona por un lado que sólo se van a usar dos pines para programar (TX y RX) y luego dice "Comparte el control del pin MCLR", ¿mmh, qué querrá decir? Obviamente pedí el diagrama pero para hacer más interesante esta experiencia lo voy a recibir cuando haya tenido éxito o fracaso.
Entonces, al buscar diagramas relacionados a cosas como "pic16f tiny bootloader circuit diagram and usb uart adapter" lo segundo mejor que encontré fué un proyecto donde muestra que se usa RTS para pegarle a MCLR (a.k.a. RESET), pero eso es a la salida de un MAX232, la idea es usar el adaptador USB-UART provisto en el kit (dicho sea de paso, ese kit debería haber traido el cristal, los capacitores...)
Usando RTS para el RESET |
Finalmente, llegúe a un tutorial que al final dice:
Download the complete project folder from the below link:
Hardware design Files and Code Library
Sin RTS |
perfecto, es lo más sencillo posible que parecería funcionar, al reset habría que darle con el dedo.
Ahora, a tomar posesión del chip, lo primero es identificar las patitas:
Pinout colorizado por función |
Cada color es un puerto, en grís los mínimos necesarios para programarlo.
A pensar un poco, muy poco, el diagrama del tutorial es lo que hay que hacer.
Circuito armado |
A la derecha Tx y Rx al USB-TTL. Lo alimento con una fuente externa.
Antes de investigar nada más, a ver si funciona. Hay que bajar el tinybootloader para linux y probar...
En la versión 0.6 al bajar el .deb falla por dependencia imposible de satisfacer, python-gtk2,buscando, hallamos https://osdn.net/projects/sfnet_tinybldlin/releases/ que dice tener la versión 0.8.1, veamos... nop, tambien necesita python-gtk2
Depends: python-gtk2 but it is not installable
Depends: python-cairo but it is not installed
Depends: python-gobject but it is not installed
Depends: python-serial but it is not installable
Veamos de instalarlo basándonos en https://techviewleo.com/install-python-with-virtualenv-on-linux-mint/
sudo apt-get update
sudo apt-get upgrade
sudo add-apt-repository universe
sudo apt-get update
con algunos
apt-cache search python
determinamos que python-cairo y python-gobject estan disponibles, hay que usar pip para el resto
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py
ok, pero luego no puedo hallar los paquetes faltantes con pip
Hay varios caminos:
- resolver las dependencias
- es en lo que vengo fallando
- buscar otro programa
- no está apareciendo
- instanciar una virtual con una distro antigua que soporte python2
- quizás tampoco pueda resolver las dependencias
- puede ser que mplab no funcione ahí
- no importa, sólo la usaría para flashear
- usar wine
- seguramente se me complique el acceso al puerto serial
- chicken
- instanciar una virtual con windows
- se me puede complicar el acceso al puerto serial
- chicken
- actualizar el programa a python3
- y hacer un aporte a la humanidad...
- pero puede ser mucho tiempo
- evitar el bootloader
- esto significa faltar al espíritu de la experiencia original
- tendría que armar o comprar el programador
- no me interesa volver a hacer nada con PIC, quizás programar otro que tengo en un cajón
o mucho mejor aun, buscar un poco más hasta encontrar que
https://github.com/lcgamboa/tinybldlin
y un
sudo apt install python3-serial
abre el programa, pero... siempre hay un pero, dice que:
Tiny PIC BootLoader |
...no lo encuentra. Mirá fijo la captura y vas a ver que en la terminal desde donde lo abriste, dice que aprietes el reset. Esta captura no es sobre la primera iteración, donde esa terminal había quedado oculta.
Lo aprieto y nada...
Siguiento mi método de armar un mail para no mandarlo, donde fuí documentando todo lo hecho para solicitar ayuda, descubrí que había conectado mal Rx, así que a desoldar... y anda.
Situación: hay que apretar el reset ante cada operación, ok, razonable.
Puede hacer falta por única vez:
- Tools -> Options -> Embedded -> Build Tools -> Scan for Build Tools
Luego, para cada proyecto:
- New project -> Microchip Embedded -> Standalone project
- family -> Baseline 8-bit MCUs (PIC10/12/16)
- device -> PIC16F874A
- tool -> simulator
- header -> none
- compiler -> XC8 (v2.32) o similar
- new file -> main.c
#include <xc.h>
#include <pic16f877a.h>
#include <stdio.h>
#define _XTAL_FREQ 4000000
void main(void) {
TRISB = 0;
PORTB=0;
while(1) {
PORTBbits.RB0=0;
PORTBbits.RB1=0;
PORTBbits.RB7=0;
__delay_ms(500);
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB7=1;
__delay_ms(500);
}
return;
}
- Build
- copiar a tinypicbootloader la ruta tipo:
/home/carlos/Desktop/blinky.X/dist/default/production/blinky.X.production.hex
- write flash
- reset
La parte ingeniosa del análisis bcf -> andwf queda para otro día,
No hay comentarios:
Publicar un comentario