Attiny84 i2c led è lo sketch che ti permette di usare un attiny84 come slave i2c per controllare 3 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:
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.
Notice
Nota che il led giallo non presenta la resistenza di limitazione questo perchè nella realizzazione pratica del circuito ho utilizzato un led da 5mm la cui luminosità era affievolita eccessivamente dalla resistenza.
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: