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:

 

Deixa un comentari

L'adreça electrònica no es publicarà Els camps necessaris estan marcats amb *