www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit DS18S20


Autor: Paul P. (cesupa)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche schon seit geraumer Zeit einen DS18S20 mit externer 
Stromversorgung ganz einfach auszulesen. Habe mich dazu an den 
vorgegeben Beispielcode von Maxim gehalten: 
http://www.maxim-ic.com/app-notes/index.mvp/id/126

Die Funktionen scheinen alle super zu funktionieren, wahrscheinlich hab 
ich in der Reihenfolge einen Fehler. Jedenfalls bekomme ich, wenn ich 
das Scratchpad auslese, in jedem der 9 Bytes nur ein "0xFD". Woran liegt 
das?

Schöne Grüße
Paul

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kann in deinem Code nicht's finden, wo du mal zwischen Ein- und 
Ausgang des Portpin umschaltest.
Am besten du setzt die Portleitung dauerhaft auf Low und arbeitest nur 
mit DDR.
-> DDR=1 Ausgang LOW
-> DDR=0 Ausgang HIGH oder Eingang
externen Pullup von 4.7k aber nicht vergessen.

Sascha

Autor: Paul P. (cesupa)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ok, ich hab jetzt den Port auf Low gesetzt mit T_LOW und arbeite in den 
Funktionen nur mit DDR. Es kommt aber immer noch das gleiche Ergebnis...

Autor: Guido Scheidat (flintstone)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul,

bei mir steht vor dem "BE" noch ein "CC".
Vergleich mal den Code:
  // Mach genau das, was auf Seite 19 des Datenblattes steht!
  // Das funktioniert nur bei einem 1wire-Gerät
  unsigned char temperatur(unsigned char volatile *data)
  {
    unsigned char i;

    if (OW_Reset() != 0) {
      // Es wurde kein Gerät gefunden!
      return 0x41;
    } else {
      // CCh - Master issues Skip ROM command.
      OW_Char_Write(0xCC);
      // 44h - Master issues Convert T command.
      OW_Char_Write(0x44);
      // hier müsste noch der starke Pullup hin. 
      // Dieser ist in der Schaltung nicht vorgesehen
      // warte 1 Sekunde, bis die Temperatur umgewandelt ist
      new_delay_ms(1000);
      // Reset - Master issues reset pulse.
      OW_Reset();
      // CCh - Master issues Skip ROM command.
      OW_Char_Write(0xCC);
      // BEh - Master issues Read Scratchpad command.
      OW_Char_Write(0xBE);
      // - Master reads entire scratchpad including CRC.
      for(i = 0; i < 9; i++)
      {
        data[i] = OW_Char_Read();
      }
      // Reset - Master issues reset pulse.
      OW_Reset();

      if (data[0] == 0xFF) return 0x42;

      if (data[0] > 0){
        return 0;
      } else {
        return 0x43;
      }
    }
  }
Gruß
Guido

Autor: Paul P. (cesupa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab den Code jetzt nach deinem ergänzt. Kommt immer noch nur 0xFD im 
ScratchPad.

Autor: Guido Scheidat (flintstone)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den Teil auch übernommen?
      // - Master reads entire scratchpad including CRC.
      for(i = 0; i < 9; i++)
      {
        data[i] = OW_Char_Read();
      }
Ich komme mit deinem Zeiger in "read_data" nicht klar
void read_data(unsigned char* data,unsigned char size)
{
  unsigned char i=0;
  for(i=0;i<size;i++)
  {
    data[i]=read_byte();
  }
}
Das liegt aber daran, dass ich mit Zeigern nie einfach klar komme.

Autor: Paul P. (cesupa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, hab ich jetzt mal in main() so eingefügt und es kommt immer noch das 
gleiche....:(

Autor: Kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo paul,
klingt zwar doof, aber überprüf bitte nochmal die Pin-Belegung von 
deinem Sensor. Ich hab selber mal fast 2 Wochen verzweifelt vor dem 
Programmcode gesessen, bis ich feststellen musste das im Datenblatt der 
Sensor auf dem Kopf dargestellt ist...
Grüße Tom

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.