www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SHT* Daten auslesen?


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,
ich hab einige Beiträge zum Sensor SHT* von Sensirion gefunden doch
leider nichts was mich weiter brachte.

Folgendes:
Ich sende Transmission Start danach den Opcode zum auslesen der
Feuchte/Temp. Beim letzten toggeln der SCK Leitung sollte der Sensor
die Datenleitung auf Low ziehen (ACK). Das macht er aber nicht. Der
Portpin des MSP430 für Data ist zu diesem Moment als Ausgang
initialisiert, kann der Sensor dann überhaupt die Leitung runterziehen?
Einen 10k Pulldown Widerstand wie im Datenblatt hab ich an Vdd gelegt.
Im Beispiel von Sensirion wird der Port eines 8051 nicht umgeschalten,
da hab ich mich schon umgesehen.

Danke, Paul

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich musst du den Pin als Eingang schalten.
Der SHT meldet sich erst, wenn er mit der Messung fertig ist (Zeiten
stehen im Datenblatt (in irgendnem Timing-Diagramm).
In dieser Zeit muß der Pin dann zum Eingang umgeschaltet werden.
Ein externer Pull-up-Widerstand ist laut Datenblatt ja auch notwendig.

>Im Beispiel von Sensirion wird der Port eines 8051 nicht
>umgeschalten, da hab ich mich schon umgesehen.

Das bezweifle ich. Portpins der 8051er schaltet man dadurch als
Eingang, indem man eine 1 in das Portregister schreibt (die haben kein
Port-Direction-Register). Durch den internen Aufbau des Portpin
(Openkollektor-Endstufe mit zuschaltbarem Pull-Up) ist es einfacher
zwischen Ein- und Ausgang umzuschalten.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Rahul, leider wurde meine Hoffnung das es danach funktioniert
entäuscht. Vielleicht hab ich nur einen kleinen Fehler drin den ich
nicht sehe?

char write_byte(unsigned char opcode)
{
    unsigned char i,error=0;
    for (i=0x80;i>0;i/=2) //shift bit for masking
    {
        if (i & opcode) DATA=1; // masking opcode with i
        else DATA=0;
        SCK=1;
        wait(3);
        SCK=0;
    }
    DATA=1;             // release DATA-line
    P3DIR &= ~BIT4;     // Data auf Eingang schalten
    SCK=1;              // clk #9 for ack
    wait(3);
    //SCK=0;
    while((P3IN & BIT4)!=0)  // warten auf Pulldown
    {wait(1);}
    error=DATA;       //check ack (DATA will be pulled down by SHT11)
    SCK=0;
    return error;       //error=1 in case of no acknowledge
}

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal:
To avoid signal contention the microcontroller should only drive DATA
low. An external pull-up resistor (e.g. 10 kΩ ) is required to
pull the signal high.

Was bedeutet das für mich "should only drive DATA low"? Ich bin doch
mit meinem Port direkt am Data-Pin des Sensors. Daran hängt der
Widerstand gegen 3,3 Volt. Wiso ist das dann ein
"Pull-up"-Widerstand.
Sorry, ist mein erstes Elektronik-Bastel-Projekt. Bedeutet es das ich
mit dem uP die Leitung runterziehe, und wenn ich den Port auf Eingang
schalte springt die Leitung auf High und der Sensor sollte sie dann
wieder "kurzschließen" um mir sein ACK mit zu teilen?
?:-|...

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im FAQ von Sensirion steht das sich Data nur bei einer fallenden Flanke
von SCK ändern darf? Im oberen Code hab ich vom Aufbau her nichts
geändert aber Data änderert sich bei steigender Flanke?
Stimmt das Beispiel nicht oder schreiben die auf der Homepage
falsches?
Wie ändere ich das ab? Ist mir ein Rätsel

Autor: AndreasB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Drive Data low bedeutet, wenn du den Bus treibst (etwas draufschreibst)
darfst du nur ne 0 rausschreiben. Wenn du ne 1 aufm Bus brauchst,
schaltest du deinen Port weg vom Bus. Der externe Pullup "zieht" dann
die Leitung auf High, verbindet sie quasi mit Vcc (er sorgt für dich für
die 1)

Pullup/pulldown Widerstände sorgen am Bus für einen definierten pegel,
ein Pullup "zieht" die Spannung gegen Vcc und ein Pulldown "zieht"
sie auf Gnd.

Autor: AndreasB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Data sollte sich nur NACH einer fallenden Flanke von SCK ändern (also
wenn SCK low ist), nicht währenddessen. und Data muss bei einer
steigenden Flanke stabil sein (da wird dann der Wert von Data
eingelesen). Während SCK high ist, darf sich Data nicht ändern.
(Ausnahme: "Transmission Start" Sequenz)

In der FAQ bei Sensirion hab ich dazu nix gefunden, schau mal im
Datenblatt Abschnitt 2.2.2

Gruß Andreas

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.