«

»

Set 13

Stampa Articolo

Attiny84 i2c led

Attiny84 i2c led è lo sketch che ti permette di usare un attiny84 come slave i2c per controllare 3 led.

Attiny84 i2c led

I passato ho trattato più volte sketch in cui sono stati coinvolti l’arduino leonardo ed i micro controllori della famiglia attiny, tuttavia il ruolo degli attiny è sempre stato quello di fornire i dati al master, arduino  o genuino, di sensori connessi a se stessi.

In questo articolo leggerai come configurare l’attiny84 i2c led ossia come collegare 3 led all’attiny e accenderli via i2c. A prima lettura lo scopo di questo esperimento potrebbe risultare superfluo tuttavia ho reperito poca letteratura nel web che affronta l’argomento.

Lo schema dei collegamenti del Attiny84 i2c led

lo schema dei collegamenti dell’Attiny84 i2c led è semplice:

Attiny84 Arduino Led schema

i tre led sono connessi:

  • il led verde al pin D8, PWM;
  • il led blu al pin D7: PWM;
  • il led giallo al pin D9: digitale NO PWM;

il motivo per cui ho scelto questa configurazione è per avere almeno un led che non fosse in PWM e gli atri due in PWM lasciando gli altri pin dell’attiny84 liberi per acqisire segnali o altre informazioni.

Lo sketch dell’Attiny84 i2c led

questo sketch è da caricare sull’attiny84 che si comporta da slave e riceve i dati dall’arduino leonardo con i valori da applicare ai led.

il protocollo i2c, lato master, invia una sequenza di 3 byte, in ordine, per il led blu,verde e giallo.

// Code for the ATtiny85
#define I2C_SLAVE_ADDRESS 0x8 // Address of the slave
 
#include <TinyWireS.h>

#define OUTB 7   // LED BLUE
#define OUTG 8   // LED GREEN
#define OUTY 9   // LED YELLOW

void setup() {
    TinyWireS.begin(I2C_SLAVE_ADDRESS); // join i2c network
    TinyWireS.onReceive(receiveEvent);  // receive from WeMos
    
    pinMode(OUTB, OUTPUT);
    pinMode(OUTG, OUTPUT);
    pinMode(OUTY, OUTPUT);

    digitalWrite( OUTB,0 );
    digitalWrite( OUTG,0 );
    digitalWrite( OUTY,0 );
}

void loop() {
    // This needs to be here
    TinyWireS_stop_check();
}

void receiveEvent(uint8_t howMany) {
  if (TinyWireS.available()) {  
    if (howMany < 3) { 
      digitalWrite( OUTB,1 );
      digitalWrite( OUTG,1 );
      digitalWrite( OUTY,1 );
      return;
    } 
    howMany--; 
    if (!howMany) { return; }
    
    analogWrite( OUTB,TinyWireS.receive() );
    analogWrite( OUTG,TinyWireS.receive() );
    digitalWrite( OUTY,TinyWireS.receive() );
  }
}

Descrizione dello sketch

La linea 02: definisci l’indirizzo a cui l’Attiny deve attedersi i dati dal master;

linea 04: includi la libreria I2C per attiny;

linee 06-08: definisci i pin a cui sono collegati i led;

linea 11: inizializza la modalità slave impostando l’indirizzo i2c a cui deve rispondere;

linea 12: imposta l’evento onReceive in modo che ad ogni richiesta da parte del client richiami la funzione receiveEvent;

linee 14-20:  imposta i pin come OUTPUT e spegni tutti i led portando le rispettive uscite a 0;

linea 25: nel loop() imposta solo il comando TinyWireS_stop_check();

linea 28: definisci la funzione receiveEvent che accetta come parametro il numero di byte inviati;

linea 29: verifica se ci sono dati in arrivo dal master;

linee 30-34: se i dati in arrivo dal master sono meno di 3 byte accendi itre led e poi esci dalla funzione, i questo modo avrai un monitor sulla condizione in cui il master invia meno dati di quelli attesi;

linee 36-37: decrementa il contatore howMany e verifica che esistano ancora dati;

line3 39-41 applica ai tre led i rispettivi valori ricevuti;

 

Il video

Il video mostra l’effetto dei led controllati dall’Attiny84 i2c led attraverso il codice arduino che potrai leggere nel prossimo articolo:


Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/attiny84-i2c-led.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>