lunedì 30 maggio 2011

Laboratorio: illuminazione LED

I LED (Light Emitting Diode) sono sempre più presenti nella nostra quotidianeità. Sviluppati a partire dagli anni '60, essi si sono progressivamente imposti come sostituti ideali per molte fonti di illuminazione, anche al di fuori dello spettro visibile (es. IR, UV).
I vantaggi? Lunga durata, bassi consumi, colori saturi.


Oggi, troviamo i LED nelle automobili (interni, luci di posizione, stop, frecce), negli elettrodomestici (retroilluminazione di televisori LCD) e in tantissime altre applicazioni. Non possono quindi mancare anche nel nostro laboratorio!

Prima di proseguire, guardiamo insieme questo video che ho preparato per Voi. Giocheremo con i LED e altro.


Ecco lo schema elettrico del circuito a quattro canali PWM. Esso viene pilotato dalla Linux-Toolbox, che è il nostro sistema tuttofare.

(fare click sull'immagine per ingrandire)

Le porte di I/O LVCMOS sono state prelevate dal connettore DIN41612, come in figura:


Il codice Ansi C, per pilotare ogni I/O è:

/* this function generate four pwm signal */
void pwm(unsigned char p0, unsigned char p1, unsigned char p2, unsigned char p3)
{
    int i, count;

    /* set gpio 0-3 (PC10-PC13) */
    for (i=0; i<256; i++) {

        if (i >= p0)
            *((unsigned long *) (map_base + (PIOC_CODR & MAP_MASK))) = PIO_C10;
        else
            *((unsigned long *) (map_base + (PIOC_SODR & MAP_MASK))) = PIO_C10;

        if (i >= p1)
            *((unsigned long *) (map_base + (PIOC_CODR & MAP_MASK))) = PIO_C11;
        else
            *((unsigned long *) (map_base + (PIOC_SODR & MAP_MASK))) = PIO_C11;

        if (i >= p2)
            *((unsigned long *) (map_base + (PIOC_CODR & MAP_MASK))) = PIO_C12;
        else
            *((unsigned long *) (map_base + (PIOC_SODR & MAP_MASK))) = PIO_C12;

        if (i >= p3)
            *((unsigned long *) (map_base + (PIOC_CODR & MAP_MASK))) = PIO_C13;
        else
            *((unsigned long *) (map_base + (PIOC_SODR & MAP_MASK))) = PIO_C13;

        for (count=0; count<400; count++); //dummy delay
    }

    return;
}

int main(int argc, char **argv) {

    /* locale variable */
    int i;
    unsigned char led_r = 0;
    unsigned char led_g = 42;
    unsigned char led_b = 137;
    unsigned char led_g2 = 201;

    init_pio(); //inizialize gpio pin

    while(1) {       
        pwm(sinetable[led_r++],

            sinetable[led_g++],
            sinetable[led_b++],
            sinetable[led_g2++]);
    }

    return 0;
}


Qui Pianeta Terra, a presto.

mercoledì 25 maggio 2011

Programmazione: cygwin per sentirsi subito Linux

Avevo l'esigenza di usare un compilatore Ansi C su di un mio computer con XP preinstallato. Occorreva, però, troppo tempo per ripartire da zero e installare una distribuzione Linux (es. Ubuntu). Cosa fare, allora?


La soluzione si chiama "cigwin". Un insieme di applicativi in stile Linux, tra cui un porting del compilatore GCC, con schema di licenza GNU GPL.
La procedura di installazione da rete (setup.exe), svolge in modo pressoché automatico tutte le fasi di download e di configurazione e, dopo pochi minuti, si può iniziare :D

Volevo creare una tabella di 256 elementi, contenente i valori della funzione seno, con una risoluzione di 8 bit, compresi nell'intervallo tra 0 e 2*PI. Ho, quindi, scritto un semplice programma C che calcolasse tutti i valori richiesti. Ecco il codice:

/* sintable.c - a free code for sine tables */
 
#include <stdio.h>
#include <math.h>

/* entry point */
int main()
{
    char i, k;
    float pi = 3.141592f;
    float step = 2 * pi / 256.0f;
    float s = 0;
    float res = 0;
   
    for (i=0; i<16; i++) {
        for (k=0; k< 16; k++) {
            res = (sin(s)* 127.5f) + 128.0f;
            printf ("%3d, ", (unsigned char)res);
            s=s+step;
        }
        printf("\n");
    }
    return 0;
}

...che è stato compilato con il seguente comando:

gcc -o sintable sintable.c

...lanciato cosi:

./sintable

...il cui output è:

128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 162, 165, 167, 170, 173,
176, 179, 182, 185, 188, 190, 193, 196, 198, 201, 203, 206, 208, 211, 213, 215,
218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 238, 240, 241, 243, 244,
245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255,
255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246,
245, 244, 243, 241, 240, 238, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220,
218, 215, 213, 211, 208, 206, 203, 201, 198, 196, 193, 190, 188, 185, 182, 179,
176, 173, 170, 167, 165, 162, 158, 155, 152, 149, 146, 143, 140, 137, 134, 131,
127, 124, 121, 118, 115, 112, 109, 106, 103, 100,  97,  93,  90,  88,  85,  82,
 79,  76,  73,  70,  67,  65,  62,  59,  57,  54,  52,  49,  47,  44,  42,  40,
 37,  35,  33,  31,  29,  27,  25,  23,  21,  20,  18,  17,  15,  14,  12,  11,
 10,   9,   7,   6,   5,   5,   4,   3,   2,   2,   1,   1,   1,   0,   0,   0,
  0,   0,   0,   0,   1,   1,   1,   2,   2,   3,   4,   5,   5,   6,   7,   9,
 10,  11,  12,  14,  15,  17,  18,  20,  21,  23,  25,  27,  29,  31,  33,  35,
 37,  40,  42,  44,  47,  49,  52,  54,  57,  59,  62,  65,  67,  70,  73,  76,
 79,  82,  85,  88,  90,  93,  97, 100, 103, 106, 109, 112, 115, 118, 121, 124,


Ecco fatto. I valori approssimati sono compresi tra 0 e 255.

Qui Pianeta Terra, a presto.

domenica 22 maggio 2011

C’è un pinguino in laboratorio...

Qualche giorno fa un amico mi ha segnalato questo video: Pinguino in aereo . E’ buffo, ma sai che spavento per il povero animaletto.

Adesso, invece, voglio presentarvi un pinguino dal cuore d’acciaio, anzi di silicio, che vive nel mio laboratorio e che, spero, userete presto anche per i vostri progetti. Eccolo!


E’ la mia Linux-Toolbox, un sistema tuttofare, completamente open-source, con il quale realizzare rapidamente ogni genere di prototipo e sperimentare cose sempre nuove, senza rinunciare alla flessibilità e con una discreta potenza di calcolo della CPU (200 MIPS @ 180 MHz).

Guardiamolo meglio...
In questa foto, potete notare la tastiera 4x4 ed il display TFT da 3,5 pollici.

Qui si vede l’assieme completo.

Gli elementi hardware che compongono la Linux-Toolbox sono i seguenti:
  • Scheda Portux920T, prodotta dalla TaskIt Gmbh, su cui è installato il Kernel Linux 2.6.18 e alcuni applicativi di base.
  • Alimentatore step-down, basato su due regolatori LM2575, per generare le tensioni necessarie (3,3Vdc e 5 Vdc).
  • Display TFT da 65536 colori con Touch-Screen resistivo, che viene venduto come kit di sviluppo per il microcontrollore LM3S1958 (Core ARM Cortex-M3) della Texas Instruments (il kit è RDK-IDM-L35).
Il tutto è assemblato mediante piastre di allumino ed è pensato per rendere le  schede e le interfacce, facilmente accessibili e smontabili.

Cosa c’è nella mia Linux-Toolbox?

Troviamo, oltre al display, alla tastiera e alla CPU, anche n°4 porte seriali (2xRS232 e 2xLVCMOS), una interfaccia Ethernet 10/100 Mb/s, alcune porte di I/O LVCMOS, un local-bus a 8/16 bit direttamente pilotato dalla CPU, 64Mbyte di SDRAM, 1Mbyte di Flash per i dati/programmi dell’utente (una partizione della Flash contenente uboot e l'immagine del kernel), una SDCARD (attualmente monto una 128 Mbyte).

La dotazione software è costituita da una shell BusyBox, accessibile via Telnet oppure localmente, un server Ftp, un web server Http, un editor VI. Tutto il processo di sviluppo software avviene su un PC (con Linux installato ...naturalmente... e può andare benissimo un Netbook con Ubuntu 10), mediante il cross-compilatore arm-linux-3.4.2-gcc.
Io preferisco usare il linguaggio ANSI C, ma la tool-chain sembra abbastanza completa e ci sono esempi nella documentazione anche per Java (...da provare!).

 Configurazione per uso locale

Adesso potete divertirvi a creare applicazioni per Internet (non il solito Hello World), e telecontrollare il vostro tostapane dall’altro capo del pianeta.

Configuarazione Web con indirizzi IP pubblici

Qui Paneta Terra, a presto.

venerdì 20 maggio 2011

Programmazione: da Hello! a Hello World!

Oggi iniziamo a parlare di software e firmware (con tale parola si intende generalmente il software residente sul sistema. Es. un microcontrollore).
Vi sarà capitato di vedere un tipico esempio di programma, scritto in linguaggio C, come quello che segue:

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return;
}

seguito, poi, dalle istruzioni di compilazione:
gcc -o hello hello.c

e finalmente l'output:
Hello World!

...e vi sarà capitato di pensare "ma perché mai un annuncio così eclatante se qui ci siamo solo io e un computer, il gatto dorme beato e ho solo finito di installare il compilatore C. Non ho mica completato il lavoro di anni che mi aspetta?".

Poi, con la sempre maggiore diffusione di Java, le cose sono diventate così:

class Hello {
    public static void main(String[] args) {
        System.out.println("Hello!");
    }
}

da compilare così:
javac Hello.java

e lanciare così:
java Hello

...il cui output sarà:
Hello!

Ma se abbiamo un Sistema Embedded con Linux a bordo e un Web Server (es. httpd) installato, allora possiamo effettivamente collegarlo a Internet, ottenere un indirizzo IP pubblico e scrivere il nostro primo vero "Hello Word!" all'interno di un file testo chiamato index.html. Questa volta così:

<html>
    <head>
        <title>Embedded_web</title>
        <meta http-equiv="Content-Type"
         content="text/html; charset=iso-8859-1">
    </head>
    <p>
        <font face="Arial" size="8">
        Hello Word!
        <font face="Arial" size="4">
        ...I'm on network
    </p>
</html>

e vederne gli effetti direttamente nel browser, così:


Ma se non ho un compilatore C e neppure uno Java, come posso scrivere il primo programma? Magari in Assembly? Si, ma l'Assembly, detto anche Assembler o Linguaggio Macchina, è strettamente legato alla piattaforma.
E come potrebbe essere questo ipotetico programma?

...così:

entrypoint:
           CALL beep
           JR entrypoint
beep:
           SET pin1
           CLR pin1
           RET

Qui Pianeta Terra, a presto.

Laboratorio: Sensori Inerziali - Post n°1

Seguitemi in laboratorio, oggi ho da mostrarvi un nuovo progetto che sicuramente vorrete realizzare al più presto.

Per meglio descrivere la natura di questi dispositivi, ho realizzato un video introduttivo. Prima di guardare il video voglio fornirvi alcune indicazioni di base. Il prototipo che vedrete è costituito dai seguenti blocchi funzionali:
  • Tre accelerometri MEMS analogici montati perpendicolarmente tra loro
  • Tre giroscopi MEMS analogici
  • Tre magnetometri AMR
  • Un convertitore A/D SigmaDelta a 16/24 bit
  • Un microcontrollore NXP LPC2129
  • Nel secondo box trova posto un display 3,5" AM-TFT e l'alimentatore DC/DC StepDown.
Adesso non ci resta che guardare insieme il video con sottofondo Techno Music (by Vate) e qualche esperimento con una gentile voce narrante (Emily by ScanSoft).


Qui Pianeta Terra, a presto.

giovedì 19 maggio 2011

Storia: il costruttore di una nuova epoca

Guardiamo insieme questo affascinante documentario sui primi esperimenti di Guglielmo Marconi riguardanti le trasmissioni radio-telegrafiche su lunga distanza. Se consideriamo lo spettro radio come uno spazio comune, liberamente accessibile, possiamo dire che in quegli anni nasceva il primo Social Network, anche  se dovremo aspettare ancora molto tempo prima di vedere la radio come un oggetto personale, ampiamente diffuso.

Prima parte
Seconda parte

Che ne dite, possiamo essere orgogliosi di condividere la sua passione e la sua voglia di sperimentare nuove tecnologie? Marconi impiegava componenti che potremmo definire rudimentali, mentre oggi disponiamo di una vasta gamma di componenti elettronici miniaturizzati e di raffinatissime tecnologie. Se vi è venuta voglia di saperne di più date un occhiata a questo link e questo link.

"Quando, nel 1912, il Titanic affondò dopo aver lanciato il segnale SOS via radio, Marconi si trovava negli Stati Uniti e accorse al porto di New York per ricevere i 705 superstiti. Intervistato dalla stampa disse «Vale la pena di aver vissuto per aver dato a questa gente la possibilità di essere salvata»." (Wikipedia)

Qui Pianete Terra, a presto.

mercoledì 18 maggio 2011

Benvenuti! Oggi si parte.

Libera Elettronica nasce per liberare l'elettronica che è in te, ma anche per liberare la voglia di comunicare e condividere con tutti una mia grande passione.
Cosa si può fare con l'elettronica?

Forse la domanda dovrebbe essere: cosa non si può fare con l'elettronica.

Proviamo a dare qualche risposta, gli altri suggerimenti li darete Voi (li attendo!).

Osserviamo prima l'elettronica da diversi punti di vista:
  • l'elettronica è una scienza applicata. Più che del il moto degli "elettroni" nei conduttori, negli isolanti e nei semiconduttori, parleremo di cosa si può fare con essi ;).
  • l'elettronica è l'insieme coerente di circuiti elettrici, sia su scala microscopica (nano-metrica per l'esattezza), sia su scala macroscopica, disposti in assiemi (Chip, Schede, Apparati completi).
  • l'elettronica è analogica, digitale, mixed-signal (noi parleremo soprattutto di quest'ultima).
  • l'elettronica è intensamente popolata dal software (spesso è chiamato firmware).
  • l'elettronica è pervasiva, vedi ad esempio: PC, TV digitali e non, SmartPhone, TabletPC, Internet ...frullatore, orologio, elettrocardiografo, antifurto, e l'elecoooooooo può continuare.
  • l'elettronica ha un'elevata valenza sociale! (ah, questo non ve lo aspettavate).
  • l'elettronica è libera e mi puoi seguire in libertà.
Dimenticavo le risposte ...cosa si può fare e cosa farete Voi che siete i miei amici lettori.

Bene, risponderò con qualche immagine.


...una fotocamera autocostruita, ad esempio. Questa è un pò complicata per iniziare, ma se mi seguirete con pazienza...


...un interruttore a sfioramento. Questo è già più semplice, ma prima dobbiamo parlare delle "maglie di Kirchhoff". Vabbè anche questo è complicato, starete pensando ...non sarebbe meglio un Led RGB?
Veremo cosa troverò in laboratorio, ma ricordate che l'elettronica libera non è complicata ...è solo un pò complessa e, insieme, troveremo il modo per gestire la complessità!

Qui Pianeta Terra, a presto.