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.
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:
- Attiny85 encoder master
- Attiny85 Encoder Arduino Slave
- I2C attiny85 slave ADC
- I2C Arduino Master ADC Attiny85
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:
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:
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.
2 ping
[…] « Attiny85 slave ADC i2C joystick switch […]
[…] Attiny85 slave ADC i2C joystick switch […]