als Vorschlag folgender Code:
Code: Alles auswählen
volatile int16_t ow_min[MAXSENSORS]; //!< Speicherplatz für Minimalwerte
volatile int16_t ow_max[MAXSENSORS]; //!< Speicherplatz für Maximalwerte
volatile unsigned long time_min[MAXSENSORS]; //!< Zeit des Min-Werts
volatile unsigned long time_max[MAXSENSORS]; //!< Zeit des Max-Werts
void lese_Temperatur(void)
{
#if USE_OW
uint8_t i = 0;
register int16_t TWert;
uint8_t subzero, cel, cel_frac_bits;
uint8_t tempID[OW_ROMCODE_SIZE];
memcpy_P(tempID,DS18B20IDs[0],OW_ROMCODE_SIZE); // erste ID ins RAM holen
#if OW_EXTERN_POWERED
// T messen: alle gleichzeitig starten
if ( DS18X20_start_meas( DS18X20_POWER_EXTERN, 0 ) == DS18X20_OK ) {
// warten bis Messung fertig ist.
// DS18S20 braucht die vollen 750ms
// - daher vorsichtshalber volle 750ms warten, falls unterschiedlich bestückt
_delay_ms(DS18B20_12_BIT);
while (tempID[0] != 0) {
if ( DS18X20_read_meas( tempID, &subzero,&cel, &cel_frac_bits) == DS18X20_OK ) {
TWert = DS18X20_temp_to_decicel(subzero, cel, cel_frac_bits);
if (subzero)
TWert *= (-1);
ow_array[i] = TWert;
// Min/Max Werte setzen und Uhrzeit festhalten
if (TWert< ow_min[i] {
ow_min[i] = TWert;
time_min[i] = time;
}
else if (TWert > ow_max[i]) {
ow_max[i] = TWert;
time_max[i] = time;
}
/...
Wie du daran siehst, wird das Ganze recht speicherintensiv.
Die Min/Max-Zeit kannst du ja weglassen, nur musst du irgendwann mal die Min/Max-Werte wieder zurücksetzen. Sonst kannst du im Juli eventuell auch die minimale Aussentemperatur vom Januar noch nachsehen
Optimal wäre eventuell den Min/Max-Wert der letzen 24 Stunden mitzuschleppen. ... nur musst du für sowas komplett
alle Werte der letzen 24 Stunden aufzeichnen. (Welches ist der nächste Max-Wert, wenn dein aktueller Max-Wert gerade älter als 24 Stunden geworden ist?) Eventuell könnte es reichen die zehn bis zwanzig höchsten (niedrigsten) Werte mit Uhrzeit zu speichern und sobald einer aus dem Zeitraster rausfällt dann den nächsten zu nehmen. Aber ehrlich gesagt ... bei einem Mikrocontroller mit sehr beschränktem Ram-Speicher praktisch nicht machbar
Am sinnvollsten sehe ich noch die Möglichkeit, die relevanten Daten auf der SD-Karte mitzuloggen und wenn es denn sein muss den Min/Max-Wert der letzten 24 Stunden von der Karte wieder einzulesen.
Gruß
wil