Problem mit DS18S20

OP #1642430
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
Angehängte Dateien:
#1642750
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
#1644167
Lesenswert?
• ▲
▼
Hallo Paul,

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

7
    if (OW_Reset() != 0) {
8
      // Es wurde kein Gerät gefunden!
9
      return 0x41;
10
    } else {
11
      // CCh - Master issues Skip ROM command.
12
      OW_Char_Write(0xCC);
13
      // 44h - Master issues Convert T command.
14
      OW_Char_Write(0x44);
15
      // hier müsste noch der starke Pullup hin. 
16
      // Dieser ist in der Schaltung nicht vorgesehen
17
      // warte 1 Sekunde, bis die Temperatur umgewandelt ist
18
      new_delay_ms(1000);
19
      // Reset - Master issues reset pulse.
20
      OW_Reset();
21
      // CCh - Master issues Skip ROM command.
22
      OW_Char_Write(0xCC);
23
      // BEh - Master issues Read Scratchpad command.
24
      OW_Char_Write(0xBE);
25
      // - Master reads entire scratchpad including CRC.
26
      for(i = 0; i < 9; i++)
27
      {
28
        data[i] = OW_Char_Read();
29
      }
30
      // Reset - Master issues reset pulse.
31
      OW_Reset();
32

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

35
      if (data[0] > 0){
36
        return 0;
37
      } else {
38
        return 0x43;
39
      }
40
    }
41
  }
Gruß
Guido
#1644235
Lesenswert?
• ▲
▼
Hast du den Teil auch übernommen?
1
      // - Master reads entire scratchpad including CRC.
2
      for(i = 0; i < 9; i++)
3
      {
4
        data[i] = OW_Char_Read();
5
      }
Ich komme mit deinem Zeiger in "read_data" nicht klar
1
void read_data(unsigned char* data,unsigned char size)
2
{
3
  unsigned char i=0;
4
  for(i=0;i<size;i++)
5
  {
6
    data[i]=read_byte();
7
  }
8
}
Das liegt aber daran, dass ich mit Zeigern nie einfach klar komme.
Gast #1713532
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.