Problema collegamento e comunicazione sensore Pressione MS5837-30BA e Digispark

Ciao a tutti,

sto cercando di realizzare un piccolo progetto nel quale, come parametro di controllo, devo misurare una pressione di un fluido mediante un sensore ad immersione.

Come sensore ho optato per un MS5837-30BA della Mouser, ma montato su un modulo CJMCU-5837.

Questo modulo presenta un cavetto con già le connessioni necessarie per poterlo interfacciare ad Arduino:
VCC, GND, SCL e SDA. Il modulo comunica mediante I2C.

Ora, vedendo il PCB del modulino e lo schema elettrico del produttore del sensore “nudo”, sul modulo sono già presenti un regolatore di tensione con condensatore di disaccoppiamento e due resistenze di pullup da 10kohm.

In definitiva, ho collegato SCL e SDA rispettivamente ai pin 7 e 5. Vcc e GND prelevati dalla stessa sorgente che alimenta il Digispark.

A questo punto, non sapendo NULLA di comunicazione I2C, se non che è una specie di seriale che lavora a nodi, dove ad ogni nodo corrisponde un sensore o uno slave generico a cui è associato un codice ASCII, ho cercato in rete e ho letto che, per comunicare in I2C con un sensore di questo tipo, bisogna innanzitutto conoscerne il codice identificativo.

Qui iniziano i dolori: non conoscendo questo codice (fornitore sensore e produttore modulo non hanno nulla a livello di documentazione in merito), ho pescato dagli schetch di esempio del Digispark un programma che, mediante interrogazione sulla linea I2C, effettua una specie di ping incrementando l’indirizzo di destinazione fino a +127.

#include <Wire.h>
#include <DigiKeyboard.h>

void setup()
{

  Wire.begin();
  DigiKeyboard.delay(3000);

  DigiKeyboard.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  DigiKeyboard.println("Scanning...");

  nDevices = 0;
  for (address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      DigiKeyboard.print("I2C device found at address 0x");
      if (address < 16)
        DigiKeyboard.print("0");
      DigiKeyboard.print(address, HEX);
      DigiKeyboard.println("  !");

      nDevices++;
    }
    else if (error == 4)
    {
      DigiKeyboard.print("Unknow error at address 0x");
      if (address < 16)
        DigiKeyboard.print("0");
      DigiKeyboard.println(address, HEX);
    }
  }
  if (nDevices == 0)
    DigiKeyboard.println("No I2C devices found\n");
  else
    DigiKeyboard.println("done\n");

  DigiKeyboard.delay(5000);           // wait 5 seconds for next scan
}

Bene, al primo “Scanning…” che appare a schermo (mantenendo il Digispark collegato via USB e cliccando su un file vuoto del Notepad) non accade più nulla, come se tutto andasse in blocco.

Ho provato anche con un secondo Digispark, ma nulla. Ho provato per scrupolo ad utilizzare ulteriori resistenze di pullup, ma nulla.

Manca qualcosa nel Codice? Idee?

Grazie infinite.
Fabio

Digispark.... quale modello?

L'indirizzo di quel sensore dovrebbe essere 0x76
E comunque c'è una libreria per Arduino Questa

Questo:

Ho anche già provato ad inserire la libreria da te indicata, ma ancora nulla.

Domanda stupida: i pin 5 e 7 devono essere prima inizializzati in qualche modo per poter funzionare in modalità SCL e SDA?

i pin 5 e 7 devono essere prima inizializzati in qualche modo per poter funzionare in modalità SCL e SDA?

Dipende...
che libreria usi per gestire l' I2C ?

Ci sono le resistenze di PullUP sul modulino ?

brunello22:
Dipende...
che libreria usi per gestire l' I2C ?

Ci sono le resistenze di PullUP sul modulino ?

Per l'I2C uso la wire.h già inserita di default nel lo sketch.

Le resistenze di PullUP ci sono, come indicato nel primo post

La Wire NON è fatta per gli ATtiny, ma per gli ATmega ... devi utilizzare la TinyWireM (M sta per master, esiste anche la TinyWireS per fare da slave).

Per I2C ti consiglio lo studio di QUESTO e di QUESTO perché ...
... non mi sembra tu abbia ben chiare le sue caratteristiche. ::slight_smile:

Guglielmo

gpb01:
Per I2C ti consiglio lo studio di QUESTO e di QUESTO perché …
… non mi sembra tu abbia ben chiare le sue caratteristiche. ::slight_smile:

Guglielmo

Grazie, infatti l´avevo proprio scritto nel primo post, senza nascondere le mie lacune.

Per quanto riguarda la libreria, probabilmente ci sará un problema nello sketch di esempio. Questo lo intuisco dal fatto che questo sketch é presente nella lista dei programmi esemplificativi della sezione digispark…

Grazie per la dritta :wink: