www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC und Sensor DS18S20


Autor: Geri (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich versuche seit einiger Zeit einen Temperaturmessung mit dem DS18S20
und einem PIC18F452.

Als Pullup dient ein 4K7-Widerstand. Als Ein-Ausgang wird Pin A4
verwendet. Mit einem Oszilloskop habe ich geprüft ob die Resetsequenz
richtig abgearbeitet wird. Diese scheint OK zu sein.
Auch die Delay-Routine scheint zu passen.

Im i-net habe ich einige Beispiele gefunden und bin sie durchgegangen.
Temperatur konnte ich aber noch keine messen. Irgendwo habe ich noch
einen Fehler, kann ihn aber einfach nicht finden!!

Vielleicht habt ihr ja noch einen guten Rat, wenn Ihr den Code
anschaut.

Beste Grüsse und vielen Dank für Eure Tipps

Geri

Autor: Geri (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammmen

Ich hänge immer noch an diesem Problem und komme einfach nicht drauf an
was es liegen könnte. Mein Code funktioniert folgendermassen:

DSRESET();              // Reset Ds18S20
DSTXBYTE(0xCC);    // skip ROM
DSTXBYTE(0x44);    // convert temperature
DelayMS(1500);    // wait until conversion has been finished
DSRESET();    // REset DS18S20
DSTXBYTE(0xCC);    // skip ROM
DSTXBYTE(0xBE);    // read scratch pad
for (k=0; k<9; k++)  // read 9 bytes from scratchpad
  buf[k]=DSRXBYTE();


Das Timing-Diagramm habe ich auch schon mit dem Oszilloskop getestet
(siehe Anhang). Lt. Datenblatt bin ich im erlaubten Bereich.

Wie man am Timing-Diagramm erkennen kann, meldet sich der Sensor bei
einem Reset wie erwartet.

Wenn ich das Scratch-Pad auslese, dann erhalte ich lauter Nullen.

Hat jemand von Euch bitte vielleicht noch eine Idee wo der Fehler
liegen könnte?

Für jeden Hinweis wäre ich sehr dankbar! Ich stehe mit meinem Latein
momentan am Ende.

Vielen Dank im Voraus

Geri

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, es sind nicht lauter Nullen, die ich auslese, sondern 0xFFs:)

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Pullup ist viel zu gross.

Ich würde mal 1 KOhm probieren.

Davon abgesehen gibt es in einigen Anleitungen einen Fehler im
Anschluss des DS18x20. Der VDD Pin darf nicht unbeschaltet bleiben.

Mal im Datenblatt nachlesen.

Gruss
Axel

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Axel

Vielen Danm für Deinen Hinweis.

Den 1K-Widerstand habe ich eingelötet. Es ergibt sich allerdings keine
Änderung.

"Davon abgesehen gibt es in einigen Anleitungen einen Fehler im
Anschluss des DS18x20. Der VDD Pin darf nicht unbeschaltet bleiben. "

Ich nehme an, du sprichst vom parasitäteren Betrieb.

Bei mir wird der Sensor mit VDD = 5V betrieben.

VDD liegt bei mir auf 5V+

Vielen Dank nochmals
Geri

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, dann fällt mir auch nichts mehr ein.

Der Code scheint soweit ok zu sein.

Evtl. mal versuchen, das Auslesen des Scratchpads mit dem Oszilloskop
mitzukriegen (evtl. an einem freien Pic-Pin ein Triggersignal
generieren).

Gruss
Axel

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Axel

Vielen Dank für Deine rasche Rückmeldung. Gute Idee! Werde es mal
probieren und mich dann wieder melden.

Beste Grüsse und nochmals vielen Dank

Geri

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe nun die Antwort vom Sensor beim Lesen des Scratch-Pad mit dem Oszi
aufgenommen.

So wie es aussieht liefert der Sensor acht mal den Wert 0.

hm..???

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist doppelt der Wurm drin.

Denn Null liefert der nur bei 0°C, die Du wohl nicht hast.

Und Dein Programm tastet die Werte dann auch noch falsch ab.

Ich würde mal versuchen, die ganze Datenübertragung nachzuvollziehen
und zu checken.

Also auch das Senden der Codes. Dazu am Besten ein Triggersignal
generieren an den jeweiligen Stellen und jede Aktion einzeln mit dem
Oszi checken.

Gruss
Axel

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Axel

Vielen Dank für Deine Rückmeldung. Habe gedacht, dass das alles passt.
Werde es aber nochmals prüfen.

Im Zimmer hat es aktuell etwa 23 °C.

Vielen Dank, ich werde mich dann wieder melden.

Geri

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das Timing der Sendedaten und der gelesenen Daten geprüft. Es
passt. Wenn ich das Scratchpad auslese, erhalte ich acht mal den Wert
0xFF (und nicht 0):)

Beste Grüsse

Geri

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe das Problem nun gefunden. Wie Axel gemeint hat, es war ein
Timing-Problem.

Kleine Verzögerungen haben genau gestimmt. Bei grösseren kam es zu
Problemen und ab und zu fehlten ein paar us.
Ich nehme an, dass es ab dieser Definition zu Problemen kam.

#define Delay_us(x) Delay10TCYx(x*5/10)

Delay_us(5); i.O

aus Delays.h
void Delay10TCYx(PARAM_SCLASS unsigned char);

Beste Grüsse und Axel nochmals vielen Dank für Deine Hilfe!!!

Geri
PS: Lauffähigen Code werde ich dann noch posten:)

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich denke, ich habe das Problem gefunden. Es hat mich mehrere Stunden
gekostet. Irgendwie hat der Compiler ein Problem mit der vierten
Programmzeile.

// falsch
while (1==1)
{
  PORTDbits.RD0 = 1;      // Trigger für Oszi
  Delay10TCYx(50*5/10);   // Wartezeit =  500 us
  PORTDbits.RD0 = 0;      // reset Trigger
}

// richtig
while (1==1)
{
  PORTDbits.RD0 = 1;      // Trigger für Oszi
  Delay10TCYx(50/2);      // Wartezeit =  50 us
  PORTDbits.RD0 = 0;      // reset Trigger
}

Beste Grüsse

Geri

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.