Visualizzazione post con etichetta PWM. Mostra tutti i post
Visualizzazione post con etichetta PWM. Mostra tutti i post

domenica 10 marzo 2024

ESP32: effetto Wow!

 Ero alla ricerca di un titolo per questo Post. Pensavo ESP 32 ...da brividi!

Fig. 1 - ESP32. Piastra di assieme prototipale


In effetti se realizzerete una piastra prototipale come quella in Figura 1, alcuni brividi potrebbero occorrere nel corso dei vostri sviluppi (...se non altro per l'utilizzo di così tante connessioni precarie come quelle dei cavetti di collegamento rapido.).

Cosa abbiamo inserito questa volta sulla nostra piastra prototipale? Ecco l'elenco:

  1. Audio I2S con altoparlante
  2. Display OLED
  3. Sensore di pressione BMP180
  4. Sensore di umidità e temperatura DHT11
  5. Orologio datario DS3231
  6. microSD card con File System
  7. Rele di potenza
  8. Led PWM
  9. Encoder rotativo
  10. Web Server con visualizzazione dati e comandi remoti

L'effetto Wow è che il tutto è stato provato con un programma compatibile con l'IDE Arduino.

Se siete interessati a ricevere gratuitamente il codice sorgente, contattatemi personalmente.

Per il resto Vi auguro una buona sperimentazione con ESP 32 e a presto :)


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.