INFO - FAQ - CC2-Forum - CCPro-Forum |
Hallo Joerg Vielen Dank erst einmal für deine schnelle Antwort. Sorry, ich benutze die Station 1 (älteste nehme ich an, mit schwarz-hellblauer Folie) und programmiert ist sie in CCBasic. Unten findest du das von mir verwendete Programm. Deinem Beitrag entnehme ich, dass dieser bei dir schon funktioniert hat. Schade, bei mir eben nicht. Liegt's wohl tatsächlich am Sensor? Grüsse, Stefan define Clock Port[1] 'Serial clock input für SHT75 define Data Port[2] 'Serial data für SHT75 define tempW word[1] 'Überlappung mit Byte 1 & 2 !!!! define temp byte[1] 'temporäres Datenbyte define temp2 byte[2] 'temporäres Datenbyte define i byte[3] define ack byte[4] define dataW word[3] define dataWhi byte[5] define dataWlo byte[6] define Temperatur word[4] define Feuchte word[5] define tempW2 word[6] gosub SHTinit #loop Temperatur = SHTgettemp Feuchte = SHTgethyg print "Temperatur:", print Temperatur/100;",";abs((Temperatur/10))mod 10;abs(Temperatur mod 10);"°C" print "Feuchte: ", if Feuchte>=0 then print Feuchte/10;",";Feuchte mod 10;"%rH" else print "Fehler" pause 50 goto loop #SHTinit deact Data Clock = 0 for i=0 to 10 pulse Clock return #SHTstart Clock =-1 Data = 0 Clock = 0 Clock =-1 deact Data Clock = 0 return #SHTwrite for i=0 to 7 if (temp shl i) and &h80 then deact Data else Data = 0 pulse Clock next i deact Data Clock = -1 temp=(Data=0) Clock =0 return temp #SHTread temp=0 for i=0 to 7 Clock =-1 temp=(temp shl 1) or (Data and 1) Clock = 0 next i if ack then Data = 0 else deact Data pulse Clock deact Data return temp #SHTreadint tempW = timer #SHTwloop if timer-tempW>=50 then return &hF000 if Data then goto SHTwloop ack = 1 dataWhi=SHTread 'High-Byte ack = 0 dataWlo=SHTread 'Low-Byte return dataW #SHTgettemp gosub SHTstart temp = &b00011 : gosub SHTwrite dataW = SHTreadint-4000 return dataW #SHTgethyg gosub SHTstart temp = &b00101 : gosub SHTwrite Feuchte=SHTreadint if Feuchte and &h8000 then return -1 tempW = Feuchte shr 4 i = Feuchte mod 16 looktab shtab,tempW,tempW2 tempW = tempW - 1 looktab shtab,tempW,tempW tempW2 = ((tempW2 - tempW) * i) shr 4 Feuchte = tempW + tempW2 return Feuchte table shtab "sht.tab" > Hallo Stefan, > > schön wäre ja gewesen wenn du geschrieben hättest, welche Programmiersprache und welche Station du hast. > Ich weis aus eigener Erfahrung, das der Beispielcode nicht funktioniert, jedenfalls bei mir (auch) nicht. Es funktionierte nur das alte CCBasic-Beispiel. Ich gehe mal davon aus, du hast Basic++ und die SHT.tab. Hatte damals dieses einzeln auseinandergenommen und in Basic++ nachempfunden. > Probiere mal diese als STH.bibl oder natürlich auch als eigenständiges Programm. Die benutzten Ports sind 7 und 8, die kannst du anpassen. Ich hoffe habe keine Variablendeklaration vergessen, da ich den Code für mein Programm optimiert habe (Variablenplatz sparen :-) ) > > Was soll der 10k von Masse nach Vdd, das bringt NIX? Wenn überhaubt dann je 10k von Clock und Data nach Vdd. > > > ' ---------- Benutzung ------- > ' SHTgetT() > ' lcd.print tword/100 & "," & abs((tword/10))mod 10 & abs(tword mod 10) &"°C " > ' SHTgetH() > ' lcd.print tword/10 & "," & tword mod 10 & "%rH" > > > DEFINE SHTclock PORT[7] > DEFINE SHTdata PORT[8] > > ' Variablen > define Tword as word > define TFword as word > define TFbyteLO ref TFword at Byte[1] > define TFbyteHI ref TFword at Byte[2] > define TByte as byte > define TFword2 as word > define i as Byte > > '-------------------------------------------------------------------------------- > Sub SHTgetT() 'Temperatur-Wert des Sensors abfragen. > SHTstart() > SHTwrite(00011b) > SHTreadInt() > TWord=TFword-4000 > end sub > > '-------------------------------------------------------------------------------- > sub SHTgetH() 'Feuchtigkeits-Wert des Sensors abfragen. > SHTstart() > SHTwrite(00101b) > SHTreadInt() > TWord=TFword > IF (Tword AND 8000h) <> 0 THEN return -1 > TFWord = Tword SHR 4 > Tbyte = Tword MOD 16 > LOOKTAB SHTAB, TFWord, TFword2 > dec TFWord > LOOKTAB SHTAB, TFWord, TFWord > TFword2 = ((TFWord2 - TFWord) * Tbyte) SHR 4 > TWord = TFWord + TFWord2 > end Sub > > '-------------------------------------------------------------------------------- > sub SHTinit() 'Initialisiere > DEACT SHTdata > SHTclock = 0 > FOR i = 0 TO 10 > PULSE SHTclock > NEXT i > end sub > > '-------------------------------------------------------------------------------- > sub SHTstart() 'Start-Sequenz > SHTclock = -1 > SHTdata = 0 > SHTclock = 0 > SHTclock = -1 > DEACT SHTdata > SHTclock = 0 > end sub > > '-------------------------------------------------------------------------------- > sub SHTwrite(TH as byte) 'Sende Daten an Sensor > FOR i = 0 TO 7 > IF ((TH SHL i) AND 80h)<>0 THEN > DEACT SHTdata > ELSE > SHTdata = 0 > END IF > PULSE SHTclock > NEXT i > DEACT SHTdata > SHTclock = -1 > TByte = (SHTdata = 0) > SHTclock = 0 > RETURN TByte > end sub > > '-------------------------------------------------------------------------------- > sub SHTreadInt() > TWord = TIMER > TFWord=F000h > #SHTloop > IF (TIMER - TWord) >= 50 THEN goto SHTloopEnde > IF SHTdata<>0 THEN GOTO SHTloop > TFbyteLo=SHTread(1) > TFbyteHi=SHTread(0) > #SHTloopEnde > end sub > > '-------------------------------------------------------------------------------- > Sub SHTread(ACK as byte) > Tbyte = 0 > FOR i = 0 TO 7 > SHTclock = -1 > Tbyte = ((Tbyte SHL 1) OR (SHTdata AND 1)) > SHTclock = 0 > NEXT i > IF ACK<>0 THEN > SHTdata = 0 > ELSE > DEACT SHTdata > END iF > PULSE SHTclock > DEACT SHTdata > RETURN Tbyte > end sub > > TABLE SHTAB > ' hier die SHT.tab Werte oder per Import einbinden > end table > > > > Hallo > > > > Ich hoffe, mir kann jemand helfen. > > > > Für eine neues Projekt habe ich meine alte C-Control-Station mit I/O Terminal ausgegraben. > > > > Ich habe mir dazu einen SHT75 gekauft und diesen an Port 1 (Clock) und Port 2 (Data) gehängt. Für die Versorgung habe ich Pin 6 der DCF angezapft. Zwischen Vdd und Gnd habe ich einen 10KOhm Pullup gelötet. Alle Leitungen sind getestet, die Spannung auf der Versorgung ist 5V. So weit so gut. > > > > Leider gibt der SHT75 keinen Mucks von sich. Zum Testen verwende ich den Beispiel-Programmcode von cctools. Die Rückgabewerte sind immer -80,96 und Fehler für die Feuchte. Das gleiche Resultat erziele ich auch, wenn kein Sensor dranhängt ;-) > > > > Wo könnte noch ein Fehler übersehen haben? > > > > Ich hoffe, ich den SHT beim Löten nicht verbrutzelt! Eigentlich bin ich aber der Meinung alles richtig gemacht zu haben. Nur kurze Lötkontakte usw. > > > > Weiss jemand Rat? > > > > Grüsse, Stefan |
Antwort schreiben |