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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren