oriolrius.cat

Des del 2000 compartiendo sobre…

Tag: electronics

12h amb Arduino

Reading time: 6 – 9 minutes

En un calaix tenia guardat un Arduino Duemilenove i una colla de sensors, finalment aquest passat dissabte no vaig poder evitar-ho i vaig haver-m’hi de posar. La temptació va ser massa forta. Així doncs, en aquest post el que vull és explicar-vos com he passat les meves primeres 12h sobre aquesta plataforma d’Open Hardware. Tan de temps treballant amb el concepte Open Source i per primera vegada començo a parlar d’Open Hardware això és una sensació que no té preu.

Arduino Duemilanove

Bé doncs, primer de tot comentar que el llenguatge de programació és molt simple. Tan és així que vaig invertir unes 2h en revisar tots els llibres que tinc d’Arduino en busca de més funcions o usos del mateix que compliquessin una mica la cosa pensant que no podia ser tot tan senzill. Diria que he passat massa temps amb llenguatges d’alt nivell i al tornar al món proper al hardware tot canvia tant que no me’n sabia fer el càrrec. Així doncs, amb ben poques hores ús asseguro que tindreu per la mà totes o quasi totes les instruccions del llenguatge. El que podria semblar més difíci, tot i que sota el meu punt de vista crec que no ho és gens, és fer-se a la idea de que després d’iniciar el sistema tota la lògica estarà tancada en un bucle infinit que esta esperant que els sensors captin algún tipus d’entrada per disparar la lògica. Potser el més interessant és el fet de poder introduir el concepte d’interrupcions per hardware que et permeten secuestrar el fil d’execució en qualsevol moment del codi per llençar una rutina.

Després de fer les típiques proves amb LEDs i pulsadors, vaig posar-me a investigar les entrades i sortides analògiques amb sensors de temperatura, humitat, proximitat, lluminositat i d’altres similars. Coneixer i dominar tot això és qüestió de ben poca estona però crec que val la pena passar-hi per sentir-se còmode amb les eines de programació i el propi hardware. Us recomano intentar retenir tots els pins que té la placa alhora d’entendre el codi és molt més senzill.

arduino

Arribats a aquest punt vaig descobrir que usar la consola serie per mostrar-hi informació de depuració és una de les formes més senzilles de controlar si els programes estan fent el que ens interessa. Així doncs, en aquest punt usava el port serie per volcar-hi tot tipus de comentaris explicatius per tal de seguir el fil del codi a mode de consola de treball. Per tant, us recomano tenir a mà un ‘minicom’ obert constanment per pode recol·lectar tot el feedbak que ens interessi.

On la cosa em va enganxar de veritat és quan vaig començar a posar-me amb els temes d’infra-rojos; concretament a l’hora de decodificar trames enviades per comandaments a distància i d’altres artilugis similars. És realment interessant fer implementacions manuals d’aquest tema usant els rellotges interns que té el dispositiu. T’ajuda a entendre al 100% com funcionen les codificacions dels comandaments a distància per infra-rojos. Després descobreixes que la cosa es pot simplificar moltíssim usant llibreries que t’ho gestionen tot i que t’ofereixen una serie d’interficies de més alt nivell que permeten desenvolupar aplicacions molt senzilles sense haver de preocupar-se dels detalls de les internalitats que comentava abans. Llavors és quan realment pots arribar a fer coses interessants tan a l’hora de rebre com d’enviar informació per infra-rojos.

El pas obvi que venia després d’això era començar a jugar amb protocols de comunicacinos inal·lambrics que per algo tinc vocació telemàtica, no? la veritat és que gràcies a una llibreria d’alt nivell anomenada ‘VirtualWire‘ que parla sobre com usar transmisors i receptors de 433MHz modulats amb ASK per enviar i rebre trames a través de l’aire vaig entendre al 100% com funcionava el sistema de control remot de persianes i calefacció que tinc a casa. De fet, em vaig quedar amb les ganes de seguir jugant amb aquest tema per manca de components electrònics que no tenia a mà. Seguint amb aquesta línia tot i que no vaig fer-ne proves vaig estar veient que és força simple treballar amb busos de dades SPI i I2C. Cosa que obre un món de possibilitats a l’hora de fer interconnexions amb certs aparells.

He de dir que si sou persones que us costa entendre l’electrònica analògica, com a mi, no ús heu de preocupar es poden fer miracles amb Arduino sense tenir ni idea de perquè s’acostuma a posar una resistència davant d’un LED. Això si, arriba un moment que la pròpia motivació per tot el que estas fent et porta a rellegir-te ni que sigui en diagonal els capítols dedicats a l’electrònica que tenen molts dels llibres d’Arduino. Almenys en el meu cas amb uns 30-40min en vaig tenir prou per tornar-me a posar al cap tots els conceptes que havia estudiat en el seu dia i poder seguir endevant amb els meus experiemnts amb més coneixement de causa.

Tot i que pel que vaig fer a continuació no era necessari haver fet el repàs sobre electrònica no vaig poder evitar consultar com es feia per treballar amb els mòduls Ethernet, ZigBee i Wifi que té Arduino. Com que no tenia tot aquest hardware aquesta part només la vaig fer a nivell teòric però la veritat és que ja em va ser molt útil. Em va permetre entendre com es podia treballar amb tot plegat. Això si, ara el ‘gusanillo’ el tinc en la tecnologia ZigBee (IEEE 802.15.4) que mai he tocat de primera mà, així doncs, potser per reis em regalo algún mòdul d’aquesta tecnologia per trastejar-hi una mica, a veure què tal és tot això del ‘mesh-networking’ amb aquest protocol que tants adeptes ha guanyat en el món de l’embedded.

He de dir que de les 12h prop de 4h les vaig passar fullejant i llegint amb deteniment llibres i més llibres que tinc del tema, això em va servir per veure diferents formes de fer les coses i l’abast dels projectes que fa la gent amb l’Arduino cosa que és realment interessant per familiaritzar-se amb la tecnologia. Potser vaig repassar prop de 50 projectes amb aquestes hores i me’n vaig mirar amb lupa uns 10 cosa que em va anar molt bé per coneixer a fons molts temes que per manca de hardware i components electrònics no podia reproduir a casa.

Per cert, si algú s’esperava que aquest article fos un manual de com iniciar-se amb Arduino em sap molt greu però diria que fer això no té cap sentit ja que per internet n’hi ha moltíssims de manuals que expliquen com fer-s’ho per començar. A més, també hi ha moltíssims llibres disponibles a les llibreries i biblioteques a partir dels quals podeu tenir tutorials més que bons i detallats de com començar amb aquest tema. Així doncs, m’ha semblat que era més útil explicar-vos l’experiència de les meves primeres 12h amb aquesta tecnologia.

Transistor LM3940 – de 5v a 3’3v

Reading time: 1 – 2 minutes

No sé d’on el puc treure que no sigui a l’estranger però l’hauré de buscar, el tinc al cap des de fa dies i per casualitat acabo de trobar la seva pàgina. Què té d’especial aquest transistor? doncs simplement que és el que passa de 5v a l’entrada a 3’3v a la sortida. Serveix per exemple, per alimentar a través d’USB un transmissor FM que tinc i així no he d’estar posant-li piles cada 2×3. Quan m’animi a fer l’inventillo ja el penjaré aquí.

A continuació podeu veure un simple gràfic de com usar-lo:

esquema.jpg

I fins hi tot un esquema de com és físicament, de fet, no té més. Simplement un transistor lineal.

transistor.jpg

Web on l’he trobat: LM3940 – IA Low Dropout Regulator for 5V to 3.3V Conversion.

I2C – Inter Integrated Circuit bus

Reading time: 3 – 5 minutes

Tornant al tema dels busos que poden treballar sobre GPIO aquí teniu un altre bus molt i molt usat en aquest tipus de ports.

Definició

El I2C (“eye-squared-see”) el va inventar Philips cap als anys 80 amb la finalitat de connectar diferents IC (circutis integrats) amb les seves CPUs dintre d’una TV. Bàsicament és un bus pensat per curtes distàncies i poc ampla de banda.

A més I2C és capaç de detectar col·lisions, sincronitzar el rellotge i negociar el master en sistemes on n’hi pugui haver més d’un. El rellotge sempre el genera el master, però els slaves poden mantenir el rellotge parat per generar un estat d’espera.
Sovint el master en un bus I2C és el microcontrolador.

El número màxim de dispositius que es pot connectar en un bus I2C és calcula a partir de la màxima capacitància de la linia (uns 400pF), i el límit d’adreces és de 16k; normalment cada dipositiu té una capacitància d’uns 10pF. Així doncs diposem de 127 adreces disponibles. En principi les adreces de cada IC és assignable pel dissenyador del sistema.

Com funciona

Només es necessiten dos cables per treballar amb I2C, dos cables actius i el terra. Els cables actius són el SDA (Serial Data Line) i el SCL (Serial Clock Line). O sigui, el primer per dades i el segon pel rellotge.

i2c.gif

Només amb aquests dos cables actius en tenim prou per establir comunicacions full-duplex. L’interficie sovint funciona a velocitats baixes, de 100KHz a 400KHz. En un bus I2C, cada IC connectat al bus té una adreça única. Cada dispositiu pot treballar com a receptor i/o transmisor depenent de la seva funcionalitat.

Sobre el tema de l’amplada de banda, escencialment hi ha tres modes de funcionament un estàndard de fins a 100kbps i un de ràpid de fins a 400kpbs. El darrer mode és el High-Speed que pot arribar fins a 3.4Mbps.

Usos

Un dispositiu molt comú que sovint s’usa a través d’un bus I2C són les EEPROMs, també n’hi ha d’altres com els sensors, i els rellotges de temps real. A vegades també s’usen busos I2C només com a línia de senyalització per altres línies de dades, per exemple, en aplicacions multimèdia, on sovint s’usen sintonitzadors RF, codificadors i/o decodificadors de video, processadors d’audio. De fet, el mercat és ple de centenars d’IC que usen el bus I2C com a protocol de comunicacions en els seus busos.

Exemples d’us

Maxim té dintre del seu repositori d’articles tècnics un munt de referències a aplicacions sobre aquest protocol. He trobat molt interessant concretament una aplicació que ens permet controlar una pantalla LCD amb interficie HD44780 (local). Al document s’explica com serialitzar els 11 pins que necessita aquest dispositu per treballar només amb els 2 cables que té el bus I2C.

Un altre ús, jo diria que més que útil, és el que ens permet connectar el bus I2C al port paral·lel del PC. De fet, el circuit que ens ho permet fer és força simple si en voleu més informació: I2C interfacing via PC parallel port.

Fonts

SPI – Serial Peripheral Interface

Reading time: 3 – 4 minutes

Quan parlava de GPIO vaig parlar d’aquest protocol capaç de corre sobre ports d’aquest tipus. Doncs bé aquí en teniu una petita definició del que fa i com funciona aquest protocol.Un lloc on podem trobar sovint busos SPI són PDAs i en telèfons mòbils.

Definició

El bus SPI és del tipus serie i sincron, usa 4 cables i s’usa en molts microprocessadors de periferics. Els ports amb suport SPI suporten un ample de banda mitja/baix (1 megabaud) entre les seves CPUs i els altres dispositius que hi poden haver connectats al bus.

Com funciona

