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.

4 commenti:

  1. La tecnologia Led sta evolvendo incredibilmente bene, un sacco di lavoro importante è stato fatto.

    RispondiElimina
    Risposte
    1. ...e c'è ancora un enorme margine di sviluppo applicativo e tecnologico.

      Elimina
  2. Se non subiscono sovratensioni le lampade LED durano molto più di quelle tradizionali, anche se ricevono un' alimentazione intermittente (per un falso contatto). Fortunatamente nella mia zona la rete Enel è abbastanza protetta, forse anche perché gran parte dei lampioni utilizzano i LED.

    RispondiElimina
    Risposte
    1. E' vero.
      Comunque sto sperimentando anche le lampade a 230 Vac e devo dire che i risultati sono ottimi. Fammi sapere cosa ne pensi. Ciao e grazie.
      Ciro.

      Elimina