Go Down

Topic: [Risolto]Possibile bug con sensore di pressione BMP085 e libreria Adafruit ??? (Read 1 time) previous topic - next topic

ratto93

Ciao ragazzi, oggi testando un sensore di pressione BMP085 con la libreria di Adafruit mi sono accorto di un comportamento alquanto anomalo nei dati restituiti come output nel serial monitor, sto provando con lo stesso errore si presenta con l'IDE 0023 di cui le foto... che con l'IDE 1.5
Veniamo al dunque con questo codice:
Code: [Select]
#include <Wire.h>
#include <Adafruit_BMP085.h>

/***************************************************
 This is an example for the BMP085 Barometric Pressure & Temp Sensor

 Designed specifically to work with the Adafruit BMP085 Breakout
 ----> https://www.adafruit.com/products/391

 These displays use I2C to communicate, 2 pins are required to  
 interface
 Adafruit invests time and resources providing this open source code,
 please support Adafruit and open-source hardware by purchasing
 products from Adafruit!

 Written by Limor Fried/Ladyada for Adafruit Industries.  
 BSD license, all text above must be included in any redistribution
****************************************************/

// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here

Adafruit_BMP085 bmp;
 
void setup() {
 Serial.begin(9600);
 if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
 }
}
 
void loop() {
   Serial.print("Temperature = ");
   Serial.print(bmp.readTemperature());
   Serial.println(" *C");
   
   Serial.print("Pressure = ");
   Serial.print(bmp.readPressure());
   Serial.println(" Pa");
   
   // Calculate altitude assuming 'standard' barometric
   // pressure of 1013.25 millibar = 101325 Pascal
   Serial.print("Altitude = ");
   Serial.print(bmp.readAltitude());
   Serial.println(" meters");

 // you can get a more precise measurement of altitude
 // if you know the current sea level pressure which will
 // vary with weather and such. If it is 1015 millibars
 // that is equal to 101500 Pascals.
   Serial.print("Real altitude = ");
   Serial.print(bmp.readAltitude(101500));
   Serial.println(" meters");
   Serial.println();
   delay(500);
}

ottengo il risultato in figura 1.
con questo invece :
Code: [Select]
#include <Wire.h>
#include <Adafruit_BMP085.h>

/***************************************************
 This is an example for the BMP085 Barometric Pressure & Temp Sensor

 Designed specifically to work with the Adafruit BMP085 Breakout
 ----> https://www.adafruit.com/products/391

 These displays use I2C to communicate, 2 pins are required to  
 interface
 Adafruit invests time and resources providing this open source code,
 please support Adafruit and open-source hardware by purchasing
 products from Adafruit!

 Written by Limor Fried/Ladyada for Adafruit Industries.  
 BSD license, all text above must be included in any redistribution
****************************************************/

// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here

Adafruit_BMP085 bmp;
 
void setup() {
 Serial.begin(57600);
 if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
 }
}
 
void loop() {
   Serial.print("Temperature = ");
   Serial.print(bmp.readTemperature());
   Serial.println(" *C");
   
   Serial.print("Pressure = ");
   Serial.print(bmp.readPressure());
   Serial.println(" Pa");
   
   // Calculate altitude assuming 'standard' barometric
   // pressure of 1013.25 millibar = 101325 Pascal
   Serial.print("Altitude = ");
   Serial.print(bmp.readAltitude());
   Serial.println(" meters");

 // you can get a more precise measurement of altitude
 // if you know the current sea level pressure which will
 // vary with weather and such. If it is 1015 millibars
 // that is equal to 101500 Pascals.
   Serial.print("Real altitude = ");
   Serial.print(bmp.readAltitude(102024));
   Serial.println(" meters");
   Serial.println();
   Serial.println(500);

}

ottengo il risultato in figura 2.
Da notare che la diversità nei due programmi sta solo nella velocità della seriale 57000 contro 9600 e nella pressione bmp.readAltitude(x)
Anche la dimensione dell'eseguibile cambia enormemente come descitto in figura 3, come mai ? sto sbagliando io oppure ho trovato un bug?

p.s. Il micro lavora ad 8Mhz con il bootloader della 2009 anche se è montato su una luigino 328 con il quarzo a bordo, anche se non dovrebbe essere influente la cosa meglio specificarlo xD
grazie a tutti.
Se corri veloce come un fulmine, ti schianterai come un tuono.

leo72

