Latest Publications

Raspberry Pi

Vinerea trecuta, cam pe la ora asta, impins de un impuls de moment, m-am hotarat sa cumpar un Raspberry Pi, computerul de 35 de dolari. Auzisem de placuta asta de ceva timp si, dupa ce m-am uitat la niste clipuri care o aratau ruland XBMC, am zis ca nu mai merge asa si trebuie s-o iau.


Dupa ce am dat o tura pe la distribuitorii din Europa si am vazut ca timpul de asteptare era cam de trei saptamani, ideea mea ca produsul asta e supraevaluat a devenit certitudine. Nu m-am dat batut insa si, ce sa vezi, doi distribuitori din Romania il aveau pe stoc (robofun.ro si teguna.ro). Am ales RoboFun (214 lei cu transport inclus) pentru ca precizau clar ca imi ajunge pachetul in 24 de ore, ceea ce, spre surprinderea mea finala (si placuta), s-a si intamplat.

Asa ca sambata pe la ora 10 m-am strecurat afara din casa ca ma astepta curierul. Nu, nu ma ascundeam de sotia mea, care e foarte intelegatoare si ma sustine fara rezerve atunci cand achizitionez diverse obiecte, absolut necesare de altfel. In orice caz, nota 10 pentru RoboFun, comanda la 12, livrare la 10 a doua zi, desi era sambata, ce as putea cere mai mult?

Ca fapt divers, am ezitat mult in fata kit-ului de accesorii oferit de RoboFun (cutie, alimentator, cablu HDMI) si am ales sa zic pas, desi pretul era bun. Insa am prin casa alimentatoare de telefon care merg ok si cabluri HDMI, iar cutia … poate altadata, desi as prefera-o pe cea transparenta disponibila la teguna.ro. Plus ca mai trebuie sa cumpar si lapte praf si scutece, asa ca… Nu m-au interesat deloc SD-card-urile cu soft (RaspBMC si Raspbian), pentru ca desi sunt o solutie comoda, iesi mai ieftin cu un minim de efort si mai si inveti cate ceva (cu niste card-uri de memorie de 4GB, class 4 sau class 6 la 19,99 lei la eMag si cateva minute in fata calculatorului ai rezolvat).

Asa ca mi-am luat numai placuta si… ce pot sa spun, nu-mi pare rau de bani. As putea zice ca sunt chiar incantat, probabil pentru ca asteptarile mele erau destul de mici. Pana acum am testat cu succes pe ea nu mai putin de patru sisteme de operare, ma rog, trei, daca tinem cont ca XBMC ruleaza de fapt tot pe o versiune de Debian.

Am folosit un alimentator de HTC ChaCha (5V, 1Ah) si un cablu HDMI de 1,5m pe care-l aveam prin casa si am legat placuta la un TV Toshiba Regza. Am rulat prima data RaspBMC, cu rezultate mai mult decat satisfacatoare:

  • Punct forte: totul se poate controla din telecomanda televizorului.
  • Meniul se misca surprinzator de bine.
  • Filmele se vad impecabil dintr-un folder partajat pe Windows 7, pe un laptop conectat la retea pe WiFi.
  • Add-on-urile gen YouTube, Facebook sunt ceva mai lente dar utilizabile.
  • Cu exceptia delay-ului la listarea clipurilor, YouTube se poate vedea perfect pe TV.
  • Filmele ruleaza extrem de sacadat de pe stick-uri USB. Probabil ca nici stick-urile mele nu sunt cele mai performante.
  • Muzica – nu am testat.
  • Poze – nu am testat.
  • Starea vremii – sistemul mi-a detectat automat orasul, pagina arata bine dupa gustul meu. Cred ca ar putea fi setata ca screen saver cand nu se utilizeaza altceva dar nu am incercat.

