Forum: Mikrocontroller und Digitale Elektronik ds1820 software probleme bascom


von sebastian (Gast)


Lesenswert?

hi!

ich versuche zur zeit vergeblich ein funktionierendes programm für den 
ds1820 zu bekommen. im internet habe ich dieses gefunden



1
'**********************************************************
2
'Compiler            : BASCOM-AVR
3
'Hardware            : DS1820 an PD.6
4
'                      LC-Display
5
'Chip type           : AT90S2313
6
'**********************************************************
7
8
$regfile = "2313def.dat"                                    'AT90S2313
9
$crystal = 3579545                                          'Quarz 3.579MHz
10
11
Config 1wire = Portd.6                                      'DS1820 DQ an PD6
12
13
Config Lcd = 20 * 2
14
Config Lcdbus = 4
15
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.0 , E = Portb.1
16
17
Dim Ds1820 As Integer                                       'Variablennname und Typ festlegen
18
Dim Halb As Byte
19
20
Cursor Off
21
Cls
22
Lcd "DS1820 an PD.6"                                        'Ausgabe des Textes auf LCD
23
Wait 3                                                      'warte 3 Sekunden
24
Cls                                                         'lösche LCD
25
Lcd "Temp:"                                                 'Ausgabe des Textes auf LCD
26
Do                                                          'Beginn Schleife
27
  1wreset                                                   'Reset DS1821
28
  1wwrite &HCC                                              'überspringe ROM
29
  1wwrite &H44                                              'starte Temperaturkonvertierung
30
  Waitms 300                                                'warte 100 Millisekunden
31
  1wreset                                                   'Reset DS1821
32
  1wwrite &HCC                                              'Überspringe ROM
33
  1wwrite &HBE                                              'sende T-Register 60h und 61h an Atmel
34
  Ds1820 = 1wread(9)                                        'lese die empfangenen Daten
35
  1wreset                                                   'Reset DS1821
36
  Halb = Ds1820 And 1                                       'prüfen auf letztes Bit (x.5 Grad)
37
  Locate 2 , 1                                              'LCD-Cursor auf Zeile2, Spalte1
38
  Shift Ds1820 , Right                                      'entferne letztes Bit (Rechtsschieben)
39
  If Ds1820 > 127 Then                                      'wenn Temperatur negativ ist
40
    Lcd "-"                                                 'dann "Minus" auf LCD ausgeben
41
    Ds1820 = 256 - Ds1820                                   'und negative Temperatur berechnen
42
    If Halb = 1 Then Ds1820 = Ds1820 - 1                    'wenn Wert x.5 dann um 1 korrigieren
43
  Else                                                      'wenn Temperatur Positiv
44
    Lcd " "                                                 'dann Leerzeichen auf Display ausgeben
45
  End If
46
  Lcd Ds1820 ; ".";                                         'Ausgabe Temperatur und Komma
47
  If Halb = 1 Then                                          'wenn x.5
48
    Lcd "5"                                                 'dann "5" nach Komma ausgeben
49
  Else                                                      'wenn x.0
50
    Lcd "0"                                                 'sonst "0" nach Komma ausgeben
51
  End If
52
  Lcd "C "                                                  'Ausgabe des Textes auf LCD
53
  Wait 1                                                    'warte 1 Sekunde
54
Loop                                                        'zum Beginn der Schleife
55
56
End


im positiven temperatur bereich funktioniert es auch eigentlich 
einwandfrei. nur im negativen wird dann nur mist angezeigt. ich bin das 
programm dann mal schritt für schritt durchgegangen und da ist mir 
aufgefallen, dass es die negativen temp gar nicht erkennen kann, da hier 
nicht die vorzeichen abgefragt werden, sondern nur die werte (siehe If 
Ds1820 > 127 Then).
außerdem verstehe ich nicht, warum mit diesem befehl die temperatur 
nocheinmal korrigiert wird (If Halb = 1 Then Ds1820 = Ds1820 - 1)

nun meine frage: wie kann ich die negativen temperaturen richtig 
erkennen und abfragen?
vielen dank für antworten

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Bei negativen Temperaturen liefert der DS1820 den Messwert im 
Zweierkomplement.

http://de.wikipedia.org/wiki/Zweierkomplement

von Jörg G. (joergderxte)


Lesenswert?

In C würde ich schreiben:
1
int ds1820;
2
// ...
3
  ds1820 = onewread(9);
4
  if (ds1820 & (1<<8)) {
5
    ds1820 |= 0xFe00;
6
  }
Was sich wohl so (oder zumindest so ähnlich) nach BASIC übersetzen 
lässt:
1
  '...
2
  Ds1820 = 1wread(9)
3
  ' ist das 9. Bit gesetzt?
4
  if Ds1820 and &H0100 then
5
    ' dann setze auch alle hoeheren Bits
6
    Ds1820 = Ds1820 Or &Hfe00
7
  end
8
'...

hth, Jörg (der nur ganz kurz ins bascom-manual geschnuppert hat)

von Heiko B. (dh2faa)


Lesenswert?

Hallo,

auf meiner Homepage http://www.dh2faa.de findest du unter
projekte - temperatursensor DS18S20
ein funktionierendes BASCOM-Beispiel mit dem Sensor und einem 2313
http://www.dh2faa.de/ds18s20/temperatur.bas

Viel Spaß

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.