Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: SHT75 schweigt Kategorie: Verschiedenes (von Stefan - 21.11.2008 8:54)
 Als Antwort auf Re: SHT75 schweigt von joergm6 - 20.11.2008 20:23
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

Bisherige Antworten:

Re: SHT75 schweigt (von joergm6 - 21.11.2008 10:48)
    Re: SHT75 schweigt (von Stefan - 21.11.2008 16:32)
        Re: SHT75 schweigt (von joergm6 - 21.11.2008 17:54)