Forum: Mikrocontroller und Digitale Elektronik DS18B20 & XMega


von Werner (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag.

Ich benötige dringend Hilfe sonst muss ich mich wahscheinlich in die 
Psychatrie einweisen lassen. Seit fast 2 Wochen kämpfe ich mich meinem 
Xplained-Experimentierboard mit dem Xmega128A1 und einem DS18B20-Sensor.
Ich hatte vor mein Raumthermometer bzw. den analogen Sensor durch einen 
digitalen auszutauschen. Nach einigen Recherchen fiel die Auswahl auf 
den DS18B20. Dafür gab es einige Beispielprogramme (zwar oft nur für 
normale Mega`s, aber kann man anpassen) und auch auf den ersten Blick 
schien das 1wire-Protokoll nicht sonderlich schwer zu sein - von daher 
dachte ich, dass ich es schon hinkriegen würde. Falsch gedacht. 
Mittlerweile kotz ich im Strahl, weil nichts geht.

Bei dem Code in der ZiP-Datei muss normalerweise nicht mal etwas 
angepasst werden, außer das PORT für die blinkende LED, und selbst bei 
dem Programm hängt sich der uC irgendwo vorher auf und geht nicht in die 
while-Schleife.
In meinem Code habe ich die Sensoranzahl auf 1 gesetzt. Laut dem Code 
ist der Sensor im Parasite-Mode betrieben, so dass ich ihn auch danach 
angeklemmt habe.

(Das Programm soll die Temperatur über ein Display ausgeben, aber ich 
habe noch kein passendes Display da. Die Anzeige soll übergangsweise per 
UART erfolgen. Das müsste dann später noch angepasst werden. Zum 
Debuggen dürfte es aber m.E. keine Rolle spielen.)

Könnte mir jemand auf die Sprünge helfen und mal drüber gucken? 
Vielleicht hat auch jemand ein auf den xmega128a1 angepasstes Programm?

MFG Werner

von Steffen (Gast)


Lesenswert?

Hallo Werner,

es gibt mehrere Dinge die man beachten muss. Zum ersten versuch mal den 
Pullup von 4,7k auf 2,2k zu verringern. Alle die ich habe musste ich 
anpassen.

Dann lass dem DS mehr Zeit. 250ms finde ich etwas zu kurz. Teste mal am 
Anfang mit 1s.

Gruß Steffen

von Werner (Gast)


Lesenswert?

Hallo Steffen. Die 250ms beziehen sich doch nur auf das togglen der LED.

von Steffen (Gast)


Lesenswert?

Das mein ich nicht sorry, hab mich auch verschieben, meine die 750ms für 
12bit. Du kannst auch vorher testen ob du überhaupt Daten bekommst. 
Frage einfach die ID ab und lass dir diese Anzeigen.

von Werner (Gast)


Lesenswert?

Ich habe jetzt nochmal ganz einfach mit einer 1wire-Lib selbst was 
zusammen gebastelt:
1
 #include "1wire.h"
2
#include <util/delay.h>
3
#include <stdio.h>
4
5
#define F_CPU 2000000UL
6
//#########################################
7
//#########################################
8
//#########################################
9
// S T A R T  M A I N  P R O G R A M 
10
char i, test, ds1820[9];
11
12
int main (void)
13
{
14
  
15
  while (1)
16
  {
17
    test=w1_reset();
18
    w1_command(CONVERT_T, NULL);
19
    _delay_ms(750);
20
    test=w1_reset();
21
    w1_command(READ, NULL);
22
    for (i=0; i<9; i++)
23
    {
24
      ds1820[i] = w1_byte_rd();
25
    }
26
    
27
  }
28
29
  
30
}
31
// E N D  M A I N  P R O G R A M 
32
//#########################################
33
//#########################################
34
//#########################################

Ich arbeite dort mit SkipRom, da ich nur einen Sensor dran habe.
Nun schreibt es mir in das Array ds1820 die Sachen aus dem Skratchpad.
Wenn ich dem Datenblatt glauben schenken darf enthalten die ersten 
beiden Bytes Temperaturinformationen richtig?
0x0182 müsste könnte somit mit etwas weniger als 25grad ein sinnvoller 
wert sein oder?

von Karl H. (kbuchegg)


Lesenswert?

Werner schrieb:

> 0x0182 müsste könnte somit mit etwas weniger als 25grad ein sinnvoller
> wert sein oder?

Könnte richtig sein

0x182 ist dezimal 386
386 / 16 = 24.1°C

Könnte stimmen. Ist zumindest im plausiblen Bereich.
Mach dem DS1820 'Feuer unterm Hintern' (anfassen reicht :-) und sieh 
nach, ob der Wert steigt. Alternativ: häng ihn zum Fenster raus und sieh 
nach, ob der Wert sinkt.

Jetzt wärs natürlich gut, wenn du irgendwo Werte einfach ausgeben 
könntest. Dann deinen Auslesevode einfach in eine Schleife packen, 
zwischen den Abfragen ein paar Sekunden warten (um die Eigenerwärmung 
klein zu halten) und das Ergebnis der Messung einfach ausgeben. Dann 
siehst du schon wesentlich klarer, wenn der DS1820 im Kühlschrank 
irgendwas um die 5 bis 7°C anzeigt. So schwer ist das nicht, sich in 
seiner Umgebung ein paar unterschiedliche Temperaturen zu suchen, deren 
Wert man zumindest soweit kennt, dass man sagen kann: das Messergebnis 
ist plausibel.

: Bearbeitet durch User
von Werner (Gast)


Lesenswert?

Steigt. Mit anfassen brachte der Sensor Werte bis 0x01ED.

von Werner (Gast)


Lesenswert?

Ok. Ich glaub ohne diese ganzen anderen Bibliotheken und dem Wirrwar 
gehts.
Jetzt nochmal dumm gefragt, aber wenn ich den Modus ändern will, sprich 
die Auflösung ändern - wie kann ich auf das Controlbyte im Skratchpad 
beschreiben?
Muss ich einfach drei Bytes hintereinander raus schicken und das dritte 
wird automatisch ins Configurationsregister geschrieben oder sehe ich 
das falsch?

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.