mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ds1820 software probleme bascom


Autor: sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!

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



'**********************************************************
'Compiler            : BASCOM-AVR
'Hardware            : DS1820 an PD.6
'                      LC-Display
'Chip type           : AT90S2313
'**********************************************************

$regfile = "2313def.dat"                                    'AT90S2313
$crystal = 3579545                                          'Quarz 3.579MHz

Config 1wire = Portd.6                                      'DS1820 DQ an PD6

Config Lcd = 20 * 2
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.0 , E = Portb.1

Dim Ds1820 As Integer                                       'Variablennname und Typ festlegen
Dim Halb As Byte

Cursor Off
Cls
Lcd "DS1820 an PD.6"                                        'Ausgabe des Textes auf LCD
Wait 3                                                      'warte 3 Sekunden
Cls                                                         'lösche LCD
Lcd "Temp:"                                                 'Ausgabe des Textes auf LCD
Do                                                          'Beginn Schleife
  1wreset                                                   'Reset DS1821
  1wwrite &HCC                                              berspringe ROM
  1wwrite &H44                                              'starte Temperaturkonvertierung
  Waitms 300                                                'warte 100 Millisekunden
  1wreset                                                   'Reset DS1821
  1wwrite &HCC                                              berspringe ROM
  1wwrite &HBE                                              'sende T-Register 60h und 61h an Atmel
  Ds1820 = 1wread(9)                                        'lese die empfangenen Daten
  1wreset                                                   'Reset DS1821
  Halb = Ds1820 And 1                                       'prüfen auf letztes Bit (x.5 Grad)
  Locate 2 , 1                                              'LCD-Cursor auf Zeile2, Spalte1
  Shift Ds1820 , Right                                      'entferne letztes Bit (Rechtsschieben)
  If Ds1820 > 127 Then                                      'wenn Temperatur negativ ist
    Lcd "-"                                                 'dann "Minus" auf LCD ausgeben
    Ds1820 = 256 - Ds1820                                   'und negative Temperatur berechnen
    If Halb = 1 Then Ds1820 = Ds1820 - 1                    'wenn Wert x.5 dann um 1 korrigieren
  Else                                                      'wenn Temperatur Positiv
    Lcd " "                                                 'dann Leerzeichen auf Display ausgeben
  End If
  Lcd Ds1820 ; ".";                                         'Ausgabe Temperatur und Komma
  If Halb = 1 Then                                          'wenn x.5
    Lcd "5"                                                 'dann "5" nach Komma ausgeben
  Else                                                      'wenn x.0
    Lcd "0"                                                 'sonst "0" nach Komma ausgeben
  End If
  Lcd "C "                                                  'Ausgabe des Textes auf LCD
  Wait 1                                                    'warte 1 Sekunde
Loop                                                        'zum Beginn der Schleife

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei negativen Temperaturen liefert der DS1820 den Messwert im 
Zweierkomplement.

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

Autor: Jörg G. (joergderxte)
Datum:

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

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

Autor: Heiko B. (dh2faa)
Datum:

Bewertung
0 lesenswert
nicht 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ß

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.