Ricerca libreria x Attiny 85

Buona Pasqua a tutti, sto cercando di utilizzare più AT85 come slave e un Nano come master, i diversi esempi reperiti utilizzano la libreria TinyWireS.h, qualcuno sa indicarmi dove trovarla? io riesco soltanto a reperire la TinyWireM.h!!

Grazie + saluti
Enrico

Se tu usassi un "core" più aggiornato, come quello di Spence Konde, NON dovresti usare altro che la classica Wire senza cercare cose ormai più che obsolete ... :roll_eyes:

Guglielmo

Grazie.

Ho verificato e già lo uso (http://drazzy.com/package_drazzy.com_index.json).

Comunque non riesco a trasferire il valore di prova con i seguenti programmi!

Master ( su Arduino Nano):

#include <Wire.h>
#include "Seeed_BME280.h"

int prex = 1234; // valore  prova

void setup()
{
  Serial.begin(9600);

  Wire.begin();
}

void loop()
{
  Wire.beginTransmission(8);
  Wire.write(prex);
  Wire.endTransmission(8);  
  Serial.println(prex);

  delay (1000);
}

Slave (su Attiny85):

#include <Wire.h>
#include <Arduino.h>
#include <TM1637TinyDisplay.h>

// Module connection pins (Digital Pins)
#define CLK 3
#define DIO 4

int prex = 0;

TM1637TinyDisplay display(CLK, DIO);

void setup()
{
  Wire.begin(8);

  display.begin();
  display.setBrightness(0x0f);
}

void loop()
{
  Wire.onReceive(riceviDati);

  display.showNumberDec(prex, false);

  delay (2000);
}
void riceviDati() {
  prex = Wire.read();
}

Propio non riesco ad individuare lo/gli errori!

Saluti
Enrico

Ciao. Non ho mai provato la wire su attiny, però vedo che ci sono 2 esempi "master_writer" e "slave_receiver"... hai provato utilizzando questo esempio?

Ti conviene leggere la documentazione sia di Wire.write() che di Wire.read(), non puoi trasferire un int con la sintassi che stai usando.

Ciao, Ale.

Grazie, sapevo che doveva esserci un errore nella trasmissione, ma, non avendo due Nano liberi, non capivo dove e perchè (mai avevo usato lo I2C se non con i sensori).

Enrico

Modificato i programmi (come sotto), nessun problema utilizzando come slave anche un Nano.

Le difficoltà sorgono utilizzando come slave un AT85; sembrerebbe che il Nano master neppur trasmetta! Qualche idea?

MASTER:

/*
   Modificato per arduino nano
   con 280  da fare
*/

#include <Wire.h>
#include "Seeed_BME280.h"

byte prex[4] = {1, 2, 3, 4}; //dato da inviare

void setup()
{
  Serial.begin(9600);

  Wire.begin();
}

void loop()
{
  Wire.beginTransmission(8);

  Wire.write(prex[0]);
  Wire.write(prex[1]);
  Wire.write(prex[2]);
  Wire.write(prex[3]);

  Wire.endTransmission(8);

  delay (3000);
}

SLAVE:

/*
   Slave per visualizzare il numero ricevuto
*/

#include <Wire.h>
#include <Arduino.h>
#include <TM1637TinyDisplay.h>

// Module connection pins (Digital Pins)
#define CLK 3
#define DIO 4

int prex[4] ;
int pressione = 0;

TM1637TinyDisplay display(CLK, DIO);

void setup()
{
  Wire.begin(8);
  //Serial.begin(9600);
  display.begin();
  display.setBrightness(BRIGHT_HIGH);

  Wire.onReceive(riceviDati);
}

void loop()
{
}

void riceviDati() {

  byte pres1 = Wire.read();
  byte pres2 = Wire.read();
  byte pres3 = Wire.read();
  byte pres4 = Wire.read();

  prex[0] = pres1;
  prex[1] = pres2;
  prex[2] = pres3;
  prex[3] = pres4;

  pressione = (prex[0] * 1000) + (prex[1] * 100) + (prex[2] * 10) + prex[3];
  //Serial.println(pressione);
  display.showNumberDec(pressione, false);
}

Saluti
Enrico

Non credo che il codice dello slave sia giusto, però se dici che tra 2 nano funziona ne prendo atto. A livello fisico di collegamenti sei sicuro che siano giusti? Hai messo i pullup su SDA e SCL?

Ciao, Ale.

Vero mi ero dimenticato! Probabilmente sul nano sono già presenti. Domattina provvedo.

Enrico

Come immaginavo, i due resisistori (da 10 K) non hanno avuto alcun effetto. Cambiato il nano master: stesso risultato. Ricontrollato i collegamenti, sono OK.

Qualcuno ha altre idee o bisogna presumere che lo AT85 non funziona come ricevitore I2C?

Saluti
Enrico

Intanto i resistori sono OBBLIGATORI perché il bus I2C è open-drain e quindi occorre qualche cosa che tenga i pin HIGH, poi ... magari il valore ideale per questi semplici collegamenti è 4.7K ... comunque dovrebbe essere poco influente.

I GND delle varie MCU sono tutti in comune vero?

Guglielmo

Questo quello che Spence Konde scrive tra le vari cose nelle note relative al core ...

When using I2C on anything other than the ATtiny48/88

You must use an I2C pullup resistor on SCL and SDA (if there isn't already one on the I2C device you're working with - many breakout boards include them). 4.7k or 10k is a good default value. On parts with real hardware I2C, the internal pullups are used, and this is sometimes good enough to work without external pullups; this is not the case for devices without hardware I2C (all devices supported by this core except 48/88) - the internal pullups can't be used here, so you must use external ones. Even on the 48/88 you should always use external pullups as the internal pullups are not nearly as strong as the specification requires.

Per il resto, scrive un'altra cosa importante:

Current strongly recommended IDE version: 1.8.13

Inoltre spero che tu stia utilizzando ancora il "core" ATTinyCore 1.5.2 e non la nuova release del core 2.x che è ancora sperimentale.

Guglielmo

Certo, lo AT85 prende corrente dal Nano, quindi è collegato sia con GND sia con 5V.

Utilizzo la 1.8.19.

Enrico

Leggi con attenzione cosa chiedo ...
... NON ho parlato di IDE, ho parlato di ATTinyCore 1.5.2 ... :roll_eyes:

Guglielmo

P.S.: verifichi la versione nel gestore delle board

Purtroppo parli con una persona che ha scoperto arduino da pochi anni e non ha le "basi" e/o la facilità di utilizzo del linguaggio informatico delle nuove generazioni. Attiny l'ho scoperto da meno di un anno, ATTinyCore lo scopro adesso non sapevo nemmeno esistesse.
Su internet ho visto esiste un file .zip devo scaricarlo? e dove metterlo?
Scusa le domande certamente banali per chi è esperto del settore, ma mi hanno insegnato a chiedere quando non si sa (ed il mio NON sapere nella materia è sicuramente enorme!).

Enrico

Ma scusa, poco sopra ai scritto:

... dicendo che già lo usavi :roll_eyes:

Ti ho indicato che devi andare nel "Gestore delle Schede" dell'IDE (Board Manager) e verificare la versione del ATtinyCore che hai installato.

Guglielmo

Non sono riuscito a verificare la versione .... dove la trovo?

Nelle impostazioni ho queste:
image

Scaricata da questo ma non riesco a trovare la versione.

Enrico

Scusa ma io che ho scritto? :open_mouth:

Guglielmo

Scusa ero (e sono) impallato!!!

Uso la 1.5.2.

Enrico