Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > Servus Jungs und Mädls. > Kenn mich bei der C Programmierung nicht besonders aus. Für die Abfrage des > Temperatur-Feuchte Bausteins habe ich schon ein Beispiel gefunden. Nur leider ist das in C geschrieben. > In Basic würde ich das Programmierte schon verstehen können. Kann mir da wer weiter helfen? > > Anbei die C-Programmierung > > Danke euch für die Hilfe > > Gruß Hans > > > /******************************************************************/ > /* Treiberbibliothek für Sensirion SHT Feuchtesensoren(12/14Bit) */ > /* Autor : André Helbig (www.cc2net.de) */ > /* Vorlage : André Helbig / CC2: sht.c2 */ > /* Version : 1.0 */ > /* Datum : 01. Oktober 2008 */ > /* Benötigt : timer.cc */ > /* Getestet : ja */ > /* Bemerkung : Messung nur im hi-res.Mode(12Bit RH / 14Bit Temp.) */ > /******************************************************************/ > > byte Clock,Data; > > /*************************************/ > /* Schnittstelle initialisieren */ > /*************************************/ > void sht_init(byte clkport, byte dataport) > {byte i; > Clock=clkport; > Data=dataport; > Port_DataDirBit(Clock, 1); > Port_WriteBit(Clock, 0); > Port_DataDirBit(Data, 0); > for(i=0;i<=10;i++) > { > Port_WriteBit(Clock, 1); > Port_WriteBit(Clock, 0); > // AbsDelay(1); > } > } > > /*************************************/ > /* Datenport festlegen */ > /*************************************/ > void sht_setDataPort(byte dataport) > {byte i; > Port_DataDirBit(Data, 0); > Data=dataport; > } > > /*************************************/ > /* Startbedingung senden */ > /*************************************/ > void sht_start(void) > { > Port_WriteBit(Clock, 1); > // AbsDelay(1); > Port_DataDirBit(Data, 1); > Port_WriteBit(Data, 0); > // AbsDelay(1); > Port_WriteBit(Clock, 0); > // AbsDelay(1); > Port_WriteBit(Clock, 1); > // AbsDelay(1); > Port_DataDirBit(Data, 0); > Port_WriteBit(Clock, 0); > } > > /*************************************/ > /* Byte senden */ > /*************************************/ > int sht_Write(byte databyte) > {int i; > for(i=0;i<=8;i++) > { > if((databyte << i) & 0x80) > { > Port_DataDirBit(Data, 0); > } > else > { > Port_DataDirBit(Data, 1); > Port_WriteBit(Data, 0); > } > AbsDelay(1); > Port_WriteBit(Clock, 1); > AbsDelay(1); > Port_WriteBit(Clock, 0); > } > Port_DataDirBit(Data, 0); > AbsDelay(1); > Port_WriteBit(Clock, 1); > Port_WriteBit(Clock, 1);//dummy > AbsDelay(1); > i=(Port_ReadBit(Data)==0); > Port_WriteBit(Clock, 0); > AbsDelay(1); > return i; > } > > /*************************************/ > /* Byte empfangen */ > /*************************************/ > byte sht_Readbyte(int ack) > {byte data,i; > data=0; > for(i=0;i<=7;i++) > { > Port_WriteBit(Clock, 1); > Port_WriteBit(Clock, 1);//dummy > AbsDelay(1); > data=(data << 1) | (Port_ReadBit(Data) & 1); > Port_WriteBit(Clock, 0); > AbsDelay(1); > } > if(ack) > { > Port_DataDirBit(Data, 1); > Port_WriteBit(Data, 0); > } > else > { > Port_DataDirBit(Data, 1); > } > AbsDelay(1); > Port_WriteBit(Clock, 1); > AbsDelay(1); > Port_WriteBit(Clock, 0); > AbsDelay(1); > Port_DataDirBit(Data, 0); > return data; > } > > /*************************************/ > /* Integer lesen */ > /* wartet auf Bereitschaft (Data=Low)*/ > /* (timeout 1sek.=Rückgabe 0xF000) */ > /*************************************/ > int sht_Readint(int ack) > {int timer, data; > Port_DataDirBit(Data, 0); > timer=timer10ms; > while(Port_ReadBit(Data)) > { > if((timer10ms-timer)>30) return 0xF000;//300ms Timeout > } > data=sht_Readbyte(1); //High-Byte > data=(data << 8) | sht_Readbyte(ack);//Low-Byte > return data; > } > > /*************************************/ > /* Statusregister schreiben */ > /*************************************/ > int sht_setRegister(byte reg) > { > sht_start(); > sht_Write(0x6);//0b00110 > return sht_Write(reg); > } > > /*************************************/ > /* Statusregister lesen */ > /*************************************/ > byte sht_getRegister(void) > { > sht_start(); > sht_Write(0x7);//0b00111 > return sht_Readbyte(0); > } > > /*************************************/ > /* Software Reset */ > /*************************************/ > int sht_Reset(void) > { > sht_start(); > return sht_Write(0x1e);//0b11110 > } > > /*************************************/ > /* Heizung schalten */ > /*************************************/ > int sht_setHeater(int state) > {byte reg; > reg=sht_getRegister(); > reg=(reg & 0xFB) | (state!=0 & 0x4); > return sht_setRegister(reg); > } > > /*************************************/ > /* Temperatur auslesen */ > /* Format: 0,00 */ > /*************************************/ > int sht_getTemp(void) > {int temp;byte i; > i=0; > do > { > sht_start(); > sht_Write(0x3);//0b00011 > temp= sht_Readint(0); > i++; > }while(temp==0xF000 && i<16); > return temp-4000; > } > > /*************************************/ > /* Feuchtigkeit auslesen */ > /* Format: 0,00 (temp & hyg) */ > /*************************************/ > int sht_getHyg(int temp) > {int hyg;byte i; > float SOrh,RHlin; > i=0; > do > { > sht_start(); > sht_Write(0x5);//0b00101 > hyg=sht_Readint(0); > i++; > }while(hyg==0xF000 && i<16); > if(hyg & 0x8000) return -1; > SOrh=hyg; > RHlin=((405*SOrh - 40000)*250 + ((-7)*SOrh*SOrh))/25; > hyg=(((temp-2500)*(1000+8*SOrh)/100)+RHlin)/1000; > return hyg; > } >