Sulla dimensione non ti basare per valutare la cosa, dato che dall'IDE 002x a quella 1.x cambia un sacco di roba nel core, e la dimensione dei firmeware è cresciuta (confronta anche lo sketch Blink compilato con la vecchia e la nuova versione dell'IDE).
Sull'altro problema non so dirti. Hai verificato che la lib sia compatibile con l'1.5?

ratto93


Sulla dimensione non ti basare per valutare la cosa, dato che dall'IDE 002x a quella 1.x cambia un sacco di roba nel core, e la dimensione dei firmeware è cresciuta (confronta anche lo sketch Blink compilato con la vecchia e la nuova versione dell'IDE).
Sull'altro problema non so dirti. Hai verificato che la lib sia compatibile con l'1.5?

Grazie della rapida risposta, il problema si ripropone con entrambi i compilatori ed anche la differenza di compilazione solo che, ad esempio come nell'ultima foto vi è sulla sinistra il programma che non va e compilato è 7842 bytes sulla sinistra cè il programma funzionante e pesa 7964 bytes compilati in entrambi i casi con IDE 0023
Se corri veloce come un fulmine, ti schianterai come un tuono.

leo72

Rileggo ora che stai lavorando ad 8 MHz.
Hai guardato se lo sketh compilato ed eseguito su un micro a 16 MHz funziona correttamente?

PS:
non ho capito molto... qual'è la combinazione di velocità seriale/IDE che funziona e quale che non funziona? :smiley-sweat:

ratto93

Perdonami :)
IDE 0023/1.5 -> 9600baud  OK
IDE 0023/1.5 -> 57300 baud NO

Non ho ancora provato con un 16Mhz perchè li ho finiti tutti  :smiley-sweat: poi provo sulla mega...
Se corri veloce come un fulmine, ti schianterai come un tuono.

PaoloP

Perchè sballati.  :~
Io leggo 101525 Pa che corrispondono a 1015,25 mBar. Pressione leggermente più alta del normale. Forse c'è bel tempo dalla tue parti.
Oppure non ho capito il tuo problema.  :smiley-sweat:

ratto93


Perchè sballati.  :~
Io leggo 101525 Pa che corrispondono a 1015,25 mBar. Pressione leggermente più alta del normale. Forse c'è bel tempo dalla tue parti.
Oppure non ho capito il tuo problema.  :smiley-sweat:

Veramente ha nevicato e piovuto poi per tutto il giorno -_-"
sono sballati perchè scrive quel 500 senza che nel codice sia previsto in nessun posto..
Se corri veloce come un fulmine, ti schianterai come un tuono.

astrobeed


sono sballati perchè scrive quel 500 senza che nel codice sia previsto in nessun posto..


Sei sicuro di quello che dici ?
E questo come lo spieghi ?  :D

Code: [Select]

Serial.println(" meters");
   Serial.println();
   Serial.println(500);



ratto93

Oddio quanto mi sento idiota  =(

Avevo sotto il naso il problema ed ho smadonnato un sacco per niente -_-
quasi quasi cancello il topic perchè mi sento proprio un pirla  :smiley-red:
Se corri veloce come un fulmine, ti schianterai come un tuono.

leo72


Oddio quanto mi sento idiota  =(

Avevo sotto il naso il problema ed ho smadonnato un sacco per niente -_-
quasi quasi cancello il topic perchè mi sento proprio un pirla  :smiley-red:

Probabilmente volevi scrivere delay(500) come nell'altro sketch ma ti è venuto fuori un Serial.println per intreccio mentale  ;)

ratto93



Oddio quanto mi sento idiota  =(

Avevo sotto il naso il problema ed ho smadonnato un sacco per niente -_-
quasi quasi cancello il topic perchè mi sento proprio un pirla  :smiley-red:

Probabilmente volevi scrivere delay(500) come nell'altro sketch ma ti è venuto fuori un Serial.println per intreccio mentale  ;)

Forse :)
Se corri veloce come un fulmine, ti schianterai come un tuono.

BaBBuino

Ho problemi anchio con questa libreria, e conl estesse fnzioni.

Se uso un LCD 16x2 funziona tutto bene.

Se uso un GLDC grafico, mi si pianta il programma. La struttura GLCD è uguale a quella con il più semplice LCD.

Si congela alla funzione BMPTemp = (bmp.readTemperature() ); o alla stessa funzione per la pressione.

Remmando la riga il programma funziona, quindi è proprio un blocco dovuta a quella chiamata di funzione ed in co-presenza con la libreria GLCD.

leo72


Go Up