Pages: [1]   Go Down
Author Topic: [Risolto]Possibile bug con sensore di pressione BMP085 e libreria Adafruit ???  (Read 851 times)
0 Members and 1 Guest are viewing this topic.
Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
#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.


* fig.1.JPG (36.64 KB, 581x466 - viewed 23 times.)

* fig.2.JPG (33.85 KB, 579x463 - viewed 18 times.)

* fig.3.JPG (102.1 KB, 1007x597 - viewed 21 times.)
« Last Edit: January 29, 2013, 07:52:06 am by ratto93 » Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged


Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perdonami smiley
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...
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 104
Posts: 6626
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perchè sballati.  smiley-confuse
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
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perchè sballati.  smiley-confuse
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..
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?  smiley-grin

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

Logged

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oddio quanto mi sento idiota  smiley-cry

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
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oddio quanto mi sento idiota  smiley-cry

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  smiley-wink
Logged


Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oddio quanto mi sento idiota  smiley-cry

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  smiley-wink
Forse smiley
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Offline Offline
Edison Member
*
Karma: 38
Posts: 1914
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Che libreria GLCD usi?
Logged


Pages: [1]   Go Up
Jump to: