www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Temperatur Feuchtigkeitssensor SHT7x Software/ hardware Problem


Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Liebe Leute,
Ich bin gerade dabei Temperatur und Feuchtigkeit mittels SHT7x zu 
bestimmen und will diese anschließend mittels der seriellen 
Schnittstelle ausgeben.

MCU: Atmega32
Quarz: 16Mhz
AVRStudio
Compiler: GCC

Problem:
Ich bekomme keinen Wert von Temperatur und Feuchtigkeit. Ich weiß nicht 
mal, ob mein Sensor noch am Leben ist. Ich habe schon alle Beiträge 
durchgelesen. Die Routine/ Library habe ich von Timo Ditter( 
Beitrag "Lib für Sensirion SHT1x Sensor an AVR" ) genommen.

Library:
libsht_0v2.zip

Die Verbesserungen von Rockclimber habe ich auch angepasst.
Also folgende Zeile in libsht.h ergänzt:
#define MAKE_SHT_SCK_PIN_OUTPUT SHT_SCK_DDR |= ( 1 << SHT_SCK_PIN)

/*und in libsht.c in der Funktion sht_softreset(void) folgende Zeile vorn angefügt:*/
MAKE_SHT_SCK_PIN_OUTPUT;

Software: (Versuch 1)
Ansatz von:
Mikrocontroller Forum
Beitrag: Lib für Sensirion SHT1x Sensor an AVR
Link: Beitrag "Lib für Sensirion SHT1x Sensor an AVR"
Versuch von TurboCity (Autor) übernommen.

Leider bekomme ich keinen Temperatur- und Feuchtigkeitswert.
Kontroller:
Spannung zwischen VDD und GND : 5,03 V
Spannung am Pullup Widerstand von SCL liegt um 5,03V
Spannung am Pullup Widerstand von DATA liegt um 0,01V

Auch wenn ich Versorgung und GND Kabel von SHT7x entferne, bekommen ich 
mit Hyperterminal immer des selbe Ergebniss.


PLEASE HELP ME

Beilage:
Software (AVRStudio Projekt datei)
-Ausführliche Protokoll (DOC) mit Pinbelegung, Schaltung und Screenshot 
von Hyperterminal

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier habe ich nur Main.c datei beigefügt.
Ich warte auf eure Antworte :-)
Danke im Vorraus

mfg buddy

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst einmal solltest du die ganze Horde an Compilerwarnungen 
verscheuchen. Beispielsweise indem du die nötigen #include Statements an 
die richtige Stelle setzt, dem printf die richtige Art 
Parameter/Formatierungangabe gönnst und dafür sorgst, dass die 
Delay-Routinen auch wirklich arbeiten können.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meist pflege ich RAR Files des Aufwands wegen einfach zu ignorieren. ZIP 
geht hingegen immer. Und DOC Files kann auch nicht jeder verarbeiten 
(und mancher will es auch nicht).

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke Andreas Kaiser für deine nette Tip.
Hier hänge ich wieder selbe Datei in ZIp format und die Bilder (in Zip).

mfg Buddy

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Netter Versuch.

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,
Mein Erster Erfolg: Aber immer noch nicht ganz.

Änderung:
#include <stdio.h>

Funktion Long_delay geschrieben.
void long_delay(uint16_t ms) 
{
    for(; ms>0; ms--) _delay_ms(1);
}

//Statt float habe ich integer verwendet damit der warnung nicht kommt
sprintf(buffer, "Temp=%.2f Humi=%.1f\n",temperature.i, humidity.i);
//zu
sprintf(buffer, "Temp=%.2i Humi=%.1i\n",temperature.i, humidity.i); ///umgeschrieben

Alle Warnings sind beseitigt.

Ergebniss im Hyperterminal :

Temp= 2621
Humi =-13107

also.. nur blödsinn.
bin verzweifelt

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind die Warnungen jetzt wirklich alle weg? Die schreibt der Compiler 
ja nicht nur raus, um dich zu ärgern.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie jetzt bist du zwar die Warnungen los, aber dafür ist das Ergebnis 
Schrott, denn das steht nach der Konvertierung in xxx.f, nicht in xxx.i. 
Das Format war also richtig, die Parameter falsch.

Timos Methode der Parameterübergabe ist etwas eigenwillig und eigentlich 
nicht zu empfehlen, weil es zu genau solchen Fehler verleitet.

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja..Warnungen sind alle Weg.

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mei, ich bekomme diese Fehler einfach nicht weg.
sprintf(buffer, "Temp=%.2f Humi=%.1f\n",temperature.i, humidity.i);

//Fehler-->
../main.c:62: warning: format '%.2f' expects type 'double', but argument 3 has type 'unsigned int'

wusstest was ich da ändern sollte ? wie der richtige Format asschaun 
soll?
Ich bin immer noch Anfänger in C. hab nur basis kenntniss.

Es war schon sehr hilfsreich von dir. Vieleicht kriegst du es hin, was 
ich zum ändern muss.
Danke

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier's mal mit
sprintf(buffer, "Temp=%.2f Humi=%.1f\n",temperature.f, humidity.f);

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich auch probiert.
Warnung:
../main.c:63: warning: format '%.2f' expects type 'double', but argument 3 has type 'float'

Im Hyperterminal bekomme ich:
Temp= ? Humi=?
Hast du mein DOC mal angeschaut ?

Passen meine Pinbelegung ? meinst du dass mein Hardware richtig ist? 
SHT7x ist nicht tot? liegt es wirklich nur in Software ?

zu viele fragen !=)
Aber , du kennst sicher dieses gefühl, wenn was nicht funktiniert....

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HELP!!!!

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte gedacht, dass sowas in ANSI C definiert sei. Also dann halt so:
sprintf(buffer, "Temp=%.2f Humi=%.1f\n",
  (double)temperature.f, (double)humidity.f);
Vielleicht ist das bloss eine Macke im printf verifier. Ist jedenfalls 
nicht das Problem, denn bei AVRs sind float und double ohnehin 
identisch.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und versuch mal, ein bischen C zu lernen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schon mal
sprintf(buffer, "Temp=%.2f Humi=%.1f\n",(double)temperature.f, 
(double)humidity.f);
versucht?
Keine Ahnung ob der GCC das braucht.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, was die Pinbelegung angeht: Hast du von der Pinbelegung des 
SHT11 auf den SHT71 extrapoliert? Der hat eine andere. Die steht sogar 
im Datasheet drin, mal sollte es kaum glauben.

Mal sehen, ob er den Anschlag überlebt hat.

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
peinlich peinlich !!!!
Ich verwende SHT7x. Hab aber SHT1x pinbelegugen angeschaut.

Pinbelegungen waren falsch. Jetzt hab ichs aber richtig....
Immer noch kein Erfolg. im Hypperterminal steht : Temp =? Humi= ?

Also, ist mein SHT7x kaputt ?:-(

ES WAR 20€ :-(

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung ob er hinüber ist. Möglich wäre das schon. Wobei 20€ für 
den SHT71 recht gut ist - wo gibt's den für diesen Preis?

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok,
wenn i ehrlich bin habe ich  Direkt von Sensirion Firma, Sample 
bekommen.
http://www.sensirion.com/

Autor: badhan Talukder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo an alle,
Kann mir jemand sagen wie ich weiss ob mein Sensor noch lebt oder nicht 
?
ich hab zwischen VCC und GND 5,03 V. Pullup widerstand am SCL liegt auch 
um 5 V. Pullup widerstand am DATA liegt etwa um 0,3 V.

Wie muss ich angehen damit ich feststellen kann ob sie kaputt ist oder 
nicht ?

mfg Buddy

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
please HELP!!!
(sorry wenn ich so lästig bin)

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe ich das richtig: Wenn der Sensor am Strom hängt, frisch 
eingeschaltet nur mit Pullups an SCK und DATA, ohne Controller oder 
sonstwas an den Leitungen, dann liegt DATA auf 0,3V? In diesem Fall 
musst du davon ausgehen, dass der Sensor über'n Jordan ist, denn in 
dieser Situation treibt der SHT die DATA Leitung nicht, sie müsste vom 
Pullup hochgezogen werden.

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also,

Ich habe grad die Leitugen durch gemessen Ohne Controller.
Versornung spannung 5V.
DATA und SCK beide liegen um 5V. (z.B. Spanung zwischen SCK und GND)

Also... Der Sensor scheint am leben zu sein. Oder ?
und Danke für deinen Beitrag.

Autor: Badhan Talukder (Firma: BULME-HTL) (indian_buddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hello an Alle,
Ich habe es noch immer nicht geschafft meine Aufgabe zu lösen.
Hat jemand von euch ein komplet funktionssüchtiges Projekt zum bestimmen 
der Temperatur und Feuchtigkeit, damit ich sicher stellen kann, dass 
mein HArdwareaufbau und der Sensor nicht kaputt ist. ich benutze 
ATmega32,  16Mhz Quarz und SHT7x.

mein Erster Versuch:
Mit dem untenstehende Code bekomme ich nur eine "0" in Hyperterminal.

int main(void)
{
         uart_init();  
         sht_value humi_val,temp_val;

  unsigned char error,checksum;
    float dew_point;
  unsigned int i;
  unsigned char tstr[10];
    unsigned char hstr[10];

  sht_connectionreset();

  while(1) {
    error=0;
    error+=sht_measure((unsigned char*) &humi_val.i,&checksum,HUMI);  //measure humidity
    error+=sht_measure((unsigned char*) &temp_val.i,&checksum,TEMP);  //measure temperature
    if(error!=0) sht_connectionreset();             //in case of an error: connection reset
    else {
    humi_val.f=(float)humi_val.i;                   //converts integer to float
    temp_val.f=(float)temp_val.i;                   //converts integer to float
    sht_raw_to_physical(&humi_val.f,&temp_val.f);   //calculate humidity, temperature
    dew_point=calc_dewpoint(humi_val.f,temp_val.f);
    //float_to_lcd(humi_val.f);
    
  
    uart_puts(itoa(humi_val.i, tstr , 10));
    uart_puts(itoa(temp_val.i, hstr , 10));
    }
  //----------wait approx. 0.8s to avoid heating up SHTxx------------------------------      
  for (i=0;i<400000;i++);     //(be sure that the compiler doesn't eliminate this line!)
  //---

  }
  return 0;

2te Versuch: Ansatz von Dieter Bohlen
 ( Beitrag "Re: Lib für Sensirion SHT1x Sensor an AVR" )

Mit diesem unterstehende Programm bekomme ich einen 5-stelligen(auch 
negetiven) Zahlenwert. Wobei wenn man mit dem Finger den SHT7x berührt, 
ändern sich die Werte im Hyperterminal. Soll es heißen dass mein SHT7x 
doch reagiert?

_delay_ms(100);

 unsigned char error =0;
unsigned char checksum;
  sht_value humidity;
  sht_value temperature;
_delay_ms(100);
_delay_ms(10);
  error=sht_softreset();
  if (error) {
  uart_puts("ERROR Softreset");
  }
  _delay_ms(100);
        error=sht_measure(&humidity, &checksum, HUMI);
  if (error)
  { 
  uart_puts("ERROR Hum");
  }
  _delay_ms(100);
  error=sht_measure(&temperature, &checksum, TEMP);
  if (error)
  {
  uart_puts("ERROR Temp");
  }
  _delay_ms(100);
  sht_raw_to_physical(&humidity, &temperature);

  unsigned char tstr[10];
  unsigned char hstr[10];
  
  uart_puts(itoa(temperature.i, tstr , 10));
  uart_puts(itoa(humidity.i, hstr , 10));
Vielleich kann mir wer sein Programm zur Verfügung stellen. Es ist klar, 
das dass Forum nicht da ist um andere Aufgabe zu lösen sondern nur um 
anderen zu helfen.
Meine Software und Dokumentation habe ich oben angehägt. Vielleicht 
könnt ihr meine Fehler finden.
Danke im Vorraus.
mgf Badhan

Autor: Merkwürden (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
merkwürdiger Beitrag in der Codesammlung...

Autor: Pete (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du auch die Biliotheken für sprintf mit gelinkt ?

Schau mal in das WinAVR Manual unter vprintf oder so nach.

Autor: Hermann Gebhard (df2ds)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe ein ähnliches Problem mit nem SHT71:

Habe erst meine Software "on board" mit 4 kurzen Leitungsstückchen 
getestet, alles ok.
Habe dann die Fassung (!) für den Sensor in ein Röhrchen eingeklebt und 
alles mit Silikon abgedichtet (ohne den Sensor natürlich). Jetzt sind da 
2,5m Kabel zwischen, sonst ist aber alles wie bisher. Leider spricht der 
Sensor nicht mehr mit mir...es kommt kein ACK (Sensor zieht nach 
Schreiben eines Byte die DATA-Leitung nicht auf GND...liegt doch wohl 
nicht am 10K-Pullup, oder??)

Hat jemand einen Tipp???  Danke im Voraus!
 Hermann

Autor: Helmut -dc3yc (dc3yc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hier ist mein Tip: 2.5m Leitung sind für TTL-Signale ohne Treiber 
etwas lang. Probiere es mal mit 2.5cm!

Servus,
Helmut.

Autor: Hermann Gebhard (df2ds)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Netter Tipp..allerdings komme ich mit der Controllerschaltung nicht an 
den Messort heran!

Habe es auch nochmal ausprobiert mit dem Sensor direkt auf der Platine, 
ging auch nicht; vermutlich ist der Sensor kaputt.

Vorgestern habe ich einen neuen Sensor bekommen, mit dem zunächst das 
selbe Problem auftrat. Ich habe aber dann die SCL-Frequenz auf ca. 
200kHz (!) reduziert; seitdem läuft die Schaltung völlig problemlos!

Trotzdem Danke für den Hinweis :-)
  Hermann

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hermann,

ich hatte mich auch mal beim Anschluss-Plan verschaut.....
Sensor = tot
...

Zur Länge des Kabels.....
Bei mir ca 2m in die Sauna rein....  Geht ohne Probleme....

Software  mhhh....  Leider kein C  sondern  bas.....

vy 73 55 Thomas de DG5MPQ

Autor: Hector Henderson (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

könntest du uns deine Programm im Bascom zeigen, da ich schreibe jetzt 
in Bascom ein Prögram für diese gleiche Sensor.

Danke im Voraus,
Hector.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Hab da mal eine frage da der gründer dieses Post die gleiche 
ausgangsstellung wie ich habe. und zwar ist die Sensirion SHTxx Sensor 
Library 0v3 von Timo Dittmar nicht für 16 MHz ausgelegt oder täusch ich 
mich da? und wenn nicht wie bekomme ich es für 16 MHz angepasst.

hoffe dies liest noch jemand und mir kann geholfen werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.