Attiny85 slave ADC i2C joystick switch

Attiny85 slave ADC i2C joystick switch è un esperimento che ho condotto in questi giorni con lo scopo di poter utilizzare l’attiny85 come interfaccia I2C sia per segnali Analogici sia Digitali.

Attiny85 slave ADC i2C joystick switch

In alcuni progetti che sto realizzando in questi giorni, e di cui leggerai nelle prossime settimane, ho avuto bisogno di controllare 2 input analogici ed un input digitale su micro controllori su cui il numero di ingressi analogici è inferiore al numero di sensori analogici di cui il progetto è dotato.

Per ovviare al problema senza incorrere in soluzioni elettroniche complesse ho deciso di provare con l’attiny85 slave ADC i2C joystick switch lasciando a quest’ultimo il compito di leggere i sensori quando gli viene richiesto dal master.

Approfondimenti sull’I2C con Attiny85

Puoi approfondire i concetti di Master e Slave I2C in modo pratico e comprendere meglio la logica master-slave dell’IIC leggendo i miei articoli dedicati all’argomento:

In cui alternatamente ho usato l’Atttiny85 sia come Master sia come Slave ed in particolare gli ultimi due articoli ho usato già l’attiny85 per leggere segnali analogici.

Il circuito Attiny85 slave ADC i2C joystick switch

Il primo esempio di acquisizione di:

  • due segnali analogici
  • un segnale digitale

che puoi realizzare usa un classico Joystick.

Come sai un joystick a due assi è un dispositivo dotato di due potenziometri, uno per asse, ed alcuni, come quello che ho utilizzato io, anche uno switch che funziona alla pressione del joystick verso il basso.

Il collegamento è alquanto semplice:

Attiny85 slave ADC i2C joystick switch schema

in cui puoi notare che utilizzo i pin ADC2 ed ADC3 dell’Attiny85 per leggere i segnali provenienti dai due potenziometri e il pin 1 ( numero 6 sull’integrato ) come pin digitale in input, come puoi vedere dal pinout:

ATtiny85 pinout

i restanti pin 0 e pin 2 servono all’attiny85 per la comunicazione iic verso il microcontrollore.

 

Il codice attiny85 ADC Slave

Il codice ricalca le righe descritte nell’articolo I2C attiny85 slave ADC ed ho evidenziato le sole linee differenti:

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

#define ADC3 A3
#define ADC2 A2
#define SWH1 1

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

void loop() {
    // This needs to be here
    TinyWireS_stop_check();
}
 
// Gets called when the ATtiny receives an i2c request
void requestEvent() {
    int val=analogRead(ADC2);
    uint8_t valLow = val & 0xff;
    uint8_t valHigh = (val >> 8);
    TinyWireS.send(valHigh);
    TinyWireS.send(valLow);

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

    val=digitalRead(SWH1);
    TinyWireS.send(val);
}

a completamento e comprensione dello sketch ecco cosa è cambiato:

linea 08: definisci il pin a cui hai collegato lo switch;

linea 16: imposta come INPUT il pin 1 ed l’uso della resisteza di PULLUP;

linea 38: leggi il valore presente sul pin SWH1 definito alla linea 08;

linea 39: esegui l’operazione di invio al master del valore acquisito.

La rimanente parte dello sketch è invariata rispetto a quella presentata precedentemente e che ti invito a leggere per comprendere meglio come gestisce l’acquisizione dei segali e li invia al micro controllore.

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/attiny85-slave-adc-i2c-joystick-switch.html

2 pings

  1. […] « Attiny85 slave ADC i2C joystick switch […]

  2. […] Attiny85 slave ADC i2C joystick switch […]

Lascia un commento

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.