Homepage

  • Projekte
  • Shop
  • Forum
Erweiterte Suche
  • Schnellzugriff
    • Unbeantwortete Themen
    • Aktive Themen
    • Suche
  • FAQ
  • Anmelden
  • Registrieren
  • Foren-Übersicht
  • Suche

Ausfall eines 1-Wire DS18B20-Sensors kann Bus lahmlegen

Ihr habe noch Fragen zum AVR Webmodule? Dann seit Ihr hier genau richtig!
Antworten
  • Druckansicht
Erweiterte Suche
1 Beitrag • Seite 1 von 1
barneyz
Beiträge: 37
Registriert: 02.05.2009, 13:30:40

Ausfall eines 1-Wire DS18B20-Sensors kann Bus lahmlegen

  • Zitieren

Beitrag von barneyz » 03.01.2013, 17:46:58

Ich hatte nach ca. 2 Jahren einen Ausfall eines normalen DS18B20-(T0-92)Sensors(gekauft bei Reichelt). Der Sensor war an einem Kabel angelötet und vorsichtig wasserdicht eingeschrumpft wettergeschützt unter einer niedrigen Gesimsverkleidung befestigt, die Anschlüsse haben keinerlei Wassereinwirkung/Oxidation gezeigt.

Dieser Sensor hat mit seinem Ausfall den kompletten 1-Wire-Bus lahmgelegt, so daß keine neuen Sensorwerte mehr gelesen werden konnten, also die alten Werte fix blieben.

Deshalb: Wenn die Sensoren "produktiv" verwendet wird, sollte die Software das feststellen können und Ersatzwerte bereitstellen sowie ggf. Fehlermeldungsmails o.Ä. verschicken........
Für die Temperaturausgabe auf der Webseite

hier ein Beispielcodeschnipsel aus ds18x20.c

Code: Alles auswählen


	#define OW_ERR_CNT_MAX  3		// nach 3 x 10s = 30sek Mail. Ersatzwertreaktion kommt sofort

int8_t	ow_array_err[MAX_OW_ARRAY];	// Fehler Sensor

#if OW_EXTERN_POWERED

	for (i=0; i<MAXSENSORS; i++)
	{
		memcpy_P(tempID,DS18B20IDs[i],OW_ROMCODE_SIZE);	// erste ID ins RAM holen

		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;
			ow_array_err[i] = 0;      // Fehlerzähler löschen
   		}
		else                          // kein Wert vom Sensor
		{
//			if (log_log.logfile) f16_printf_P(log_log.logfile,PSTR("\r\n-> DS1820 CRC Error (lost connection?) \n\r"));
//			DS18X20_show_id_uart( tempID, OW_ROMCODE_SIZE );
			if (ow_array_err[i]<OW_ERR_CNT_MAX)
			{
				ow_array_err[i]++;
			}
			else        // Fehlergrenze überschritten
			{
				testsendmail (MAIL_ONEWIRESENSORFEHLER); // Mail Sensorfehler verschicken
			}

		}
	}
#else
......
und translate.c

if (ow_array_err) // Fehlerzähler > 0
{
*dest = 'F'; // Fnn.n ausgeben (Fehler))
dtostrf(ow_array / 10.0,3,1,(char*)(dest+1)); // °C-Wert als Dezimalzahl ausgeben, eine Nachkommastelle
}
else
{
dtostrf(ow_array / 10.0,3,1,(char*)dest); // °C-Wert als Dezimalzahl ausgeben, eine Nachkommastelle
}


Anmerkung: die Funktions "testsendmail" sorgt dafür, daß der gleiche Mailtyp nur einmal am Tag versendet wird.
Nach oben

Antworten
  • Druckansicht
1 Beitrag • Seite 1 von 1

Zurück zu „AVR-Webmodule“



  • Foren-Übersicht
  • Alle Zeiten sind UTC+02:00
  • Alle Cookies löschen

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |    |  datenschutz   |  impressum