Quincalla xinesa

Ara que estem en aquestes festes consagrades a la família, l’amor i l’alegria al consumisme més pur i dur, em sembla que és el moment més adient per fer una petita explicació de la mena de compres que fa algú com jo, i la mena de regals que li encantaria rebre enlloc de colònies, mocadors, o calçotets. No em malinterpreteu, jo faig aquestes compres durant tot l’any, i no només en aquestes dates; el Nadal només ha estat l’excusa per començar a introduir el tema d’avui.

No cal dir que quan parlo de comprar material, vull dir material electrònic, i evidentment, a través de la xarxa. L’època en que podies comprar resistències o condensadors a cada poble mitjà ha passat a la història fa temps. Jo ho havia fet, però mica en mica vaig haver de conduir més i més quilòmetres per comprar els components més habituals com resistències, condensadors, diodes i demés. Comprar la meitat dels xips va esdevenir impossible; fins i tot anant a les dues últimes botigues decents d’electrònica que subsisteixen a tot el meu país (que jo sàpiga), molt lluny de casa meva, no acabes trobant el que busques, en el millor dels casos quelcom similar que t’obliga a canviar tots els teus plans. I llavors t’adones que has perdut quasi tot un dia i 50€ de gasolina per comprar 10€ en components. Sort que sempre ens queda la xarxa.

Si us hagués de recomanar que féssiu compres de material per aquesta afició que compartim, us recomanaria llocs web que tenen productes bons, molt ben documentats, fiables, i amb una assistència al client i una logística que fan posar vermells de vergonya els directius de les millors marques del món. Aquest serà el tema d’un altre dia, perquè avui em vull endinsar en un món molt més insegur, desconegut, fosc i emocionant: el de la quincalla “made in xina”. Deixeu-me que us ho expliqui.

Quan parlo de “quincalla” em refereixo a aquests petits mòduls, eines i aparells de molt baix cost que són de gran ajuda per desenvolupar el nostre projecte a la fase de prototipatge, abans que ens plantegem fer una placa a mida i el software definitiu. Pantalles LCD, bateries lipo, “breakout boards” de xips comercials, arduinos clònics de baix cost, carregadors, reguladors, convertidors dc/dc, drivers de motors i un llarg etcètera. No entrarien en aquesta categoria eines imprescindibles com les estacions de soldadura, els oscil·loscopis, les fonts d’alimentació, ni les plaques de desenvolupament comercials; tot això és massa car per anomenar-ho “quincalla”, i jo personalment no tinc clar si m’arriscaria a comprar-ho segons on, tenint en compte la importància que té per poder treballar en condicions.

Pel que fa al “made in xina”, parlo dels llocs on podem comprar-ho directament, perquè tant si és de marca com si no, haurà estat fabricat a la Xina i/o països propers del sud-est asiàtic. I si és barat encara és més probable, però no hi haurà tants intermediaris, controls de qualitat, transportistes i duaners implicats. Parlo de comprar directament als llocs que ja deveu conèixer, com poden ser dealextreme, aliexpress, miniinthebox i semblants, però sobretot, ebay. Per mi cada dia encara és motiu de sorpresa veure el preu que et pot costar segons què, amb el transport des de l’altra banda del món inclòs. I no parlo de guanyar subhastes, sinó simplement del preu que demana el venedor per comprar-li el producte directament. És clar que el canvi de divisa ajuda molt a obtenir aquesta sensació, però tot i això, no deixa de ser sorprenent.

Com ja us he dit, he fet servir aquest sistema en moltes ocasions, amb resultats molt diversos, i tinc la intenció de seguir-ho fent. He de reconèixer, a més, que estic enganxat; buscar el mateix producte aquí i allà a veure quines diferències hi ha i qui el té més barat; obrir cada dia la bústia esperant veure el petit sobre encoixinat de paper kraft; muntar circuits de prova per saber si funciona o no; deixar comentaris al venedor, donant-li les gràcies o insultant-lo perquè ha passat un mes i mig i no he rebut res… És tot un món, i per mi, molt interessant, divertit i fins i tot emocionant.