In concluzie, cu 214 lei mi-am apropiat televizorul de un SmartTV. Fie si numai pentru asta, cred ca merita banii. Si mai sunt multe de testat si de dezvoltat. In perioada urmatoare vreau sa:

  • leg un hard disc extern la Raspberry Pi cu RaspBMC si sa vad cum se comporta. Probabil va merge si vor rula satisfacator si filmele;
  • scriu niste tutoriale despre crearea SD-card-urilor bootabile pentru Raspberry Pi (RaspBMC, Raspbian, Fedora Remix si Arch Linux);
  • fac un fel de NAS pe unul dintre aceste sisteme de operare, utilizand un HD extern;
  • scriu un plugin pentru RaspBMC pentru serialepenet.ro; am vazut ca exista pentru vplay.ro dar la mine nu a functionat;
  • leg niste senzori, ceva, la Raspberry Pi;
  • leg un Arduino la Raspberry Pi;
  • astept propuneri si idei.

Cam atat deocamdata.

Raspberry Pi is a trademark of the Raspberry Pi Foundation.

I2C cu Arduino (AT24C64)

Am gasit printr-o cutie mai veche niste componente, printre care si un EEPROM serial AT24C64 pe care m-am gandit sa-l leg la Arduino (bineinteles). Scopul principal e sa folosesc montajul pentru a testa un OpenBench Logic Sniffer. Memoria foloseste pentru comunicatie bus-ul I2C (two-wire).

Pinii memoriei seriale sunt dispusi astfel:
AT24C64 Pinout

Semnificatia pinilor este urmatoarea:
AT24C64 Pin Functions
Pinii A2, A1 si A0 sunt folositi pentru a seta adresa dispozitivului, permitand conectarea a pana la opt memorii simultan, pe cele doua fire ale bus-ului I2C (SDA si SCL). Modul de stabilire a adresei este redat mai jos:
AT24C64 Device Address
Astfel, daca am conecta pinii A0, A1 si A2 la VCC, adresa ar fi 1010111 (binar), adica 57 (hexazecimal) sau 87 (zecimal). Daca am conecta numai pinul A2 la VCC si pinii A0 si A1 la GND, am obtine 1010100b, adica 0x54 (hexa) sau 84 (zecimal). Toti cei trei pini pot fi de asemenea lasati neconectati si asa voi proceda in continuare, pentru simplitate. In acest caz, A0, A1 si A2 au valoarea 0, iar adresa memoriei este 0x50.

Pinul WP (7), atunci cand este legat la GND, permite operatiile de scriere, in timp ce atunci cand este legat la VCC blocheaza operatiile de scriere. Cand este lasat neconectat, operatiile de scriere sunt permise, prin urmare il vom lasa neconectat.

Avem nevoie astfel de:

  • o memorie AT24C64 (sau mai mica AT24C32, sau mai mare AT24C128, AT24C256 etc.)
  • doua rezistoare (eu am ales 4k7, probabil ar fi mers si alte valori apropiate)
  • un breadboard mic
  • cateva fire (“jumper wires”)
  • bineinteles, un Arduino

Arduino AT24C64
Pregatim mai intai alimentarea, conectand un fir rosu la pinul 8 si un fir negru la pinul 4.
AT24C64 I2C
Adaugam rezistoarele de pull-up, de la pinii SDA (5) si SCL (6) la VCC (catre pinul 8).
AT24C64 Arduino
Legam firele pentru bus-ul de comunicatie, verde la SDA si alb la SCL.
AT24C64 ATmega
Legam pinul SDA (firul verde) la pinul SDA de la Arduino (analog 4) si pinul SCL (firul alb) la pinul SCL de la Arduino (analog 5). Am folosit un montaj pe care l-am prezentat pe aici, cu o clona Arduino produsa de DFRobot si un ecran LCD 2×16. Alimentarea memoriei se face de pe breadboard-ul cu LCD-ul.
Arduino I2C
Pentru partea de soft gasiti un exemplu aici. Sau puteti downloada varianta modificata de mine, care scrie un string in memorie si apoi il citeste caracter cu caracter si il afiseaza pe LCD, cu o mica pauza dupa fiecare caracter.
ATmega I2C
Mai jos am pus un clip care arata cum functioneaza programul.




Download: EEPROM LCD Sketch

LCD 2×16 cu Arduino

Desi au devenit accesibile ca pret dispozitive mult mai performante de afisare, afisajele cu cristale lichide raman destul de interesante si utile pentru electronistii amatori.

In randurile urmatoare voi prezenta pas cu pas modul de conectare a unui LCD 2×16 la Arduino, avand ca scop folosirea librariei LiquidCrystal (care vine cu Arduino IDE) fara nicio modificare sau configurare software.

Avem nevoie de:

  • Arduino – eu folosesc aici o varianta produsa de DFRobot, cu ATmega328
  • un rezistor semireglabil de 10K
  • un mini-breadboard
  • un LCD 2×16 (compatibil HD44780)
  • mai multe fire electrice cu pini (“jumper wires”)

Arduino LCD - Componente
De la stanga la dreapta privind spre display, pinii sunt urmatorii:
Afisaj LCD HD44780 Pinout
Schema de conectare este urmatoarea:
Schema Arduino LCD

(sursa: http://arduino.cc/en/uploads/Tutorial/lcd_schem.png)

Pentru inceput, fixam rezistorul semireglabil undeva pe breadboard:
Arduino LCD 2x16 - Semireglabil
Conectam pinul 5V si GND de la Arduino la breadboard (firul rosu este 5V, iar cel negru de pe exterior masa) si apoi conectam +5V la pinul 15 al LCD-ului (firul alb) si GND la pinul 16 (firul negru). Atentie! La unele ecrane pinii Bklt+ si Bklt- (backlight) sunt inversati, verificati documentatia sau marcajele. In acest moment, daca Arduino este alimentat, LCD-ul ar trebui sa se aprinda.
Arduino LCD - Alimentare VCC, GND
In continuare realizam urmatoarele conexiuni:

  1. GND la pinul 1 al LCD-ului
  2. +5V la pinul 2 al LCD-ului
  3. GND la unul dintre pinii exteriori ai rezistorului semireglabil (nu are importanta care)
  4. +5V la celalalt pin exterior al rezistorului
  5. pinul central al rezistorului la pinul 3 al LCD-ului (firul albastru)

Acum ar trebui sa devina vizibil primul rand de caractere al LCD-ului.
Atmega LCD - Contrast
Din semireglabil se poate ajusta contrastul.
Arduino LCD - Test
Ar trebui ca primul rand de caractere sa fie bine definit. Daca nu obtineti ceva similar, nu mergeti mai departe. Verificati din nou toate conexiunile si ajustati din semireglabil.
Arduino LCD - Test
Pinul RS “spune” afisajului daca informatia primita pe pinii de date (D0-D7) trebuie afisata sau daca este vorba de o comanda (de exemplu mutarea cursorului). Vom conecta pinul RS (4) al LCD-ului la pinul D12 de pe Arduino.
Arduino LCD - RS
Pinul RW (5) spune display-ului daca microcontrolerul vrea sa scrie in LCD (de exemplu sa afiseze date sau sa dea comenzi de mutare a cusorului) sau sa citeasca date din LCD (situatie mai putin comuna). Libraria LiquidCrystal nu citeste date din LCD ci numai transmite date catre acesta, prin urmare acest pin poate fi legat la masa, ca in imaginea urmatoare (firul negru).
Arduino LCD - RW
Pinul E (enable) informeaza LCD-ul ca datele transmise de microcontroler sunt gata pentru a fi citite si va fi legat la pinul D11 de pe Arduino (firul alb):
Arduino LCD - Enable Pin
Pentru a transmite date afisajelor de tip HD44780 se pot folosi 8 pini (D0-D7) sau numai 4 pini (D4-D7). Libraria LiquidCrystal foloseste al doilea mod de comunicatie, cu numai 4 pini, prin urmare vom conecta pinii D4-D7 ai LCD-ului la pinii D5-D2 de pe Arduino, ceilalti fiind lasati neconectati, astfel (firele verzi):

  • LCD D4 (11) — Arduino D5
  • LCD D5 (12) — Arduino D4
  • LCD D6 (13) — Arduino D3
  • LCD D7 (14) — Arduino D2

Arduino LCD - Hello World
Cu aceasta am incheiat conectarea. Deschideti IDE-ul Arduino, mergeti la Examples -> LiquidCrystal -> HelloWorld si uploadati sketch-ul respectiv. Daca totul a mers bine, veti obtine ceva similar cu imaginea de mai sus. Succes!

Aveti mai jos si un clip care prezinta aproape toate exemplele care vin cu libraria LiquidCrystal (Autoscroll, Blink, Cursor, Display, HelloWorld, Scroll, SetCursor, SetDirection).