Zitat Zitat von Zeroeightfifteen
ich habe heute mal ausprobiert ob ich Minustemperaturen auch anzeigen lassen kann. Doch wenn die Temperatur unter 0 fällt, läuft er von 256 abwärtz.
Och mann 0815,

was hatte ich geschrieben? Richtig:
Grundlagen und nochmal Grundlagen lernen, Datenblätter lesen, verstehen und dann variieren.

Da fragst Du:

Dieses Programm funktioniert glaub ich mal so weit. Die temperatur wir aber ohne Komma angezeigt.
was bedeutet denn das rechnen mit value +5 oder *10?

kann ich das ganze nicht mit hardware twi lösen?
da sind doch die befehle auch kürzer.
1) Wie man Zahlen ohne Komma in Zahlen mit Komma verwandelt. Das hattest Du bereits in einem anderen Thread gefragt und auch eine Methode genannt bekommen, wie das zu bewerkstelligen ist. In meinem komplettbeispiel, das ich unten nochmal einfüge, lernst Du noc eine Methode kennen. Was die Operation mit *10 und +5 darfst Du nun selbst herausfinden.

2)Natürlich kannst Du das auch mit Hardware TWI lösen. Nur ändern sich die Befehle überhaupt nicht. Der einzige Unterschied ist der, daß die Bascom Library Hardware TWI anspricht und damit gerinfügig weniger Platz verbraucht.

3)Minus kann das Programmbeisiel nicht, ich habe es bewußt einfach gehalten, für Dich aber wohl noch nicht einfach genug.

Irgendwie scheinst Du die Funktion eines Forums falsch zu verstehen. Hier gibt es Hilfe zur Selbsthilfe, keine Rundum Sorglospakete für Denkfaule.

Ein letztes Mal --- Komplettprogramm einfach:
Code:
'-------------------------------------------------------------------------------
'-----  Beispiel für das Auslesen des Temperatursensors DS1621/1631 ------------
'                                                                       HR 2006
'
'Anmerkung: Dieses Beispiel ist sowohl für den 1621 als auch für den 1631
'geeignet. Der 1631 wird dabei im 1621 Kompatibilitätsmodus betrieben.
'Auf die Auswertung negativer Temperaturen wird verzichtet.
'-------------------------------------------------------------------------------

$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600

$hwstack = 32
$swstack = 32
$framesize = 32

Config Scl = Portc.5
Config Sda = Portc.4
Portc.5 = 1                                  'Pullup Widerstand ein
Portc.4 = 1                                  'Pullup Widerstand ein
I2cinit                                      'entbehrlich
'-------------------------------------------------------------------------------
Declare Sub Readtemp(byval Device As Byte)
Declare Sub Convertvalue_komma1()

Dim Value As Word
Dim Convert_strg As String * 10

Const Ds1 = 150                              'ggf. anpassen
'----------------------------- Hauptprogramm -----------------------------------

Do
Call Readtemp(ds1)
Call Convertvalue_komma1()
Print Convert_strg
Waitms 500
Loop

End

'----------------------------- Subroutinen -------------------------------------

'Readtemp liest die Temperatur und stellt sie nach Aufruf in der Variable Value
'in 10tel Grad zu Verfügung. Übergeben wird die Deviceadresse des Sensors.

Sub Readtemp(byval Device As Byte)
Local Deviceread As Byte
Local Lowtemp As Byte
Local Hightemp As Byte

Deviceread = Device + 1

I2cstart
I2cwbyte Device
I2cwbyte &HEE                                'Temperaturmessung anstoßen
I2cstop

I2cstart
I2cwbyte Device
I2cwbyte &HAA                                'Temperaturmessung Lesekommando
I2cstop

I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack                       'LSByte holen (Ganze Grad)
I2crbyte Hightemp , Nack                     'MSByte holen (0,5 Grad Indikator)
I2cstop

Value = Lowtemp * 10
If Hightemp = 128 Then
  Value = Value + 5
End If

End Sub

'-------------------------------------------------------------------------------
'Convertvalue_komma1 wandelt Value in einen String mit einer Nachkommastelle.
'Es wird gezeigt wie ein Zahlenwert in ein String gewandelt wird und dieser
'formatiert werden kann.
'Alternativ kann natürlich auch die "/10, Mod 10 Methode" angewandt werden.

Sub Convertvalue_komma1()

Convert_strg = Str(value)
Convert_strg = Format(convert_strg , " 0.0")

End Sub
'-------------------------------------------------------------------------------
und eine Erweiterung auf negative Temperaturen:

Code:
Sub Readtemp(byval Device As Byte)

  Minusflag = 0
  Local Deviceread As Byte
  Local Lowtemp As Byte
  Local Hightemp As Byte
  Local Templow As Byte
  Deviceread = Device + 1

  I2csend , Device , &HEE                    'Temperaturmessung anstoßen

  I2csend , Device , &HAA                    'Temperaturmessung Lesekommando

  I2cstart
  I2cwbyte Deviceread
  I2crbyte Lowtemp , Ack                     'LSByte holen (ganze Grad)

  Templow = Lowtemp And &H80
  If Templow = 128 Then
    Minusflag = 1
    Lowtemp = 255 - Lowtemp
    Lowtemp = Lowtemp + 1
  End If

  I2crbyte Hightemp , Nack                   'MSByte holen (0,5 Indikator)
  I2cstop

  Value = Lowtemp * 10
  Value_x = Lowtemp                          'um das LSB für EEprom
                                             'Ausgabe zu retten
  If Hightemp = 128 Then                     '+/- Auswertung
      If Minusflag = 0 Then Value = Value + 5
  '    If Minusflag = 1 Then Value = Value - 5
  End If

End Sub
Bevor Du Dich nun wieder mit Fragen meldest, wäre es schön, wenn Du endlich mal die Grundlagen von I2C lernen würdest und das Datenblatt liest. Dann wirst Du evtl. auch weitere Antworten erwarten können.

Henrik