Que m’agradi aquest sistema “arriscat” de comprar no vol dir que deixi d’utilitzar les altres fonts que us comentava al principi quan vull un producte fiable, de qualitat, i ben documentat. Simplement no sempre necessito tant, o sigui que em puc estalviar uns diners i fer servir aquest altre mètode. Avui us posaré un exemple d’això que us parlo, una de les meves últimes adquisicions.

modul i2c memoria i rtc

El mòdul del DS1307
El primer exemple d’aquesta sèrie serà un mòdul que conté un RTC (rellotge de temps real, o real time clock). Un RTC, per qui ara estigui fent una cara rara, és un xip que manté l’hora, com un rellotge. Això és important pels nostres circuits que necessiten saber l’hora i el dia que és, ja que els microcontroladors no saben a quin dia viuen. Per ells l’únic temps que coneixen és relatiu, per dir-ho d’una manera quants milisegons han passat des de l’última vegada que han rebut alimentació o han fet un reset; però no si és de dia o de nit, ni si l’any és el 1995 o el 2018. Segur que hi ha un RTC a l’ordinador que ara mateix mires, o dins el teu cotxe, per exemple. Una característica important dels RTC és que segueixen comptant, per tant mantenint l’hora, encara que no rebin corrent. És obvi que necessiten alguna energia per fer-ho, però molt poca; per això és sol fer servir una pila petita. Recordes la pila tipus rellotge que hi ha a la placa base del teu PC?

Un xip molt popular per aquest ús, i relativament fàcil de fer servir, és el DS1307. Hi ha llibreries per Arduino arreu, i es poden trobar moltes explicacions de com funciona a la xarxa. Es comunica utilitzant I2C, la qual cosa vol dir que només faran falta dos pins del nostre micro per obtenir les prestacions que ens dóna. He buscat un mòdul per aquest xip a la xarxa, i he trobat aquest.

“Arduino I2C RTC DS1307 AT24C32 Real Time Clock Module For AVR ARM PIC SMD”

Si us hi fixeu a la pròpia denominació hi ha tota la informació rellevant (tags). Adoneu-vos que la paraula “Arduino” no falla mai en aquesta mena de quincalla. És una bona paraula clau per les vostres cerques a ebay; jo la tinc com a etiqueta per descobrir nous productes, de fet.

Aquest és un dels llocs més barats que he trobat (1,15€ amb transport inclòs!), però no un dels que ofereix més informació. La descripció es redueix a les següents línies:

    Item description:

  • Brand new and high quality.
  • This is the DS1307 Real Time Clock developed by one of our designer waiman.
  • The module comes fully assembled.
  • The DS1307 is accessed via the I2C protocol.
  • Two wire I2C interface.
  • Hour : Minutes : Seconds AM/PM.
  • Day Month, Date – Year.
  • DS1307 based RTC without LIR2032 battery.
  • 1Hz output pin.
  • 56 Bytes of Non-volatile memory available to user.
  • Size: 2.9cm x 2.6cm – 1.14inch x 1.02inch.

Si heu mirat la foto amb atenció, haureu vist dos xips i no un de sol (el DS1307). L’altre és una memòria (Atmel AT24C32), o sigui que aquest mòdul és doble, és a dir, un breakout board per dos xips alhora. Em crida l’atenció que, malgrat al títol de l’article si que hi apareix, a la denominació no hi ha informació ni cap referència a l’altre integrat que hi ha a la placa, la memòria; la descripció és exclusiva pel DS1307. I no és massa informació, és clar, però en aquests casos no espereu gaire més. De fet, l’anglès no només és intel·ligible, sinó que és quasi correcte, i això ja és molt! Un lloc seriós proporcionaria l’esquema (complint un dels requisits més bàsics de l’Open Source Hardware), un manual, datasheets, i potser llibreries, exemples de muntatges i codi font… Però això és ebay i xina, no un lloc seriós de “maquinari de codi obert”, recordes? Ens haurem d’espavilar.

Com que aquests venedors d’ebay porten tots el mateix (i mai no saps qui ho fabrica, és una de les principals característiques de Xina), podem trobar informació millor en altres venedors. El risc que el producte sigui molt diferent és mínim; compareu les fotos i us n’adonareu. Feu la prova, busqueu “DS1307 RTC module” a ebay i ja em direu el què. El xip de memòria no em fa cap falta, però he trobat mòduls semblants que no la porten i valen el mateix, o sigui que agafo aquest i ja està.

modul a dx

Mireu on l’he trobat, també, i és clavat!

Ara fem un “fast-forward” en el temps de quasi un mes i ens situem quan m’arriba el paquet a casa (quasi un mes? us ho havia dit!). Està ben embolicat i ha arribat il·lès, és hora de fer les proves. Per fer-les, és clar, faré servir un Arduino. Però no faré servir la meva venerable Diecimila, ja que la tinc ocupada en una altra cosa que estic fent; ni tampoc l’Arduino Nano, que també el tinc muntat en un protoboard per un altre projecte (sí, sempre ho tinc tot a mitges, començo moltes coses i no acabo res). Faré servir un Arduino Pro Mini clònic (l’original és de Sparkfun) que vaig comprar seguint aquest mateix mètode que us he comentat, i que va arribar fa unes setmanes. Llavors li vaig soldar les tires de pins mascle, però no el vaig arribar a provar, ara serà el moment. Tot plegat ho muntaré en un protoboard molt petit que prové del mateix lloc. Us en poso la referència aquí a sota, per si us interessa. Per cert, quasi me n’oblido! Cal posar-li una pila al mòdul perquè faci la seva feina, al meu cas li he posat una CR2032 que tenia per aquí, de fer-la servir en altres projectes. I per connectar-lo al protoboard cal soldar-li uns pins mascle als forats que porta per aquest ús. És només un moment de soldador.

protoboard a ebay

Protoboards, mai no en tens prous! i si són de colors, millor!

mini arduino a ebay

Sí, tot un Arduino per 2,27€! i amb 32K de RAM, no 16K!

Per començar la prova, he de connectar el mòdul del rellotge amb l’Arduino. El GND i el VCC estan clars, com a mínim des del moment que miro el datasheet i m’adono que el DS1307 accepta els 5V de l’Arduino sense problemes; a partir d’aquí a buscar-se la vida. El primer lloc que he trobat amb una mica de documentació és Adafruit, on hi ha un tutorial, com sempre excel·lent. Segons el tutorial, la connexió l’he de fer als pins A4 i A5; molt fàcil, si no fos perquè són els dos pins que no té el petit Arduino Pro Mini! Després de mirar una bona estona la documentació de la llibreria “Wire” a la web de l’Arduino, arribo a la conclusió que no puc fer servir dos pins que no siguin aquests. Per sort, hi ha dos forats a la placa d’on puc treure l’accés a aquests dos pins. El problema és que aquests forats no estan alineats amb els forats del protoboards, o sigui que no hi puc soldar simplement uns connectors mascle com a la resta de pins; la solució és soldar dos cables, i connectar-los directament al punt desitjat del protoboard. No queda massa bonic, però és efectiu al 100%. Trigo més a escalfar el soldador que a soldar els dos cables, però un cop fet faig els ponts amb la placa del rellotge (pins SCL i SDA) tal com diu el tutorial i llestos! El hardware per a la prova està a punt, aquí teniu la foto.

muntatge modul rtc i arduino

Foto del muntatge de prova, amb l’Arduino Pro Mini, el protoboard, el mòdul que estic provant, i només 4 cables. D’aquest cable gris que creua el mòdul encara no n’he parlat, seguiu llegint.

Tot seguit és el torn del software. Per estalviar-vos una estona avorrida explicant tot el que he provat i buscat que no ha portat cap resultat positiu, aniré directament al que sí que ha funcionat i ha estat fàcil de fer anar.

