Das messen der Temperatur mit einem DS18S20 ist sehr einfach da er die Temperatur digital per 1-Wire sendet.
Hier ein Schaltplan der einen DS18(S)20 ansteuert bzw. ausliest und seine Daten per RS232 und am LC-Display ausgibt.
Im moment nur als PDF – ein Bild folgt.
Atmega328-DS18S20-MAX232
Da ich es mit dem Arduino-Framework gemacht habe hier der Code aka Sketch:
#include <LiquidCrystal.h> #include <OneWire.h> LiquidCrystal lcd(2, 3, 4, 5, 6, 7); OneWire ds(9); void setup(void) { Serial.begin(19200); lcd.begin(16, 2); lcd.print("Temperatur"); delay(1000); } void loop(void) { byte i=0,t=0; byte present = 0; byte type_s=1; byte data[12]; byte addr[8]; float celsius; float grad[16]; int z=0; int tr; while ( ds.search(addr)) { ds.reset(); ds.select(addr); ds.write(0x44); delay(100); present = ds.reset(); ds.select(addr); ds.write(0xBE); for ( i = 0; i < 9; i++) { data[i] = ds.read(); } tr = data[0]; if (data[1] > 0x80) { tr = !tr + 1; tr = tr * -1; } int cpc = data[7]; int cr = data[6]; tr = tr >> 1; celsius=tr - (float)0.25 + (cpc - cr)/(float)cpc; grad[t]=celsius; z=0; while(z < sizeof(addr)) { Serial.print(addr[z],HEX); z++; } Serial.print(";"); Serial.print(celsius); Serial.println(); t++; } unsigned int tmp=0; for(i=0;i<t;i++) { if(i==0) { tmp=1; lcd.clear(); lcd.setCursor(0, 0); } if(i==1) { lcd.setCursor(0,1); } lcd.print("Sensor: "); lcd.print(tmp); lcd.print(" "); lcd.print(grad[i]); lcd.print(" C"); tmp++; } ds.reset_search(); delay(800); }
Die Ausgabe auf der RS232 ist im Format „<SensorID>;<Temperatur><\nl>“