El bus SPI és relativament simple d’implementar per dispositius externs de poca velocitat i no ens calen gaire cables per establir la comunicació. L’interface d’aquest bus la va definir Motorola a l’estàndard de microcontroladors MC68HCxx. Usa un rellotge per marcar el sincronisme de la línia de dades tan d’entrada com de sortida del microcontrolador i la informació es mou en blocs de 8 bits.

El bus SPI usa una inteficie master/slave, com és normal en comunicacions serie síncrones és el master el que marca el rellotge. Un fet interessant en aquest tipus de busos és que podem rebre i enviar informació dels dispositius de forma simultanea, per tant es tracta d’un protocol full-duplex.

Una mica més endintre

Les senyals que usa el bus són:

  • SLCK serial clock, sempre controlada pel master
  • MISO master-in slave-out data
  • MOSI master-out slave-in data
spi.gif

En una aplicació normal haurem de connectar la soritda de SCLK del microcontrolador a la entrada SLCK del convertidor. La MISO al pin DOUT del convertidor, la MOSI al pin DIN. Cada IC (circuit integrat) del bus SPI té una senyal CS (chip-select), cal activar la senyal per tal d’habilitar el dispositiu en el bus. Per tal de fer això podem usar qualsevol de les línies de sortida estàndard del microcontrolador. Cal però que pensem que si tenim n ICs connectats al bus, caldràn n senyals per activar els ICs. A més si compartime la senyal de rellotge i les línies de dades haurem d’habilitar la senyal de CS corresponent en cada cas.

Valoració

Com podeu veure el disseny del bus i el prtocol d’ús són molt senzills. Tan que si fem servir massa dispositius connectats a la mateixa línia de dades la cosa es fa una mica pesada de tractar. Malgrat això per moltíssimes aplicacions és una bona idea usar-lo.

Exemple d’ús

La gent de maxim tenen un document tècnic (local) molt bo on en poques ralles ens explique com comunicar un termometre digital, concretament el DS1620, només amb 3 cables a través d’un bus SPI. L’esquema del sistema és força senzill i us dona una idea de la simplicitat que suposa connectar aquest sensor de temperatura al bus SPI.

Fonts

GPIO – General Porpuse Input/Output

Reading time: 2 – 2 minutes

Aquest acrònim s’acostuma a usar en dispostius incrustats, els dispositius GPIO ens facilitat ports d’entrada i sortida (I/O) que es poden configurar indiferenment com a ports d’entrada o de sortida. Sobre aquests ports podem fer correr protocols de BUS, com per exemple I²C, SPI and SMBus. Sovint el fet d’usar xips GPIO és una solució més econòmica que l’ús de micro-controladors.

Com que aquesta explicació queda molt generècia, el millor és parlar d’un exemple ben senzill de perquè serveix un GPIO en un dispositu embedded. El Linksys WRT54G per exemple, té un GPIO que no usa tots els seus PINs. Per tant, és un dispositiu que tots tenim a l’abast i amb el que a través d’un linux podem començar a jugar amb el GPIO. A comesfa.org hi ha un artícle titulat: Connexió d’un relé a un Linksys WRT54G on s’usa aquest GPIO del que us parlava per connectar-hi un relé a través del qual podem encendre i apagar dispositus.

gpio.jpg

Un petit trick que sovint podem fer amb els pins del GPIO és connectar-hi directament un LED, sovint si configurem el pin com a sortida i connectem l’altre pota del LED la posem a massa n’hi ha prou per fer encendre i apagar el LED quan volguem. De totes formes si no voleu sucarrimar el LED, us recomano mirar amb el tester quina tensió dona el pin en estat activat, ja que mai se sap què hi pot haver. Si mireu l’article anterior que us he dit de comesfa, veureu un tros de codi en C que mostra fins a quin punt serà de senzill controlar que el LED s’ensengui o s’apagui.

Nou multimetre, per fi!

Reading time: < 1 minute Potser feia 2 anys que tenia el multimetre espatllat i aquesta setmana me'n vaig comprar un, per fi.

mutimetre.jpg