Attiny84 IIC Leonardo

Attiny84 IIC Leonardo segue i precedenti articoli dedicati al protocollo I2C o IIC con gli Attiny

Attiny84 IIC Leonardo

La maggior parte degli articoli che ho letto sulla comunicazione i2c dei microcontrollori attiny è dedicato all’attiy85

Ho voluto quindi sperimentare con l’attiny84 per sfruttare più ingressi ed uscite analogiche di quelle disponibili sul modello 85.

Pinout Attiny84 IIC Leonardo

ATTiny84 ATTiny44 pinout

il pinout dell’attiny84 ti permette di individuare che i pin IIC sono:

  • SDA: pin 7 o PA6
  • SCL: pin 9 o PA4

l’alimentazione è invertita, rispetto all’asse longitudinale del componente, per cui trovi:

  • +5v al pin 1 ( sulla sinistra )
  • Gnd sul pin 14 ( sulla destra )

i restanti pin hanno funzioni specifiche che ti invito ad approfondire nel pin out o sul datasheet ufficiale.

Il circuito Attiny84 IIC Leonardo

Il circuito lo puoi realizzare sulla board come in figura:

Attiny84 IIC Leonardo collegamenti

da cui noti che ho utilizzato 4 pin per acquisire informazioni di tipo analogico e 2 per i segnali di tipo digitale.

Avrai certamente intuito che se nei precedenti articoli il joystick era solo uno in questo esempio ne potrai utilizzare due:

Attiny84 IIC Leonardo joystick pin

nota che i cavi giallo e blu sono stati usati rispettivamente per il +5v e Gnd.

Infine i collegamenti verso Arduino:

Attiny84 IIC Leonardo arduino conn

Lo sketch Attiny84 IIC Leonardo

Lo sketch Attiny84 IIC Leonardo usa il primo come slave I2C per acquisire i sei segnali descritti nel paragrafo precedente:

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

#define ADC0 A0
#define ADC1 A1
#define ADC2 A2
#define ADC3 A3

#define SWH1 5
#define SWH2 7

void setup() {
    TinyWireS.begin(I2C_SLAVE_ADDRESS); // join i2c network
    TinyWireS.onRequest(requestEvent);
 
    pinMode(ADC0, INPUT_PULLUP);
    pinMode(ADC1, INPUT_PULLUP);
    pinMode(ADC2, INPUT_PULLUP);
    pinMode(ADC3, INPUT_PULLUP);
    
    pinMode(SWH1, INPUT_PULLUP);
    pinMode(SWH2, INPUT_PULLUP);
}

void loop() {
    TinyWireS_stop_check();
}
 
void requestEvent() {
    int val=analogRead(ADC0);
    uint8_t valLow = val & 0xff;
    uint8_t valHigh = (val >> 8);
    TinyWireS.send(valHigh);
    TinyWireS.send(valLow);

    val=analogRead(ADC1);
    valLow = val & 0xff;
    valHigh = (val >> 8);
    TinyWireS.send(valHigh);
    TinyWireS.send(valLow);

    val=analogRead(ADC2);
    valLow = val & 0xff;
    valHigh = (val >> 8);
    TinyWireS.send(valHigh);
    TinyWireS.send(valLow);

    val=analogRead(ADC3);
    valLow = val & 0xff;
    valHigh = (val >> 8);
    TinyWireS.send(valHigh);
    TinyWireS.send(valLow);

    byte swval=digitalRead(SWH1);
    TinyWireS.send(swval);

    swval=digitalRead(SWH2);
    TinyWireS.send(swval);
}

la linea 01: definisci l’indirizzo a cui il componente risponderà alle richieste del master;

linea 03: includi la libreria Wire slave per attiny;

linee 05-11: definisci i pin che utilizzi per collegare i 4 senali analogici ed i due digitali;

linee 13-24: la setup() è simile a quello che abbiamo già usato per gli sketch precedenti a parte la proliferazione dei comandi di pinMode necessari per acquisire tutti i pin definiti alle linee 05-11;

linea 27: la loop non è variata assolutamente in quanto il suo unico scopo è fermare la comunicazione dopo che questa è stata instradata al master;

linee 31-35: è il primo dei blocchi in cui leggi un valore a 10bit su un pin analogico e lo converti in due variabili di tipo byte per poter inviare questa informazione via IIC, se vuoi approfondire l’argomento ti consiglio la lettura dei precedenti articoli dedicati all’I2C;

linee 37-53: ripeti le medesime operazioni per tutti gli altri pin analogici;

linee 55-59: preleva il segnale digitale dai pin 5 e 7 e spediscilo al master senza ulteriori elaborazioni.

Nel prossimo articolo leggerai il codice da caricare sulla Leonardo per la lettura dei dati i2c inviati dai sensori attraverso Attiny84 IIC Leonardo.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/attiny84-iic-leonardo.html

1 ping

  1. […] « Attiny84 IIC Leonardo […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.