Show Posts
Pages: 1 ... 3 4 [5] 6 7 ... 26
61  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.
62  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.
63  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
64  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
65  International / Generale / Re: A quando una UNO plus? on: April 07, 2014, 11:19:19 am
x iscrizione  smiley
66  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
67  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
68  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...
69  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... 
70  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.
71  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?
72  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.
73  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
74  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: March 27, 2014, 06:56:01 am
Per il mio sensore ho usato questo schema messo a punto grazie a Michele Menniti:



Collegato ad un pin analogico, lo sketch usato per i primi test è questo:

Code:
byte levelsensor = A0;

void setup() {
   Serial.begin(9600);
   analogReference(INTERNAL);
}

void loop() {

  Serial.println(analogRead(levelsensor));
  delay(50);
           
}

E qui a pagina due un pò di test eseguiti a varie temperature dell'acqua.

https://docs.google.com/spreadsheet/ccc?key=0Ah2GzeM3ZZu4dFg5cmRxVUVyQ2FpMFBtRklDN1JPd2c&usp=sharing#gid=1

Ora hai da divertirti se vuoi  smiley-yell

il problema con gli ultrasuino mi pare fosse che potrebbe dare fastidio ad alcuni animali
ma non si parlava di pesci qui? che c'entrano ora i maiali? mai visto uno in un acquario  smiley-yell

ROTFL  smiley-razz  smiley-grin  smiley-lol
75  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: March 27, 2014, 05:28:48 am
però non per essere testardo ma i sensori ad ultrasuoni sono accesi al massimo per qualche microsecondo ogni ora per controllare il livello e per qualche secondo al massimo quando funziona la pompa di rabbocco quindi non credo che siano tanto pericolosi
sarebbe inutile misurare h24 la colonna d'acqua anche perchè l'evaporazione non è istantanea quindi un controllo all'ora va più che bene
In parte hai ragione, ovvero nel casi di utilizzo come semplice osmoregolatore, ma se li usi anche per i cambi dell'acqua ecco che li tieni accesi per diversi minuti continuamente, personalmente non me la sono sentita di usarli, in più non so nemmeno se ne esistano per uso in ambienti costantemente umidi e se siano efficaci anche per rilevazioni su superfici liquide, personalmente non me la sono sentita di usarli.
Se li provi, sarei curioso di sapere come ti trovi.
Attendo notizie anche per il PH ovviamente.

Ciao
Pages: 1 ... 3 4 [5] 6 7 ... 26