Franzis Wetterstation mit Arduino: Kalibrierkonstanten von HP03S auslesen

Fragen

  1. Was mache ich beim Auslesen der Kalibrierkonstanten des HP03S falsch? Die Werte, die eigentlich Konstanten sein sollten, sind nicht konstant…

  2. Hat wer weitere Ideen, was ich noch zum Verkleinern des Codes machen könnte? Im Moment bin ich bei 1926 Bytes (was schon mal nicht schlecht ist, aber noch nicht gut genug, weil ich im Moment nur Zahlen am Display darstellen kann und die Funktionen zur Berechnung von Druck und Temperatur sind auch noch nicht eingebunden, der Feuchtigkeitssensor fehlt noch ganz…).

static void getParameters()
{
  DIGITAL_WRITE(XCLR, LOW);
  setMasterClock(true);
  i2c_start((REGS) | I2C_WRITE);
  delay(50);
  i2c_write(0x10); //Start of calibration data at 16 = 0x10
  i2c_stop();
  delay(50);
  i2c_start((REGS) | I2C_READ); //i2c_rep_start
  for (uint8_t i = 0; i < 18; i++) // read 18 bytes
  {
    parameterBuffer[i] = i2c_read((i==17)); //(i==17) true für's letzte Byte
  }
  i2c_stop();
  setMasterClock(false);
//  DIGITAL_WRITE(XCLR, HIGH);
}

Den gesamten Code gibt’s weiter unten zum ansehen.

Hintergrund:

Die Franzis Wetterstation basiert auf einem ATtiny 2313 mit 2kB Flash und kommt eigentlich mit einem USBasp zur Programmierung mit BASCOM AVR und einer in Assembler programmierten Firmware.

Meine Basis bildet ATtiny-Core mit einem speziell adaptierten Lite.h, das ich aus Arduino-Lite adaptiert habe, um mit der aktuellen IDE zu arbeiten und um den Speicherbedarf signifikant zu senken. Ein paar Pin Belegungen darin musste ich noch adaptieren, damit das auch mit einem 2313 funktioniert.

Damit ich den HP03S auslesen kann und um Platz im Vergleich zur Wire.h zu sparen, verwende ich die SoftwareI2CLibrary. Leider liefert mir das Auslesen der Konstanten ständig andere Werte und irgendwie sind mir jetzt die Ideen und der Speicher ausgegangen (deswegen sind von den Zeichen für’s Grafikdisplay auch nur noch die Zahlen enthalten).

Beim Auslesen der Werte bin ich ähnlich zu GitHub - philippG777/HP03S: An Arduino-library for the HP03S sensor. vorgegangen, nur habe ich die entsprechenden Funktionen direkt eingearbeitet, die Adresse zum Auslesen der Konstante gemäß Datenblatt angepaßt (0xA1) und schließlich auf SoftwareI2C umgeschrieben.

Lite.h (20.2 KB)

Wetterstation_Display_06.ino (13.9 KB)

Erledigt. Das Auslesen der Konstanten muss an der Adresse 0xA0 erfolgen (wie es in einigen Datenblättern am Beispiel zu sehen ist). Die Adresse 0xA1, die im Datenblatt genannt wird, ist die Schreibadresse, die nicht verwendet werden kann. Wenn man Wire.h verwenden kann, tritt das Problem nicht auf, da hier sowieso der letzte Bit über read() bzw. write() gesetzt wird.

Hi

Dann ist die zu benutzende Adresse aber 0x50, da dann nur als 7-bit angegeben. Die Lib sendet diese 7 bit und senden daran das Read/write-Bit, also das 8.te Bit.

MfG