Forum: Mikrocontroller und Digitale Elektronik Problem mit DS18S20


von Paul P. (cesupa)


Angehängte Dateien:

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

von Sascha W. (sascha-w)


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

von Paul P. (cesupa)


Angehängte Dateien:

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...

von Guido S. (flintstone)


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

von Paul P. (cesupa)


Lesenswert?

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

von Guido S. (flintstone)


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.

von Paul P. (cesupa)


Lesenswert?

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

von Kai (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.