I2C Arduino master ADC ATtiny85

L’I2C Arduino master ADC ATtiny85 segue il precedente articolo dedicato all’ATtiny85 come micro controllore per acquisire dati analogici.

I2C Arduino master ADC ATtiny85

 

Se non lo hai già fatto ti consiglio di leggere il precedente articolo I2C ATtiny85 slave ADC in cui puoi leggere e apprendere le basi sia della programmazione sugli Attiny sia le operazioni di trasferimento IIC tra quest’ultimi ed arduino o tra loro.

Collegamenti dell’I2C Arduino master ADC ATtiny85

I collegamenti tra i due micro controllori è il medesimo mostrato e realizzato per il primo articolo su questo argomento, lo riporto per completezza della descrizione:

I2C Attiny85 slave ADC schema

Lo sketch I2C Arduino master ADC

Lo sketch I2C Arduino master ADC ATtiny85 dovrai caricarlo su Arduino dopo aver usato la board per il trasferimento del precedente sketch sull’ATtiny.

Ricorda di rimettere l’IDE in modalità “AVR ISP” prima di trasferire il codice sull’arduino uno:

//Code for the Arduino Master
#include <Wire.h>

#define TARGET_ID 0x08

void setup() {
 Wire.begin(); // join i2c bus (address optional for master)
 Serial.begin(9600); // start serial for output
 Serial.println( "Setup Success" );
}
 
void loop() {
  Wire.requestFrom(TARGET_ID, 2); // request 1 byte from slave device address 4
 
  while(Wire.available() > 0) {
    byte adc3H = Wire.read();
    byte adc3L = Wire.read();

    int adc3 = adc3H << 8 | adc3L;
    
    Serial.print( "ADC: " );
    Serial.print( adc3H );
    Serial.print( " | " );
    Serial.print( adc3L );
    Serial.print( " = " );
    Serial.print( adc3 );
    Serial.print( "\n" );
   }
 
delay(100);
}

siccome questo codice va su una board dotata di micro controllore tipo ATmega328, ATmega2560, ATmega32u4 o successivi la libreria Wire usata alla linea 01 è quella standard a cui sei abituato;

linea 04: desfinisci l’indirizzo target, ossia quello da interrogare;

linea 07-09: inizializza sia gli oggetti Wire sia la comunicazione Seriale;

linea 13: mediante il metodo requestFrom specificando l’indirizzo a cui inviare la richiesta ed il numero di byte da leggere ( 2 ) interroghi lo slave;

linea 15: quando lo slave avrà risposto ed il buffer sarà > 0 potrei leggerlo e svuotarlo;

linee 16-17: leggi in sequenzai due byte inviati e memorizzali nelle variabili: adc3H e adc3L. L’operazione di lettura svuota anche il buffer;

linea 19: definisci una variabile di tipo int in cui memorizzeremo i valori ricevuti. Il primo valore, essendo quello high, dovrai shiftarlo di 8 verso sinistra ( << ) in opposizione alla precedente ooperazione di shift eseguita sull’Attiny85. Poi concateni gli 8 bit meno significativi con il ( | );

linee 21-27: scrivi sul monitor seriale i valori ricevuti adc3H e adc3L e la risultante.

Il risultato sul monitor seriale con il potenziometro al valore minimo dovrebbe essere simile al seguente:

I2C Attiny85 slave ADC low values

e ruotato al valore massimo:

I2C Attiny85 slave ADC high values

Se desideri approfondire le informazioni in merito alle operazioni di conversione byte 2 int puoi leggere la Reference Guide arduino:

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/i2c-arduino-master-adc-attiny85.html

2 comments

    • Paolo on 30 aprile 2017 at 10:34
    • Reply

    Ciao Mauro,
    dai un’occhiata al commento della linea 13.

    Paolo

    1. Ciao Paolo,
      grazie per la segnalazione.
      Il commento corretto sarebbe: // request 2 byte from slave device address 8 come descritto nella spiegazione dello sketch.
      Si è trattato di un refuso da copia e incolla di precedenti esperimenti, grazie.

Lascia un commento

Your email address will not be published.

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