Show Posts
Pages: 1 ... 3 4 [5] 6 7 ... 26
61  International / Software / Re: RTC DS3231 lettura registro interno della temperatura on: April 10, 2014, 12:34:16 am
Ciao Leo,
grazie per la risposta.
Il bit 7 partendo la numerazione da 0 è appunto l'ottavo bit, di fatto facendo
Code:
if (MSBtemp >> 7 == 1)
non sto leggendo proprio quello?
Forse sbaglio io, anzi sicuramene, più tardi verifico sia questo che l'assegnazione a char come mi hai suggerito.
Grazie ancora.

Ciao Riccardo.
62  International / Software / Re: RTC DS3231 lettura registro interno della temperatura on: April 09, 2014, 04:28:44 pm
Ho fatto le prove di cui parlavo (RTC in freezer)
ed il codice, sembra funzionare, lo riporto perché avevo omesso un comando e sbagliato la dichiarazione di MSB:

Code:
#include <Wire.h>

byte secondi, minuti, ora, giornosett, giorno, mese;
int anno;
char* gset[] = {"Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"};

byte decToBcd(byte val) // Da decimale a binario
{ return ( (val / 10 * 16) + (val % 10) );
}

byte bcdToDec(byte val) // Da binario a decimale
{ return ( (val / 16 * 10) + (val % 16) );
}

void LetturaDataOra()
{ Wire.beginTransmission(0x68);
  Wire.write((byte)0x00);
  Wire.endTransmission();

  Wire.requestFrom(0x68, 7);
  //recupero i 7 byte relativi ai corrispondenti registri

  secondi = bcdToDec(Wire.read() & 0x7f);
  minuti = bcdToDec(Wire.read());
  ora = bcdToDec(Wire.read() & 0x3f);
  giornosett = bcdToDec(Wire.read());
  giorno = bcdToDec(Wire.read());
  mese = bcdToDec(Wire.read());
  anno = bcdToDec(Wire.read()) + 2000;
}

float Temp() {
  Wire.beginTransmission(0x68);
  Wire.write(0x11);
  Wire.endTransmission();

  Wire.requestFrom(0x68, 2);
  int MSBtemp = Wire.read();
  byte LSBtemp = Wire.read();
  Serial.print("  "); Serial.print(MSBtemp, BIN); Serial.print("  ");

  if (MSBtemp >> 7 == 1) {//controllo il bit 7 per sapere se ho ricevuto un numero negativo
    bitWrite(MSBtemp, 7, 0);
    MSBtemp = ~(~MSBtemp + 1 + 128) + 1;  //  se lo è eseguo la coversione del byte con complemento a 2
  }

  float Temperature = (float) (MSBtemp) + (float) ((LSBtemp >> 6) * 0.25);
  return Temperature;
}

void stampa0 (int dato_tempo)
{ if (dato_tempo < 10)
    Serial.print(F("0"));
  Serial.print(dato_tempo);
}

void setup()
{
  //inizializzo la seriale
  Serial.begin(9600);

  //inizializzo la libreria
  Wire.begin();

  /*Wire.beginTransmission(0x68); //il primo byte stabilisce il registro iniziale da scivere
  Wire.write((byte)0x00);
  Wire.write(decToBcd(1));
  Wire.write(decToBcd(41));
  Wire.write(decToBcd(10));
  Wire.write(decToBcd(2));
  Wire.write(decToBcd(8));
  Wire.write(decToBcd(4));
  Wire.write(decToBcd(14));
  Wire.endTransmission();*/
}


void loop()
{

  LetturaDataOra();

  Serial.print(gset[giornosett - 1]);
  Serial.print(" ");
  stampa0(giorno);
  Serial.print("/");
  stampa0(mese);
  Serial.print("/");
  stampa0(anno);
  Serial.print("  ");
  stampa0(ora);
  Serial.print(":");
  stampa0(minuti);
  Serial.print(":");
  stampa0(secondi);
  Serial.print("  Temperatura: ");
  Serial.print(Temp());
  Serial.println();

  delay(1000);
}

Però ripropongo la domanda, ho usato il metodo giusto, o c'è un metodo migliore di quello che ho usato io?

Code:
  if (MSBtemp >> 7 == 1) {//controllo il bit 7 per sapere se ho ricevuto un numero negativo
    bitWrite(MSBtemp, 7, 0);
    MSBtemp = ~(~MSBtemp + 1 + 128) + 1;  //  se lo è eseguo la coversione del byte con complemento a 2
  }

Grazie ancora per il vostro tempo.

Riccardo

63  International / Software / RTC DS3231 lettura registro interno della temperatura on: April 09, 2014, 12:32:21 pm
Ciao a tutti  smiley,
da un paio di giorni, mi sono messo a giocare con un RTC DS3231 (http://datasheets.maximintegrated.com/en/ds/DS3231.pdf), appurato che  tutto sommato lo si può tranquillamente leggere e scrivere come fosse un DS1307, mi sono concentrato nella lettura del suo registro della temperatura, nel datasheet se ne parla a pag. 15.
Purtroppo per me restituisce i valori negativi in complemento a 2, mi sono andato a studiare come funziona la cosa ed avrei scritto lo sketch che vedete qui sotto.

Code:
#include <Wire.h>

byte secondi, minuti, ora, giornosett, giorno, mese;
int anno;
char* gset[] = {"Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"};

byte decToBcd(byte val) // Da decimale a binario
{ return ( (val / 10 * 16) + (val % 10) );
}

byte bcdToDec(byte val) // Da binario a decimale
{ return ( (val / 16 * 10) + (val % 16) );
}

void LetturaDataOra()
{ Wire.beginTransmission(0x68);
  Wire.write((byte)0x00);
  Wire.endTransmission();

  Wire.requestFrom(0x68, 7);
  //recupero i 7 byte relativi ai corrispondenti registri

  secondi = bcdToDec(Wire.read() & 0x7f);
  minuti = bcdToDec(Wire.read());
  ora = bcdToDec(Wire.read() & 0x3f);
  giornosett = bcdToDec(Wire.read());
  giorno = bcdToDec(Wire.read());
  mese = bcdToDec(Wire.read());
  anno = bcdToDec(Wire.read()) + 2000;
}

float Temp() {
  Wire.beginTransmission(0x68);
  Wire.write(0x11);
  Wire.endTransmission();

  Wire.requestFrom(0x68, 2);
  int MSBtemp = Wire.read();
  byte LSBtemp = Wire.read();
  
  if (MSBtemp >> 7 == 1) //controllo il bit 7 per sapere se ho ricevuto un numero negativo
    MSBtemp = ~(~MSBtemp + 1 + 128) + 1;  //  se lo è eseguo la coversione del byte con complemento a 2
  
  float Temperature = (float) (MSBtemp) + (float) ((LSBtemp >> 6) * 0.25);
  return Temperature;
}

void stampa0 (int dato_tempo)
{ if (dato_tempo < 10)
    Serial.print(F("0"));
  Serial.print(dato_tempo);
}

void setup()
{
  //inizializzo la seriale
  Serial.begin(9600);

  //inizializzo la libreria
  Wire.begin();

  Wire.beginTransmission(0x68); //il primo byte stabilisce il registro iniziale da scivere
  Wire.write((byte)0x00);
  Wire.write(decToBcd(1));
  Wire.write(decToBcd(41));
  Wire.write(decToBcd(10));
  Wire.write(decToBcd(2));
  Wire.write(decToBcd(8));
  Wire.write(decToBcd(4));
  Wire.write(decToBcd(14));
  Wire.endTransmission();
}


void loop()
{

  LetturaDataOra();

  Serial.print(gset[giornosett - 1]);
  Serial.print(" ");
  stampa0(giorno);
  Serial.print("/");
  stampa0(mese);
  Serial.print("/");
  stampa0(anno);
  Serial.print("  ");
  stampa0(ora);
  Serial.print(":");
  stampa0(minuti);
  Serial.print(":");
  stampa0(secondi);
  Serial.print("  Temperatura: ");
  Serial.print(Temp());
  Serial.println();

  delay(1000);
}

Nella pratica, ho fatto un po’ di prove in quest’altro sketch e sembra che la conversione dei binari a 7 bit funzioni, in alto nei commenti ho messo un paio di esempi da provare.

Code:
/* -25 = -00011001
          11100110 + byte negato
                 1
          --------
          11100111 complemento a 2 ovvero come dovrebbe essere il registro dell'RTC in caso di temperatura -25

   -40 = -00101000
          11010111 + byte negato
                 1
          --------
          11011000 complemento a 2 ovvero come dovrebbe essere il registro dell'RTC in caso di temperatura -25

*/

byte regtemp_RTCDS3231 = B11100111; // -25 complemento a due

void setup() {
  Serial.begin(9600);
  Serial.print("regRTCDS3231= ");
  Serial.print(regtemp_RTCDS3231, BIN); // giusto per essere sicuro che il byte sia memorizzato correttamente
  
  Serial.print("  Valore decimale = ");
  if (regtemp_RTCDS3231 >> 7 == 1)  { // se il bit 7 è 1 ho un valore negativo
    bitWrite(regtemp_RTCDS3231, 7, 0); // azzero il bit del segno
    int valore_dec = ~(~regtemp_RTCDS3231 + 1 + 128) + 1;
    Serial.print("  Valore decimale = ");
    Serial.print(valore_dec);
  }
  else
    Serial.print(regtemp_RTCDS3231);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Nella teoria però non sono sicuro di aver fatto le cose a modino, a dirla tutta, a furia di fare tentativi non ricordo nemmeno più come ci sono arrivato  smiley-red, magari c’è un metodo molto più semplice, se fosse me lo potreste illustrare?

Chiaramente la prova pratica la farò stasera tenendo l’RTC nel freezer per un po’ e andandolo a leggere poi, ovviamente con le dovute cautele e cercando il più possibile di evitare corti dovuti alla condensa o altro.

Grazie in anticipo per il tempo che vorrete dedicarmi.
64  Community / Bar Sport / Re: [OT ITA] Lo spamm bar on: April 08, 2014, 12:59:22 am
@riciweb: ehhhh male male male... per poter essere a conoscenza di questo thread devi prima superare un giro di quizzzone, ovviamente preventivamente devi crearne un pezzo

Aiutoooooooo!!! E mo che è sto quizzone???
Quante pagine indietro delle attuali 185 devo andare per capire di cosa si tratta  smiley-razz
Buaaaaa... Buaaaaa.... non ci scrivo più qui! Ho capito l'antifona e me ne vado...

 smiley-twist Buona giornata a tutti.
65  International / Generale / Re: A quando una UNO plus? on: April 08, 2014, 12:53:00 am
Anche io da tempo pensavo di disegnare una Uno plus come te e basata appunto, sul 1248p e mantenedo il layout della Uno attuale per preservare la compatibilità con le shield già in commercio, soprattutto quelle ufficiali; sul lato disegno sarei anche riuscito credo, ma poi ho desistito perche lato core e compatibilità delle librerie (almeno quelle ufficiali) non sarei nemmeno riuscito a capire da dove cominciare  smiley-red però potrebbe essere un bel progettino della board italiana, magari da portare al maker faire  smiley-lol
Ovviamente questo non ha nulla a che vedere con i possibili futuri sviluppi del mio progettino!!!
Non siate maligni eh!!! Ahahahahah  smiley-lol smiley-lol smiley-lol smiley-lol

Riccardo

P.S. nel caso anche io potrei essere un beta tester  smiley
66  Community / Bar Sport / Re: [OT ITA] Lo spamm bar on: April 07, 2014, 01:21:36 pm
Stavo cercando su Ebay dei "sensori a ultrasuino" ma non ne ho trovati.
Qualcuno sa perché?  smiley-mr-green smiley-mr-green
sono strumenti pregiati, non li trovi su ebay, devi prenderli direttamente al produttore  smiley-mr-green

Che matti che siete ROTFL
Non sapevo che c'era anche questo angolino nel forum, vi ho letto per un pò di pagine, forte!

Ciaoooo...  smiley smiley
67  International / Generale / Re: A quando una UNO plus? on: April 07, 2014, 11:19:19 am
x iscrizione  smiley
68  International / Generale / Re: Arduino proclama il Arduino Day 2014 on: March 31, 2014, 03:52:13 am
A va beh!
Non ero arrivato fino in fondo...  smiley-lol
69  International / Generale / Re: Arduino proclama il Arduino Day 2014 on: March 31, 2014, 03:33:37 am
Si sto guardando ora, forse non sono ancora del tutto sveglio, ma non capisco nemmeno da dove si comincia, c'è un login, ma se volessi registrarmi da dove si fa?  smiley-red
70  International / Generale / Re: Arduino proclama il Arduino Day 2014 on: March 31, 2014, 03:07:06 am
E bravi!!!!
PaoloP superstar!!!

Io sono stato a quello di Roma, purtroppo solo nel primo pomeriggio ed anche frettolosamente, perché dovevo rientrare al lavoro  smiley-cry
Ho assistito alla presentazione dell'Arduino 3, una bella bestiola devo dire almeno a me lo è sembrata, sono stato molto colpito anche dal nuovissimo web-ide che hanno/stanno sviluppando apposta per la tre, anche se sinceramente oltre che colpito rimango anche alquanto perplesso, nel senso che siamo da un'eternità con la 1.5.x perennemente in BETA, e nel frattempo sviluppano un'altro ide ancora  smiley-eek ma staremo a vedere...
71  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: March 31, 2014, 02:58:21 am
Effettivamente io sto usando l'eternamente BETA 1.5.6, l'ho duvuta usare perché è l'unica che ha le librerie  aggiornata anche per il TFT ufficiale che aveva problemi con la classe PImage... 
72  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: March 29, 2014, 02:39:05 pm
Non so cosa dirti, a me compila senza errori.
Prova a riscaricare l'ultima versione dello sketch.
73  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: March 29, 2014, 01:04:35 pm
Ciao,
che versione dello sketch stai usando e che versione di IDE?
Hai modificato tu lo sketch?
74  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: March 28, 2014, 01:33:48 am
Si confermo quello che ha scritto Michele, si tratto di una libreria per quel protocollo, in prima pagina nel secondo post trovi i link a tutte le librerie.

Ciao.
75  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: March 27, 2014, 10:24:03 am
Michele sei terribile  smiley-lol smiley-lol smiley-lol smiley-lol smiley-lol
Pages: 1 ... 3 4 [5] 6 7 ... 26