ATTINY85 amb el Arduino ID 1.6.x

Ja he vist com poder utilitzar l’IDE 1.6.x amb el Attiny i és molt senzill, el que passa que nosaltres volem que siga copiar y pegar… i a funcionar!

Les fonts que m’han funcionat són aquestes, el que hem de fer una vegada descomprés l’arxiu al hardware és renombrar l’arxiu de text “Prospective Boards.txt” a “boards.txt” i ja està tot (tot si has seguit l’anterior post).

Pel que veig, qui ha fet aquestes fonts ho ha fet així per a que copiem i peguem al boards.txt original el que nosaltres vulgam

Arduino a ATTINY85

Hui toca un poc d’arduino, una de les coses que segons llig ‘per ahí’ és molt senzill però que jo no ho he pogut fer, al final si però m’ha costat més del que em pensava. Crec que el culpable ha sigut un condensador de 10uf, que no el tenia! En tenia de 100uf però es veu que no era bo, tampoc entenc molt d’electrònica.

Aquest és l’esquema del attiny85, encara que els que tinc jo no tenen la ‘muesca’ de dalt, sols tenen el foradet que es veu a l’esquerra.

untitled

Introducció/Història

He tingut problemes per a fer-ho anar amb la versió 1.6.5 del arduino IDE utilitzant la placa Arduino UNO perquè a la xarxa hi ha molta informació per a programar els xips de la familia attiny i no s’indica si és per a la versió 1.0.x o 1.6.x del IDE, així que he utilitzat la versió 1.0.5 del arduino IDE per a poder carregar el codi (és important saber quina versió s’utilitza ja que canvien les estructures de les carpetes). També he tingut problemes en les plaques arduino, en la arduino uno no m’ha funcionat i en la arduino leonardo si!

L’únic error que ha aparegut i no he pogut solucionar es el de ‘firma no valida’ i el problema el causa el reinici que fa Arduino Uno al enviar-li el progrma. Per a poder programar al attiny primer li diguem a la placa d’arduino que va a ser un programador ISP i després escrivim un codi i li’l enviem (enviant-lo aquest al xip que hem connectat).

El problema ve que al rebre aquest codi el Arduino Uno es reinicia (funcionament normal del arduino uno cada vegada que s’obri una comunicació per serial USB (carregar codi, obrir monitor del arduino IDE,….). La solució en totes les webs que he mirat és posar un condensador de 10uf, condensador si que se el que és però 10uf no se quina medida és (no tinc ni idea d’electrònica). El que sí que se es que jo no tinc condensador d’eixes característiques, el que tinc és de 100uf i si el pose no em funciona 🙁

Segons llig ‘per ahí’ aquest condensador el que fa és aguantar energia durant el microtall d’alimentació al pin reset que fa que es reinicie la placa, és a dir… que anula el reinici.

Revisant per casa veig que tinc una placa arduino leonardo (que no m’agrada gens perquè la configuració de pins no és la mateix que la UNO i no val casi cap shield per a ella…) i la bombilleta del cervell(que ara ja és de led) s’activa: Arduino Leonardo no es reinicia quan s’activa una connexió per USB, aleshores no farà falta condensador, aleshores pot ser funcione!

Com no confie ja amb el IDE 1.6.x… vaig a veure el 1.0.x i en aquest si que em funciona

Explicació de la falla

Primer que res es configura l’arduino IDE per a poder programar la familia de attiny. Per a això es baixa aquestos arxius: versió 1.0.x i versió 1.6.x, i es guarden en la carpeta ./hardware dins de la carpeta principal del arduino. També es pot crear una carpeta ‘hardware’ dins de la carpeta on es guarden els sketch per defecte i descomprimir la carpeta allí.

Ara obrim arduino IDE i carreguem l’exemple ArduinoISP a la nostra placa. Modifiquem el codi per a que siga compatible amb la nostra Leonardo, tant sols modificar el que indique, indicar que és un Arduino Leonardo i pujar a la placa.

#define RESET     SS     canviar a     #define RESET     10
#define LED_HB    9      canviar a     #define LED_HB    13

Ara tindrem el led L parpadejant suaument, això és perquè està en mode ISP, jo crec que és perquè està en mode bootloader però no ho puc confirmar.

També modifiquem l’IDE per a poder pujar el codi a la placa. Es crea dins de la carpeta ./hardware una altra que anomenarem ‘leofix’ (es pot posar el nom que vulgues) i dintre d’ella crearem un fitxer anomenat programmers.txt (el nom d’aquest fitxer sí és important, sino l’IDE no el detectarà). Editem el fitxer i afegim:

arduinoispleo.name=Arduino as ISP (Leonardo)
arduinoispleo.communication=serial
arduinoispleo.protocol=arduino
arduinoispleo.speed=19200

El següent pas és connectar el attiny a la placa (millor fer-ho amb la placa sense alimentació jeje) com mostre al dibuix:

tG26dSulReviseu be que estiga tot connectat com s’indica! ja que a mi no em funcionava i era perquè se m’havia oblidat connectar el pin 10, quin cap…

A continuació mostre la configuració del Arduino Uno per a comprovar que no utilitzen les mateixes connexions:

VhUXVNgl

Ara configurem l’Arduino IDE, canviant el model de placa a ATtiny85 (Internal 1Mhz clock), deixem el mateix port que s’ha utilitzat per a pujar el codi al Leonardo i canviem el programador a Arduino as ISP (Leonardo) que hem creat a un pas anterior.

Per provar que va podem carregar-li l’exemple blink, que el que fa és encendre/apagar un led, modificant primer el número de pin de 13 a 0 (per exemple) i ara ja es pot pujar ‘sense problemes’.

Dir que aquest procediment sols m’ha servit per a la versió 1.0.5, segurament es pot adaptar per a la 1.6.x però com no tinc temps de investigar-ho i la primera versió encara es pot baixar de les fonts oficials… ací s’acaba la història.

Problemes:

Invalid signature: revisa el voltatge que arriba o si la placa programadora fa reset

No sync: No sincronitza perquè no s’ha escollit el port COM adequat, a una mala sempre pots desconnectar i tornar a connectar la placa (a mi m’acaba de passar ara mateix) o perquè el tipus de compilador no és el correcte (si has seguit els meus passos si que serà el correcte però per si a cas revisa-ho una altra vegada).

Error de compilació, no troba Arduino.h: M’ha passat i és perquè tens les dues versions instal·lades a l’equip i compartixen directori de configuració, ves a Archivo->Preferencias i canvia el directori (posa-li un 1 al final per exemple).

PIN  D5/A0/RESET

El pin D5/A0 està compartit amb RESET, això vol dir que fa la funció de reset. Es pot canviar i poder utilitzar aquest pin però aleshores ja no es pot programar amb ISP, es té que programar d’una altra manera. Així que si es vol utilitzar aquest pin el que es pot fer és programar-ho tot be, pensant en utilitzar aquest pin, comprovar que et funciona tot be (pensant que aquest pin si que anirà be) i deshabilitar el reset. No vaig a explicar com es fa perquè encara no ho se.

Una altra forma d’utilitzar el pin A0 és com a INPUT i que no sobrepasse els 2’2v, sino el reset s’activa.

 

Webs d’on he tret la info:

 

Moure partició arrel de SD a USB en la Raspberry

Després d’un temps utilitzant una raspberry amb el S.O. a la targeta SD ens podem trobar que aquest falla. Pel que he llegit ‘per ahí’ sol passar prou a sovint ja que en realitat la targeta SD no està preparada para tanta lectura/escriptura (això pareix). Però hi ha una solució per a aquest problema: Passar la partició arrel del S.O. a una unitat USB, és un canvi ben senzill però que depenent del tamany de la partició necessitarà més temps o menys (i estic parlant fins a varies hores).

El primer que es fa és identificar on està la nostra partició arrel, per a això es fa un df -h i localitzem la línia on indica que la partició és ‘/’:

Filesystem Size Used Avail Use% Mounted on
 rootfs 15G 1.9G 13G 14% /
 /dev/mmcblk0p2 15G 1.9G 13G 14% /
 devtmpfs 243M 0 243M 0% /dev
 tmpfs 49M 224K 49M 1% /run
 tmpfs 5.0M 0 5.0M 0% /run/lock
 tmpfs 98M 0 98M 0% /run/shm
 /dev/mmcblk0p1 56M 17M 40M 30% /boot

En aquest cas seria /dev/mmcblk0p2

Després identifiquem la nostra unitat USB, podem fer un ls /dev/sd* abans de connectar el nostre USB, connectar el nostre USB i tornar a fer un ls /dev/sd*, veurem que hi ha algun element nou. Imaginem que al nostre cas hem identificat el /dev/sda1 (sda és la unitat i el 1 és la partició, pot ser sda, sdb, sdc,…. i la partició 1, 2, 3,…).
Aleshores executem:

 sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=4M

Aquest comandament el que fa és fer una ‘foto’ de la partició arrel i plasmar-la a la partició que li hem indicat (borrant tot el que hi havia abans, per supost). Després es necessita revisar la nova partició en busca d’errors. Si no es fa no es podrà seguir al següent pas.

 sudo e2fsck /dev/sda1

Ara tenim una copia exacta de la partició de la SD en la unitat USB, però segurament la unitat USB té més espai i el estem desaprofitant. Per a ocupar tot l’espai possible executem:

 sudo resize2fs /dev/sda1

I ací podriem dir que acaba la primera part: la migració de dades. Ara comença la segona part: la configuració del S.O. per a iniciar amb la nova partició com a partició arrel.
Primer muntem la nova partició

 sudo mount /dev/sda1 /mnt

I editem el seu fitxer fstab

 sudo nano /mnt/etc/fstab

El que anem a fer és canviar el /dev/mmcblk0p2 que haviem vist al primer pas per el /dev/sda1 que és la nova partició (en aquest cas té aquest nom, recordeu al vostre cas pot tenir un altre nom)

Exemple:
Abans

 proc /proc proc defaults 0 0
 /dev/mmcblk0p1 /boot vfat defaults 0 2
 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1
 # a swapfile is not a swap partition, so no using swapon|off...

Després

 proc /proc proc defaults 0 0
 /dev/mmcblk0p1 /boot vfat defaults 0 2
 /dev/sda1 / ext4 defaults,noatime 0 1
 # a swapfile is not a swap partition, so no using swapon|off...

Ara ja podem desmuntar la partició nova

 sudo umount /dev/sda1

I anem a editar un fitxer de configuració del boot

 sudo nano /boot/cmdline.txt

On modifiquem el root=/dev/mmcblk0p2 per root=/dev/sda1

Ara ja si que podem reiniciar i comprovar que estem a la nova partició. Ho podem comprovar amb un df -h per a veure les particions muntades i el tamany.

La partició vella la podem deixar ahí sense tocar, no se sap mai si algun dia es necessitarà per a alguna emergència com voler utilitzar la raspberry sense la unitat USB. Per a aquest cas sols fariem l’últim pass, tornant a posar el root=/dev/mmcblk0p2.

Aquesta informació l’he extret i mig traduït de:
http://travisred.github.io/using-a-usb-drive-as-os-root-on-a-raspberry-pi/