El primer que he fet ha estat instal·lar la llibreria Time que hi ha a la web de l’Arduino. He fet servir un programa -o sketch- que es diu “TimeRTCSet.pde”, i que es troba entre els exemples inclosos a la mateixa llibreria. Carregar el programa al microcontrolador ha estat el procés de sempre: connectar el cable FTDI a l’USB de l’ordinador i a l’Arduino; així ja tenim una connexió sèrie entre el PC i l’Arduino. Al meu cas el port sèrie virtual es diu “/dev/ttyUSB0” (estic fent servir Ubuntu Linux), el vostre pot ser diferent. Un petit problema que he hagut de resoldre ha estat dir-li a l’IDE de l’Arduino que la placa que estava fent servir era una Duemilanove amb Atmega328, fins que no ho he trobat he anat provant una i altra, perquè el programa no pujava. Coses de fer servir Arduinos estranys… Una vegada resolt aquest detall, el programa ha pujat sense problema. He obert la consola sèrie de l’IDE a 9600 baudis i he vist el que m’estava dient el micro. Fins aquí tot va bé, ara he de posar el mòdul en hora.

Això és el que rebem pel port sèrie la primera vegada que connectem el mòdul, no està posat en hora.

Llegint alt per alt el codi del programa que he carregat al micro (no hi ha millor documentació que llegir el codi font), sembla evident que la manera de posar en hora el rellotge és enviar un comandament a través de la connexió sèrie que tinc oberta. Aquest comandament és una lletra ‘T’ majúscula, seguida de la data en format Unix, és a dir, el nombre de segons que han passat des que van començar a sonar les campanades de cap d’any del 1970 (jo no recordo com va ser aquella nit, més que tot perquè encara no havia nascut).

Per mi ha estat molt fàcil obtenir aquest nombre, (ja us he comentat que faig servir Linux?) simplement he obert un terminal i he escrit: “date +%s”, el resultat ha estat 1387631082. Ignoro com us ho fareu els que feu servir ordinadors bonics amb pomes que brillen, o ordinadors normals amb sistemes operatius que tenen finestres amb els vidres de colors. Sempre podeu calcular-ho manualment (però no feu trampes, sense calculadora!), o buscar un lloc online que ho digui o ho calculi (segur que hi és, hi ha de tot). Seguint amb l’exemple, jo he posat “T1387631082” (la T que us deia i el número que m’ha donat el terminal) i el rellotge s’ha posat automàticament en hora a les 13:04:42 del 21 de Desembre del 2013. Que fàcil!

Ha estat enviar la cadena alfanumèrica pel port i el rellotge s’ha posat en hora.

Una vegada posat en hora, podem desconnectar l’alimentació del mòdul, que seguirà mantenint l’hora, gastant molt poca energia (en algun lloc he llegit que una pila nova ens pot durar més de 10 anys!). Quan tornem a connectar l’Arduino al port sèrie de l’ordinador, ens seguirà donant l’hora correctament.

O aquesta és la teoria, perquè quan l’he tornat a connectar, el programa m’ha dit que la hora no estava posada, com si mai l’hagués posat en hora. Que estrany, no funciona. És l’hora del “troubleshooting”! Per molt senzill que sigui un mòdul, projecte, o programa, aquest moment sempre arriba. En aquests casos sempre recordo una màxima que utilitzo des que vaig començar a programar, fa molts anys: “Si funciona a la primera, és que alguna cosa no va bé”.

Em dirigeixo al primer sospitós, tester en mà; no és cap altre que el mòdul RTC, recordeu el títol del post? Després de punxar en una bona colla de llocs, tot buscant tant continuïtat com tensió, he trobat una cosa: em sorprèn que hi ha 0V entre els dos pins de la pila. És estrany, em pensava que era força nova. Culpa meva, canvio la pila i ja està. La trec del porta-piles (que no és massa fàcil, tot s’ha de dir) i la mesuro amb el tester. Ara em dóna 2,3V, això sí que és estrany. Analitzant-ho amb lògica, arribo a la conclusió que el mòdul ha de tenir un curt-circuit, per això la pila dóna tensió quan està fora del mòdul. Alhora el curt està buidant la pila a velocitats bestials. Per tant no era problema meu, la pila estava bé quan li he posat. Però ara sense la pila el tester diu que no hi ha curt-circuit. Al moment m’apareix un gran interrogant al cap, estic desconcertat. Però de nou ho miro fredament, això vol dir que la pila provoca el curt!

Un examen minuciós del porta-piles revela que hi ha una pota sota el lloc on connecta el pol positiu que es fica una mica sota la pila, on hi ha el pol negatiu. És només una punta molt petita de la peça metàl·lica que fa el contacte, però podria ser suficient. Tallo aquesta punta que sobresurt massa amb les alicates que faig servir per tallar les potes dels components després de soldar-los a les plaques, que tenen una punta molt fina. Torno a posar la pila, una de nova de fet, i mesuro la tensió a les potes del porta-piles. A la pantalla apareixen 3,1V, problema resolt! Tot havia estat culpa d’un porta-piles merdós. (Perdoneu que no hagi fet fotos d’aquesta incidència, però és que el mode “macro” de la meva càmera no dóna per tant).

Tornem, doncs, al pla inicial. Repeteixo l’operació de connectar l’Arduino a l’ordinador, posar el mòdul en hora, desconnectar-ho tot, i esperar una estona. Quan ho torno a connectar, de nou ha perdut l’hora! Torno a repassar la pila, però ara està bé. Què caram passa, ara? Pensem-ho amb calma, de nou. Si la pila té tensió i el micro no reté l’hora, o el micro està fotut o no li arriba la tensió de la pila. Anem a comprovar la segona hipòtesi, perquè la primera és molt improbable té molt mala solució. Tot mirant el datasheet del DS1307, trobo que l’entrada de tensió de la pila és al pin 3. Allà hi poso el tester i em trobo 0V. És possible que el fabricant del mòdul hagi obviat aquesta connexió? Com que no en tinc l’esquema, no tinc més remei que seguir investigant amb el tester.

Tot mirant la continuïtat dels diferents punts del circuit he trobat una cosa com a mínim rara. A la citada pota número 3 de l’integrat no hi ha connectat el positiu de la bateria (això ja ho he dit), sinó que aquesta pota va connectada a un pin de sortida que està marcat com a “BAT”. Jo d’entrada suposava que era una connexió a la pila (com puc haver deduït això?) per mesurar-la amb el micro o per carregar-la en cas que fos carregable, però no és així. He buscat per la resta del circuit i no he trobat cap altre lloc que estigui connectat a la pota 3 del xip, o sigui que aquest no rep cap tensió quan està desconnectat del port USB, per tant no pot seguir comptant el temps. Ignoro perquè hi ha una pila al mòdul, si no és per mantenir l’hora del rellotge; la memòria (l’altre xip) no se m’acut perquè la pot necessitar, una pila. Si tingués un esquema ho podria entendre, però és igual; ja tinc clar com ho he de resoldre.

La solució ha estat molt fàcil i expeditiva: he soldat un pont entre el positiu de la pila, i el citat pin de sortida anomenat “BAT”. En altres paraules, fent això he connectat la pila a la pota 3 del xip (és el cable gris de la foto que us he dit que ja explicaria). D’aquesta manera el xip hauria de ser capaç de seguir comptant el temps quan perd la tensió d’alimentació (els 5V que provenen de l’Arduino). Només cal provar-ho: li carrego de nou l’hora, el desendollo de l’ordinador, espero una estona, i el torno a endollar. Segueix donant bé l’hora, solucionat.

Funciona! Ha mantingut l’hora malgrat no rebre corrent de l’Arduino.

O sigui que ja tinc el mòdul del rellotge a temps real operatiu, i he pogut fer-vos una petita demostració de com funciona. He de dir que un dia després sense cap alimentació, he connectat el mòdul de nou i no ha perdut l’hora. Si hem de fer cas a les especificacions, no la perdrà en molts anys…

Espero que aquest exemple del mòdul RTC hagi estat prou il·lustratiu del que us explicava al principi, d’això de la “quincalla xinesa”. Ja heu pogut veure que hi ha enviaments lents, problemes, mala documentació, qualitat justa, però al final acaba funcionant i surt a molt bon preu. De pas exercitem una mica les nostres habilitats, i la matèria gris tot pensant com resoldre els inconvenients que ens van apareixent!

Només em queda dir-vos que aquest mòdul haurà de formar part d’un projecte en el que estic treballant, no l’he comprat només per escriure aquesta presa de contacte. Més endavant ja veureu de què es tracta, de moment no vull dir res més. Per als lectors habituals (si en tinc algun), aquesta vegada no he penjat les fotos al flickr, he cregut que no feia falta, de tan poques, i tan petites la majoria. Fins una altra!

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s